CentOS上Tomcat安全设置指南
避免以root用户运行Tomcat,降低系统权限滥用风险。
sudo useradd -r -s /sbin/nologin tomcat
(-r
表示系统用户,-s
禁止登录shell)。/opt/tomcat
)及其子目录的所有者和组改为tomcat
,并赋予适当权限(755
允许所有者读写执行,其他用户读执行):sudo chown -R tomcat:tomcat /opt/tomcat && sudo chmod -R 755 /opt/tomcat
。/etc/systemd/system/tomcat.service
的[Service]
部分,添加User=tomcat
、Group=tomcat
,并设置UMask=0007
(限制新文件权限为770
)。严格限制对Tomcat关键目录的访问,防止未授权修改。
conf
):sudo chmod -R 750 /opt/tomcat/conf
(仅所有者可写)。webapps
):sudo chmod -R 755 /opt/tomcat/webapps
(允许其他用户读取,但不可写入)。logs
):sudo chmod -R 750 /opt/tomcat/logs
(仅所有者可写)。temp
、work
):sudo chmod -R 750 /opt/tomcat/temp /opt/tomcat/work
。sudo chcon -R -t httpd_sys_content_t /opt/tomcat
(允许httpd访问内容)、sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs
(允许httpd读写日志)。sudo semanage fcontext -a -t httpd_sys_content_t "/opt/tomcat(/.*)?" && sudo restorecon -Rv /opt/tomcat
。限制外部对Tomcat端口的访问,减少攻击面。
/opt/tomcat/conf/server.xml
,将HTTP端口从8080
改为非标准端口(如8081
),HTTPS端口从8443
改为8444
(避免扫描工具轻易识别)。server.xml
的<Connector>
标签中添加address="127.0.0.1"
,强制Tomcat仅监听本地请求(如HTTP端口配置为<Connector port="8081" protocol="HTTP/1.1" address="127.0.0.1" .../>
),外部网络无法直接访问。sudo firewall-cmd --permanent --zone=public --add-service=http && sudo firewall-cmd --permanent --zone=public --add-service=https && sudo firewall-cmd --reload
。8081
):sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="8081" accept' && sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port protocol="tcp" port="8081" reject' && sudo firewall-cmd --reload
。强化管理界面访问控制,防止未授权访问。
webapps/manager
、webapps/host-manager
重命名为webapps/mymanager
、webapps/myhostmanager
(避免扫描工具直接定位)。webapps/manager/META-INF/context.xml
、webapps/host-manager/META-INF/context.xml
,添加RemoteAddrValve
阀门,仅允许本地或指定IP访问:<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|192\.168\.1\.\100" />
(替换为实际允许的IP)。conf/tomcat-users.xml
,添加用户并分配最小必要角色(如仅允许管理员访问管理界面):<tomcat-users>
<role rolename="admin-gui"/> <!-- 管理界面访问权限 -->
<role rolename="manager-gui"/> <!-- 应用管理权限 -->
<user username="admin" password="StrongPassword123!" roles="admin-gui,manager-gui"/>
</tomcat-users>
```。
启用HTTPS,保护数据传输安全。
sudo mkdir -p /etc/tomcat/ssl
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/tomcat/ssl/tomcat.key -x509 -days 365 -out /etc/tomcat/ssl/tomcat.crt
server.xml
,取消注释或添加以下<Connector>
配置(替换证书路径和密码):<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="/etc/tomcat/ssl/tomcat.p12"
type="PKCS12" certificateKeystorePassword="YourKeystorePassword"/>
</SSLHostConfig>
</Connector>
web.xml
中添加安全约束,要求敏感路径(如/admin/*
)使用HTTPS:<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Admin Area</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee> <!-- 强制HTTPS -->
</user-data-constraint>
</security-constraint>
```。
减少攻击面,避免不必要的风险。
server.xml
,找到<Host>
标签,设置autoDeploy="false"
、unpackWARs="false"
(防止恶意WAR文件自动解压部署):<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
webapps
目录下的默认应用(docs
、examples
、ROOT
、host-manager
、manager
),避免暴露敏感信息:sudo rm -rf /opt/tomcat/webapps/{docs,examples,ROOT,host-manager,manager}
。server.xml
中的AJP连接器(默认端口8009
),避免通过AJP协议攻击。及时发现异常行为,便于溯源。
server.xml
,在<Host>
标签内添加AccessLogValve
,记录访问时间、IP、请求路径等信息:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
tail -f /opt/tomcat/logs/catalina.out
实时监控日志,或通过logrotate
工具定期归档日志(如每天归档,保留30天)。fail2ban
监控Tomcat日志,自动封禁频繁访问的恶意IP。修复已知漏洞,保持系统安全。
yum
(CentOS默认仓库)或Tomcat官网下载最新稳定版本,升级前备份配置文件和应用程序。sudo yum update java-11-openjdk
),避免Java漏洞影响Tomcat安全。tomcat-user@jakarta.apache.org
)或CVE数据库(如NVD),及时获取安全补丁信息。