apache tomcat对用户的访问权限的最佳实践


22

我有一个由各种开发人员共享的Linux系统。他们想将战争文件部署在共享位置(/ opt / tomcat)的apache tomcat中。

由于他们没有sudo访问权限,因此我必须更改tomcat目录的文件夹权限。

目录结构/opt/tomcat是-

bin/

conf/

lib/

logs/

temp/

webapps/

work/

在上述情况下的最佳做法是什么-最适合用户的访问权限?暂时,我已将Web应用程序和日志的权限更改为777。

谢谢

Answers:


32

我这样做:

我们将tomcat用户作为tomcat文件夹的所有者:

# chown -R tomcat:tomcat /opt/tomcat

用户无法修改tomcat的配置:

# chmod -R g+r /opt/tomcat/conf

用户可以修改其他文件夹:

# chmod -R g+w /opt/tomcat/logs
# chmod -R g+w /opt/tomcat/temp
# chmod -R g+w /opt/tomcat/webapps
# chmod -R g+w /opt/tomcat/work

为新文件激活粘性位,以定义权限:

# chmod -R g+s /opt/tomcat/conf
# chmod -R g+s /opt/tomcat/logs
# chmod -R g+s /opt/tomcat/temp
# chmod -R g+s /opt/tomcat/webapps
# chmod -R g+s /opt/tomcat/work

最后,我们添加tomcat组,我们希望可以使用tomcat的用户:

# usermod -a -G tomcat MIUSER

4
如果在没有-a标记的情况下完成操作,则将用户添加到tomcat组,但将MIUSER从其所属的所有其他组中删除(这意味着不再有sudo组)。我只需要迅速采取行动,即可在其中一台服务器上的主帐户上恢复组,然后从仍然保留这些组的旧会话中检索它们。警告其他阅读此答案的用户。
Axoren '16

我已将选项添加到响应中。谢谢
intropedro '16

如何让Tomcat以tomcat用户身份启动?我的是从守护进程开始的,到现在为止它已经以root运行。
Stephane

1
您好Stephane,在Ubuntu中,Tomcat是使用tomcat用户执行的,它位于文件/ etc / default / tomcat8中,具有变量TOMCAT8_USER和TOMCAT8_GROUP。在其他Linux我不知道。
intropedro

是否+s设置了用户/组ID?手册页说+t有点粘。
bmaupin

13

Non-Tomcat settingsTomcat的安全HOWTO的部分提供了有关这个话题的有用信息。看这里:

Tomcat不应在root用户下运行。为Tomcat进程创建一个专用用户,并为该用户提供操作系统的最低必需权限。例如,应该不可能使用Tomcat用户远程登录。

文件权限也应适当限制。以ASF上的Tomcat实例为例(禁用自动部署,并将Web应用程序部署为分解目录),标准配置是使所有Tomcat文件归root用户所有,并具有Tomcat组,而所有者拥有读/写特权。 ,群组只有人阅读,而世界没有任何权限。例外是Tomcat用户而非root拥有的日志,临时目录和工作目录。这意味着即使攻击者破坏了Tomcat进程,他们也无法更改Tomcat配置,部署新的Web应用程序或修改现有的Web应用程序。Tomcat进程以umask 007运行,以维护这些权限。


我想知道所描述的方法是否不仅可以在Tomcat中采用,还可以与其他服务(数据库,反向代理等)一起采用。您认为可行/明智吗?
Paolo

1

您需要遵循最小特权原则。服务器(可能是www-data,但您需要检查)需要能够读取大多数文件(比方说全部)并仅写入日志。Web开发人员可以在需要的地方写东西。在目录上设置粘性位,以便只有文件所有者才能删除它。

实际上,您需要创建一个组(例如webdev),并将所有开发人员和服务器添加到该组中(usermod -aG webdev <user>usermod -A webdev <user>取决于您的Linux风格)。chown将所有文件和目录提供给Web服务器用户,将所有目录chmod都设置为500,将所有文件设置为400(bin可执行文件也必须为500的情况除外)。

/opt/tomcat向该组授予写权限(将是570)并设置粘滞位,以便他们只能删除其拥有的文件(chmod 1570)。向服务器授予日志写入权限,向开发人员授予读取权限(文件夹为0740,文件为0640,可能不需要粘贴位,也不要将其授予文件,仅授予文件夹,因为它具有含义不同(可执行文件时在所有者的权限下执行)。

然后,您需要授予webdev对某些目录的写权限(1570)。您需要在此处进行一些尝试和错误,并且它可能取决于应用程序。这些文件夹必须为1570,而其他一些文件夹可以为0500)。

开发人员将需要将对他们的文件的读取访问权限授予该组,以便服务器可以读取它们(即640),并在目录上执行(即750)。


1

我认为@intropedro的答案很好。值得指出的是,使用软件包安装程序可以省去很多麻烦-至少对于Ubuntu上的Tomcat 7而言,apt-get install tomcat7生成的安装目录更为“标准”:

  • /etc/tomcat7 对于配置文件,
  • /var/lib/tomcat7 用于核心库,以及
  • /usr/share/tomcat7 共享资源。

所有权限均按照最小特权原则正确设置,因此将用户添加到组tomcat7足以允许部署。此外,Tomcat服务器设置为可启动和停止为他人(如服务sudo service tomcat start或交替/etc/init.d/tomcat start)。Tomcat会在重新启动时自动启动,并且有一个“重新启动”命令。我确定有一个等效的yum包用于RHEL / CentOS用户。(是的,本地安装OSX有一个自制程序安装程序)。

如果您有任何问题,有一个很好的工具在/usr/share/bin被称为configtest.sh该报告是否有权限或其他错误。请注意,有一个开放的错误建议添加一些符号链接

我们仍在运行Ubuntu trusty(14.04);对于那些运行较新版本的用户,我相信有一个Tomcat 8 apt-get存储库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.