1 引言
由于官方尚未发布Tomcat 7的强化指南,ERNW便总结了相关的设置,并制作出本文中列出的清单。尽管有大量的设置可以被应用,但本文旨在提供一些加固方法的基础。可能对操作系统功能造成严重影响的并且需要进行进一步大量测试的设置并未列在该清单中,或者被标记为可选。
我们用“强制”或“可选”标记了此清单中的每个推荐设置,用以清楚的表达从我们的角度来看哪个设置是必须的(强制)或者是应该的(可选)。“可选”也意味着我们推荐你应用此设置,但这可能会影响系统的必需功能。
2 操作与系统安全
2.1 补丁与漏洞管理
必须及时安装与安全相关的Tomcat更新:
必须在10天内安装高危或重要优先级的更新和补丁。
必须在发布后30天内安装中等优先级的更新和补丁。
必须在发布后90天内安装低优先级更新。
有关补丁的可用性和严重性的信息,请参见tomcat.apache.org/lists.html#…
更新可能会影响功能。关于核心/业务方面的Tomcat的更新可能带来的副作用,请查看tomcat.apache.org/lists.html#…
2.2 Tomcat服务的最小权限
在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如不允许远程登录)。必须检查以最小特权用户身份使用操作系统资源库安装程序的行为,以确保Tomcat不以root /管理员身份运行。必须在配置启动机制的操作系统层级上确保这一点(例如Microsoft Windows上的Windows服务或Unix上的rc脚本):
图一:Windows服务配置
关于安全的服务配置,请参考ERNW Windows加固指南
图二:FreeBSD rc脚本
具体配置与Unix系统和Tomcat版本有关。例如FreeBSD上的Tomcat 7已经不支持配置rc.conf中的用户帐户,因此用户名被硬编码在启动脚本中—这是不推荐的。在FreeBSD上,web和应用服务器应该是以www用户身份运行,可参考www.freebsd.org/doc/en/book…
以低权限用户身份运行Tomcat可能会影响Tomcat的某些功能。例如,特权端口不可被设置为监听端口。为了解决该问题,可以在系统上使用本地HTTP代理(例如使用Apache的mod_jk模块)或者定义包转发规则,使得进入流量被转发到Tomcat监听的非特权端口。
2.3 限制访问Tomcat文件夹
Tomcat文件夹只能由tomcat用户本身访问,尤其是对于目录tomcathome/conf/和{tomcat_home}/conf /和tomcathome/conf/和{tomcat_home}/webapps。
当不需要通过应用程序服务器自动部署时,标准配置就是将所有Tomcat文件的所有者设置为root,并且所属群组设置为Tomcat。然后用chmod 740仅允许root用户编辑文件并允许Tomcat用户读取文件。例外是,临时和工作目录的所有者应该是Tomcat用户而不是root用户。
该设置会影响自动部署。(参见第8.5小节)
3 管理界面
Tomcat的主要管理界面被称为Manager应用程序。尽管保护该应用程序对于Tomcat服务器的安全至关重要,但是该应用程序在许多环境中被发现是非常的暴露的(例如,没有部署网络级限制以及使用弱/默认登录信息)。如果可能的话,管理性质的任务应该是在操作系统级别执行(例如使用RDP或SSH),并且避免使用Manager应用程序(另见第8.3小节)。如果无法做到,下面小节描述的设置(或许还要考虑跳板机)应该与安全认证机制(另请参见第4小节)和加密传输(参见第6.3小节)结合使用。
3.1 网络层限制
如果要使用Manager应用程序,应该只允许从授权的IP地址访问其管理界面。
这可以通过在CATALINA_HOME/webapps/manager/META-INF/context.xml文件中的做以下设置来实现。以下设置只允许从本地主机和特定IP地址或IP地址段访问管理界面:
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\\.\\d+\\.\\d+\\.\\d+|::1|0:0:0:0:0:0:0:1|172\\.16\\.16\\.\\d{1,3} "/>
也可使用主机名:
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow=".*\\.admins\\.domain\\.com&#