Apache Tomcat 用户访问权限的最佳实践

Apache Tomcat 用户访问权限的最佳实践

我有一个 Linux 机器,供多个开发人员共享。他们想将 war 文件部署到共享位置 (/opt/tomcat) 中的 apache tomcat 中。

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

目录结构如下/opt/tomcat

bin/

conf/

lib/

logs/

temp/

webapps/

work/

什么是最佳实践在上述情况下 - 对用户来说最合适的访问权限是什么?暂时,我已将 webapps 和 logs 的权限更改为 777。

谢谢

答案1

我这样做:

我们把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 MYUSER

答案2

Non-Tomcat settingsTomcat 安全指南部分提供了有关此主题的有用信息。请参见此处:

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

文件权限也应适当限制。以 ASF 的 Tomcat 实例为例(其中禁用了自动部署,并将 Web 应用程序部署为展开目录),标准配置是让所有 Tomcat 文件都归属于 Tomcat 组的 root 用户所有,而所有者拥有读写权限,组只有读取权限,其他人没有权限。例外情况是日志、临时和工作目录归属于 Tomcat 用户而非 root 用户。这意味着即使攻击者破坏了 Tomcat 进程,他们也无法更改 Tomcat 配置、部署新的 Web 应用程序或修改现有的 Web 应用程序。Tomcat 进程以 007 的 umask 运行以维护这些权限。

答案3

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

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

授予组写入权限/opt/tomcat(即 570)并设置粘性位,以便他们只能删除他们拥有的文件(chmod 1570)。授予服务器对日志的写入权限,并授予开发人员读取权限(文件夹为 0740,文件为 0640,粘性位可能没有必要,并且永远不要将其授予文件,只授予文件夹,因为它具有不同的含义(当文件可执行时,使用所有者的权限执行))。

然后,您需要授予webdev某些目录的写入权限 (1570)。您需要进行一些反复试验,并且它可能取决于应用程序。这些文件夹必须是 1570,而其他一些文件夹可以是 0500)。

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

答案4

我认为 @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 会在重启时自动启动,并且有一个“重新启动”命令。我相信 RHEL/CentOS 用户有一个等效的 yum 包。(是的,有一个用于本地 OSX 安装的自制安装程序)。

如果您遇到问题,可以使用一个/usr/share/bin名为的实用工具来configtest.sh报告是否存在权限或其他错误。请注意,有一个建议添加一些符号链接的开放错误

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

相关内容