我尝试创建一个使用 alpine (rootfs) 保护的容器 docker,它允许我运行 tomcat8 中包含的 web 应用程序 java。特别是,应该以什么用户身份运行 tomcat 守护进程?
我正在阅读 apache tomcat 8 的文档提到这一点,我有一个困惑。 来自 tomcat 8 文档:
Tomcat不应该在root用户下运行。为 Tomcat 进程创建专用用户,并为该用户提供操作系统所需的最低权限。例如,不应使用 Tomcat 用户远程登录。
但随后说道:
以ASF的Tomcat实例为例(禁用自动部署,Web应用程序部署为分解目录),标准配置是让 Tomcat 组的 root 拥有所有 Tomcat 文件,所有者具有读/写权限,组仅具有读权限,而 world 没有权限。例外情况是由 Tomcat 用户而非 root 拥有的日志、临时目录和工作目录。这意味着即使攻击者破坏了 Tomcat 进程,他们也无法更改 Tomcat 配置、部署新的 Web 应用程序或修改现有的 Web 应用程序。 Tomcat 进程以 umask 007 运行以维护这些权限。
因此,我不清楚 tomcat 应该以哪个用户身份运行。如果 CATALINA_HOME/bin/startup.sh 的所有者是具有组 tomcat 的 root 用户,并且我创建另一个用户(例如具有组 tomcat 的 app)来运行 tomcat 守护程序,则运行 CATALINA_HOME/bin/startup.sh 后将不会启动,因为所有者用户是root,组只有读取权限。
有人有以非 root 用户身份使用 tar.gz 二进制文件运行 tomcat 守护进程的经验吗?
提前致谢。
答案1
创建一个用户帐户tomcat
。确保它是该组的成员tomcat
。
文档中所有提到“读取”组权限的地方,使它们与所有者相同除非没有写权限。因此,如果用户具有脚本的读取、写入和执行权限,则该组应该具有读取和执行权限。
文档中安全建议的目的是允许用户tomcat
运行 Tomcat 应用程序,但不能更改任何文件。