我正在设置新的 Tomcat 部署,并希望它尽可能安全。
我创建了一个“jakarta”用户并让 jsvc 作为守护进程运行 Tomcat。关于目录权限等限制对Tomcat文件的访问的任何提示?
我知道我需要删除默认的 webapps - 文档、示例等......我应该在这里使用任何最佳实践吗?那么所有的配置 XML 文件呢?那里有什么提示吗?
是否值得启用安全管理器以便 web 应用程序在沙箱中运行?有没有人有设置这个的经验?
我见过有人在 Apache 后面运行两个 Tomcat 实例的例子。看来这可以使用 mod_jk 或 mod_proxy 来完成……两者都有什么优点/缺点?值得麻烦吗?
如果重要的话,操作系统是 Debian lenny。我没有使用 apt-get 因为 lenny 只提供 tomcat 5.5 而我们需要 6.x。
谢谢!
您可以安装 Tomcat 6 以在
jsvc
用户tomcat下运行(而不是root)。这是我上次设置时所做的:我在( )下安装了 Tomcat 应用程序,在
/usr/java/tomcat
(CATALINA_HOME
) 下安装了一个实例:/var/lib/tomcat
CATALINA_BASE
然后我构建了
jsvc
包装器:最后,我收紧了对实例目录的权限:
当你现在运行 Tomcat 时,你需要使用 启动它
jsvc
,所以添加这个脚本/etc/init.d/tomcat
并适当地符号链接它:美国国防部有一个很好的指南,它将 Tomcat 安全指南合并到了一个整体的 Web 服务器安全指南 (SRG) 中。您可以在此处找到更多安全指南:
http://iase.disa.mil/stigs/srgs/Pages/index.aspx
Open Web Application Security Project ( OWASP ) 提供了一个关于保护 Tomcat 的 wiki 页面,您可能会发现它很有用。在撰写本文时,它似乎更专注于 Tomcat 5.x,但希望随着时间的推移会得到更新。
我会认真考虑从测试中向后移植 tomcat6 包。您可以订阅该软件包以获取有关上传到存档的新版本的通知。(由于我从事 debian 打包工作,所以我略有偏见)。
我没有尝试在安全管理器下运行 webapps,因为没有应用程序附带策略,坦率地说,自己创建一个非常耗时的操作。如果你是偏执狂,你当然可以这样做。它主要涉及运行tomcat,等待某些事情发生,然后将异常添加到策略并再次重新启动tomcat。冲洗、重复等。
显然,不要以 root 身份运行 tomcat。tomcat 用户不应该能够写入日志目录或工作目录之外的任何内容。你应该确保你的 webapps 目录只包含你想要运行的 webapps。
我总是在apache后面运行tomcat。这部分是因为我想更多的人使用 apache,所以会更快地发现错误。这几乎是一厢情愿的想法,您不应该依赖这是一项安全改进。Apache 给你带来的是可配置性。有很多模块是 tomcat 没有的,或者不能高效地完成。mod_cache、mod_ssl、mod_security 都浮现在脑海中。您可以选择 mod_jk、mod_proxy(以及 mod_proxy_http 或 mod_proxy_ajp)。mod_jk(和 mod_proxy_ajp)使用二进制 AJP 协议而不是效率较低的 http 协议。我建议使用 mod_jk。
不要忘记在tomcat-users.xml中修改admin角色的默认密码,这很重要,否则恶意的人可以在没有限制权限的情况下将应用程序部署到tomcat服务器的后门,并尝试做很多坏事。