Answers:
我这样做:
我们将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
+s
设置了用户/组ID?手册页说+t
有点粘。
在Non-Tomcat settings
Tomcat的安全HOWTO的部分提供了有关这个话题的有用信息。看这里:
Tomcat不应在root用户下运行。为Tomcat进程创建一个专用用户,并为该用户提供操作系统的最低必需权限。例如,应该不可能使用Tomcat用户远程登录。
文件权限也应适当限制。以ASF上的Tomcat实例为例(禁用自动部署,并将Web应用程序部署为分解目录),标准配置是使所有Tomcat文件归root用户所有,并具有Tomcat组,而所有者拥有读/写特权。 ,群组只有人阅读,而世界没有任何权限。例外是Tomcat用户而非root拥有的日志,临时目录和工作目录。这意味着即使攻击者破坏了Tomcat进程,他们也无法更改Tomcat配置,部署新的Web应用程序或修改现有的Web应用程序。Tomcat进程以umask 007运行,以维护这些权限。
您需要遵循最小特权原则。服务器(可能是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)。
我认为@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存储库。