一、用户与权限管理
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管理界面)。