Linux下Tomcat安全配置方法
小樊
42
2026-01-03 11:17:58
Linux下Tomcat安全配置清单
一 基础运行环境与权限
- 使用JDK 11/17(LTS),创建专用系统用户(如tomcat_user:tomcat_group),Tomcat目录(如**/srv/tomcat**)属主属组设为该用户,禁止以root直接运行。示例:
- 创建用户与目录:
sudo useradd -m -U tomcat_user && sudo mkdir -p /srv/tomcat && sudo chown -R tomcat_user:tomcat_group /srv/tomcat
- 以systemd托管,设置最小权限与重启策略(示例要点):
User=tomcat_user、Group=tomcat_group、UMask=0007、Restart=always
Environment=JAVA_HOME=...、CATALINA_HOME=...、CATALINA_BASE=...
- 文件权限收敛:目录750、文件640,关键目录(如conf、bin)可设为700;部署目录与应用包分离,避免热更新引入风险。
- 版本选择与下载:优先Tomcat 9.0/10.1(LTS),从Apache官网获取发行包并使用sha512sum校验完整性,避免第三方篡改版本。
二 最小化攻击面
- 删除或禁用示例与默认应用:清空**$CATALINA_HOME/webapps下默认应用(如ROOT、docs、examples、manager、host-manager**),仅保留业务应用。
- 关闭自动部署与解包:在server.xml的Host中设置
unpackWARs="false" autoDeploy="false",上线由CI/CD或受控流程完成。
- 隐藏版本信息:在conf/server.xml的Connector添加
server="Apache",或编辑lib/catalina.jar中org/apache/catalina/util/ServerInfo.properties自定义server.info、server.number。
- 禁止目录浏览:在conf/web.xml的DefaultServlet设置
<init-param><param-name>listings</param-value>false</param-value></init-param>(多数高版本默认已禁用)。
- 管理接口最小化暴露:如无脚本化管理需求,仅保留必要角色(如manager-status);如需远程访问,在webapps/manager/META-INF/context.xml与host-manager/META-INF/context.xml中使用RemoteAddrValve限制来源IP(示例:
allow="127.0.0.1,192.168.1.100")。
三 访问控制与认证授权
- 管理口访问控制:在tomcat-users.xml仅分配所需角色(如manager-gui、manager-script、admin-gui、admin-script、manager-status),并为账户设置强密码;不同人员使用不同账号,遵循最小权限原则。
- 应用层基于角色的访问控制(RBAC):在应用的WEB-INF/web.xml配置security-constraint、auth-constraint与login-config(支持BASIC/FORM),角色名需与tomcat-users.xml一致,实现URL级授权。
- 网络层访问控制:
- 反向代理/Nginx前置时,可仅开放AJP或本地HTTP端口给代理,或直接在server.xml将Connector绑定到127.0.0.1,并配合防火墙仅允许代理IP访问管理端口与应用端口。
- 使用RemoteAddrValve/RemoteHostValve在Host/Context层限制来源IP/域名,形成纵深防御。
四 加密传输与端口管理
- 启用HTTPS/TLS:在server.xml配置8443端口与SSLHostConfig,证书建议用Let’s Encrypt获取并转换为PKCS12后引用:
- 转换示例:
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out /srv/tomcat/conf/keystore.p12 -name tomcat -CAfile chain.pem -caname root -password pass:YourPass
- Connector示例:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/keystore.p12" type="RSA" certificateKeystorePassword="YourPass"/></SSLHostConfig></Connector>
- 禁用不安全协议与算法:仅启用TLSv1.2+,禁用SSLv3/TLSv1.0/TLSv1.1与弱哈希/弱加密套件(在Connector或JDK策略中配置)。
- 端口与监听地址:如无需外网直连管理口,将HTTP Connector绑定127.0.0.1;对外仅暴露443(由Nginx/负载均衡终止TLS),减少暴露面。
五 日志审计与运行维护
- 启用访问日志:在server.xml的Host中配置AccessLogValve,记录客户端IP、请求方法、URL、状态码、字节数、耗时等,便于审计与溯源(示例:
prefix="localhost_access_log." suffix=".txt" pattern="common" directory="logs")。
- JVM与性能基线:通过JAVA_OPTS设置堆与GC策略(如
-Xms512m -Xmx1536m -XX:+UseG1GC),结合实例规格与业务峰值调优,避免DoS与频繁GC抖动。
- 安全变更与重启流程:变更前备份server.xml、web.xml、context.xml与证书;使用systemctl执行停止/启动/状态校验,变更后在浏览器与
curl验证管理口与业务口可达性与功能正确性。