/conf/tomcat-users.xml,删除与运维无关的账号(如tomcat1),仅保留必要角色(如admin、manager)。例如:<user username="tomcat" password="Tomcat@1234" roles="admin"/>
Manager@1234),避免使用弱密码(如123456、tomcat)。tomcat),并赋予其对Tomcat目录的读写权限:sudo useradd -r -m -d /opt/tomcat -s /bin/false tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
sudo -u tomcat /opt/tomcat/bin/startup.sh
确保Tomcat进程不以root身份运行,降低权限滥用风险。RemoteAddrValve限制管理界面(如manager、host-manager)仅允许特定IP访问。修改/webapps/manager/META-INF/context.xml:<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+|127\.0\.0\.1"/>
</Context>
/webapps/应用名/WEB-INF/web.xml中定义安全约束,限制敏感路径(如/admin/*)仅允许admin角色访问:<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Area</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
同时在tomcat-users.xml中为用户分配角色:<role rolename="admin"/>
<user username="admin" password="Admin@1234" roles="admin"/>
/conf/web.xml,将DefaultServlet的readonly参数设为true,禁止PUT、DELETE等方法:<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>
防止攻击者通过HTTP方法篡改或删除文件。/conf/server.xml中AccessLogValve的注释,记录访问源IP、时间、请求URL等信息:<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log."
suffix=".txt"
pattern="common"
resolveHosts="false"/>
日志文件将保存在/logs目录下,便于后续审计和溯源。/conf/server.xml中的Connector配置,设置connectionTimeout为30秒(30000毫秒),避免长时间闲置连接占用资源:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="30000"
redirectPort="8443"/>
maxThreads(最大并发线程数,如150)、minSpareThreads(最小空闲线程数,如25)、maxSpareThreads(最大空闲线程数,如75),避免线程过多导致系统崩溃:<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"/>
/conf/web.xml,将listings参数设为false,防止用户通过浏览器查看目录结构:<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<Connector port="8081" protocol="HTTP/1.1".../>
<Connector port="8444" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true".../>
/conf/server.xml中的shutdown指令,将默认的SHUTDOWN改为复杂字符串(如TomcatShutdown@2025),避免攻击者通过发送SHUTDOWN命令关闭服务:<Server port="8005" shutdown="TomcatShutdown@2025">
/conf/server.xml中的maxPostSize参数(单位:字节),限制POST请求的大小(如10MB),防止上传恶意大文件:<Connector port="8080" protocol="HTTP/1.1"
maxPostSize="10485760".../>
keytool生成自签名证书(或从CA获取证书),修改/conf/server.xml启用HTTPS连接器:keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/tomcat/conf/tomcat.keystore -validity 3650
配置示例:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="/opt/tomcat/conf/tomcat.keystore"
keystorePass="changeit"/>
强制管理界面使用HTTPS,加密传输数据,防止中间人攻击。/lib/catalina.jar中的ServerInfo.properties文件,将server.info和server.number参数修改为自定义值(如MyTomcat/1.0),然后重新打包catalina.jar:jar uf /opt/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
重启Tomcat后,通过curl -I http://ip:8080检查响应头,确认Server字段不再显示Tomcat版本信息,防止攻击者利用版本漏洞发起攻击。/webapps目录下的docs、examples、host-manager、manager、ROOT目录(若不需要),减少攻击面:rm -rf /opt/tomcat/webapps/docs /opt/tomcat/webapps/examples /opt/tomcat/webapps/host-manager /opt/tomcat/webapps/manager /opt/tomcat/webapps/ROOT
/conf/server.xml,注释掉AJP连接器(默认端口8009):<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->
避免AJP协议漏洞被利用。sudo chcon -R -t httpd_sys_content_t /opt/tomcat
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs
若需永久生效,编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=permissive(测试环境),再改回enforcing(生产环境)。firewalld或iptables限制外部访问Tomcat端口(如8081、8444):sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent
sudo firewall-cmd --zone=public --add-port=8444/tcp --permanent
sudo firewall-cmd --reload
仅允许信任的IP地址访问Tomcat端口,进一步提升安全性。