一、用户与权限管理
useradd -r -d /opt/tomcat -s /bin/false tomcat创建无登录权限的专用Tomcat用户,避免以root身份运行服务;通过chown -R tomcat:tomcat /opt/tomcat设置目录归属,chmod -R 750 /opt/tomcat限制权限(仅所有者可读写执行,组用户可读执行,其他用户无权限)。tomcat-users.xml,删除与运维无关的用户(如示例中的tomcat1),仅保留必要角色(如admin);设置强密码(长度≥8位,包含数字、大小写字母、特殊符号,如Tomcat@2025)。二、访问控制与身份认证
WEB-INF/web.xml中配置安全约束,限制敏感路径(如/admin/*)的访问;使用BASIC(基础认证,需配合HTTPS加密)或DIGEST(摘要认证,更安全)方式,指定授权角色(如admin)。manager应用上下文(META-INF/context.xml),通过RemoteAddrValve仅允许可信IP(如192.168.1.0/24、::1)访问;或重命名manager目录(如new_manager),增加攻击者探测难度。JNDIRealm(修改context.xml),连接LDAP(如ldap://ldap.example.com:389)或Active Directory,实现统一身份认证。三、SSL/TLS加密配置
keytool生成自签名证书(测试环境)或申请CA证书(生产环境),命令示例:keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/tomcat/conf/keystore.jks -validity 3650(设置有效期10年)。server.xml,添加Connector节点(端口8443),启用SSL并指定密钥库路径与密码:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/opt/tomcat/conf/keystore.jks" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS"/>
生产环境建议开启clientAuth="true"(双向认证),提升安全性。四、服务与端口优化
server.xml中的Host节点,设置autoDeploy="false"、unpackWARs="false",防止恶意WAR文件自动解压部署。server.xml中的8080端口Connector;若使用Nginx反向代理,注销AJP连接器(默认8009端口),减少攻击面。firewalld(推荐)或iptables限制Tomcat端口(8080、8443)的访问,仅允许特定IP(如运维服务器IP)访问,命令示例:firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="8443" accept' --permanent
firewall-cmd --reload
```。
五、安全加固细节
server.xml中的Connector节点,添加server="CustomServer/1.0"(自定义服务器标识);或修改conf/server.properties中的server.info属性,防止攻击者通过版本信息探测漏洞。web.xml中全局配置<directory-listing>["否", "disable directory listing", "Tomcat disable directory listing configuration"]</directory-listing>,或在应用web.xml中设置<servlet><servlet-name>default</servlet-name><init-param><param-name>listings</param-name><param-value>false</param-value></init-param></servlet>,防止敏感文件泄露。context.xml,添加useHttpOnly="true"(防止XSS窃取Cookie)、secure="true"(仅通过HTTPS传输Cookie),提升会话安全性。六、日志与监控
server.xml的Host节点中添加AccessLogValve,记录访问源IP、请求方法、URL、响应状态等信息,配置示例:<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
定期审查日志(如使用grep、awk),监控异常访问(如频繁的404请求、大量POST请求)。七、系统级安全措施
firewalld设置默认拒绝策略(firewall-cmd --set-default-zone=drop),仅开放必要的端口(22:SSH、8080:HTTP、8443:HTTPS);启用fail2ban防止暴力破解(如SSH、Tomcat管理界面)。