Tomcat安全基线检查须聚焦本体:降权运行(非root)、禁用/收敛管理后台、隐藏版本与调试信息、关闭目录遍历及自动部署;Apache仅作前置协同防护,不可替代Tomcat自身加固。

Apache 和 Tomcat 是两类不同定位的服务器:Apache 是通用 Web 服务器(常处理静态资源、反向代理),Tomcat 是 Java Servlet 容器(专注运行 JSP/Servlet)。实际生产中,两者常组合部署(如 Apache + mod_jk 或 mod_proxy_ajp 转发请求给 Tomcat),但安全基线检查必须明确责任边界——Apache 的配置不代替 Tomcat 的加固,Tomcat 自身才是 Java 应用运行和漏洞暴露的核心载体。排查潜在漏洞,关键在于聚焦 Tomcat 本体的安全基线,同时理清 Apache 作为前置网关时的协同防护点。
聚焦 Tomcat 本体的高危基线项
这些是直接导致远程接管、信息泄露或提权的核心风险点,必须优先验证:
-
运行权限是否降权:执行
ps -ef | grep tomcat,确认启动用户不是 root。若为 root,需新建专用低权限用户(如tomcat),并用chown -R tomcat:tomcat /opt/tomcat修改目录归属。 -
管理后台是否禁用或收敛:检查
webapps/manager和webapps/host-manager是否已删除;若必须保留,须在conf/tomcat-users.xml中仅配置强密码账号,并在conf/Catalina/localhost/manager.xml中添加<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.10.0/24"/>限制访问 IP。 -
版本与调试信息是否隐藏:查看 HTTP 响应头是否有
Server: Apache-Coyote/1.1;访问任意不存在路径(如/abc)是否显示Apache Tomcat/x.x.xx。需修改conf/server.xml中 Connector 的server属性为空,并在conf/web.xml中配置全局错误页,屏蔽堆栈轨迹。 -
目录遍历与自动部署是否关闭:确认
conf/web.xml中<param-name>listings</param-name><param-value>false</param-value>;检查conf/server.xml的 Host 标签是否设置autoDeploy="false"和deployOnStartup="false"。
Apache 作为前端时的协同防护点
当 Apache 代理 Tomcat 流量时,它可承担部分外围防御职责,但不能掩盖 Tomcat 本身的脆弱性:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
禁止直接暴露 Tomcat 端口:确保 Tomcat 的 HTTP Connector(如 8080)仅监听
127.0.0.1,不对外网开放;所有外部请求必须经 Apache 的 80/443 端口转发。 -
利用 Apache 过滤敏感路径:在 Apache 配置中添加
<Location "/manager"> Require all denied </Location>,双重拦截对 Tomcat 管理路径的访问,即使 Tomcat 侧配置失误也能兜底。 -
统一启用 HTTPS 强制跳转:在 Apache 的虚拟主机中配置
Redirect permanent / https://yourdomain.com/,并确保 Tomcat 的webapps/manager/WEB-INF/web.xml中已启用<transport-guarantee>CONFIDENTIAL</transport-guarantee>,防止凭据明文传输。
快速验证常见漏洞的检查动作
不依赖扫描工具,用几条命令即可发现典型问题:
- 查弱口令:用
curl -I http://target/manager/html,若返回 200 或 401 且无 IP 限制,说明管理后台暴露,再尝试默认账号tomcat:tomcat或admin:admin。 - 查目录遍历:访问
http://target/..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd(若使用 AJP 且未升级,可能触发 CVE-2020-1938)。 - 查示例文件残留:直接访问
http://target/examples/servlets/或http://target/docs/,存在即违规,应彻底删除webapps/examples、webapps/docs、webapps/ROOT外的全部默认应用。 - 查日志是否启用:检查
conf/server.xml是否有未注释的AccessLogValve,缺失则无法溯源攻击行为。
基线检查后的闭环动作
发现问题是起点,闭环才能真正降低风险:
- 所有配置变更后,必须重启 Tomcat 生效,并用
netstat -tuln | grep :8080确认监听地址是否符合预期(如127.0.0.1:8080)。 - 删除
conf/tomcat-users.xml中所有注释掉的默认账号(如<!-- <user username="tomcat" ... -->),避免被误启用。 - 定期比对官方发布的 CVE 列表(如 Tomcat 9 安全公告),确认当前版本无未修复的高危漏洞(如 CVE-2020-9484 反序列化、CVE-2020-13935 内存泄漏)。
- 将上述检查项写成 Shell 脚本,纳入上线前自动化检查流程,避免人工遗漏。

















