useradd
命令创建无sudo权限的专用Tomcat用户(如tomcat
),并设置密码。将Tomcat安装目录(如/opt/tomcat
)的所有权归属该用户及组,确保最小权限原则:sudo useradd -r -d /opt/tomcat -s /bin/false tomcat sudo passwd tomcat sudo chown -R tomcat:tomcat /opt/tomcat
/etc/systemd/system/tomcat.service
),在[Service]
部分指定用户和组:[Service] User=tomcat Group=tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=on-failure
重载Systemd配置并重启Tomcat:sudo systemctl daemon-reload sudo systemctl restart tomcat
tomcat-users.xml
配置强密码(包含大小写字母、数字、特殊符号,长度≥8位)的角色和用户,仅授予必要权限(如manager-gui
仅允许管理界面访问):<tomcat-users> <role rolename="manager-gui"/> <user username="admin" password="ComplexPass123!" roles="manager-gui"/> </tomcat-users>
进一步通过RemoteAddrValve
限制访问IP(如仅允许本地或特定网段):<Context path="/manager" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^192\.168\.1\.\d+$"/> </Context>
server.xml
中关闭autoDeploy
和unpackWARs
,防止恶意WAR文件自动部署:<Context path="" docBase="${catalina.home}/webapps" unpackWARs="false" autoDeploy="false"/>
server.xml
,将HTTP端口(默认8080)改为非标准端口(如8090),减少扫描攻击:<Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
server.xml
中添加HTTPS连接器(端口8443):sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/tomcat.key -x509 -days 365 -out /etc/pki/tls/certs/tomcat.crt
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/etc/pki/tls/certs/tomcat.crt" keystorePass="your_keystore_password"/>
添加HTTP到HTTPS的重定向(在server.xml
的<Engine>
标签内):<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
webapps
目录下的docs
、examples
、ROOT
、host-manager
等默认应用,避免暴露敏感信息:sudo rm -rf /opt/tomcat/webapps/*
server.xml
中的server
属性,掩盖Tomcat版本:<Connector port="8090" protocol="HTTP/1.1" server="CustomServer/1.0"/>
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"/>
logrotate
工具定期归档和分析日志(如catalina.out
、localhost_access_log.*.txt
),监控异常访问(如频繁的404错误、可疑IP)。firewalld
或iptables
限制Tomcat端口的访问,仅允许必要IP(如运维服务器IP)访问管理端口(8443)和HTTP端口(8090):sudo firewall-cmd --zone=public --add-port=8090/tcp --permanent sudo firewall-cmd --zone=public --add-port=8443/tcp --permanent sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="8443" protocol="tcp" accept' --permanent sudo firewall-cmd --reload
permissive
模式(需重启),或配置正确的SELinux上下文(如httpd_sys_content_t
)允许Tomcat访问资源:sudo setenforce 0 # 临时禁用 sudo chcon -R -t httpd_sys_content_t /opt/tomcat # 设置上下文
通过以上措施,可全面覆盖Linux环境下Tomcat的安全管理需求,降低被攻击的风险。需根据实际业务场景调整配置(如调整防火墙规则、扩展角色权限),并定期进行安全评估。