1. 创建专用Tomcat用户并配置目录权限
避免使用root用户运行Tomcat,创建专用用户(如tomcat)并设置其主目录、shell类型(无登录权限)及所属组。将Tomcat安装目录(如/opt/tomcat)及其子目录的所有权赋予该用户及组,确保进程仅能访问必要文件;设置目录权限为755(所有者可读写执行,组和其他用户仅可读执行),脚本文件(如bin/*.sh)赋予执行权限。例如:
sudo groupadd tomcat
sudo useradd -r -m -d /opt/tomcat -s /sbin/nologin -g tomcat tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 755 /opt/tomcat
sudo chmod +x /opt/tomcat/bin/*.sh
此措施可防止未授权用户通过文件系统权限提升访问敏感文件。
2. 配置Tomcat服务以专用用户身份运行
通过Systemd服务文件明确指定Tomcat运行用户及组,确保服务启动时使用非root权限。编辑/etc/systemd/system/tomcat.service文件,在[Service]部分添加:
User=tomcat
Group=tomcat
UMask=0007 # 限制新创建文件权限为770(所有者及组可读写,其他用户无权限)
RestartSec=10
Restart=always
重新加载Systemd配置并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
此配置可隔离Tomcat进程与系统root权限,降低提权攻击风险。
3. 严格管理Tomcat用户角色与权限
编辑conf/tomcat-users.xml文件,仅创建必要的用户角色(如manager-gui用于管理界面访问、admin-gui用于后台管理),并为每个用户分配最小所需权限。例如:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="StrongPassword123!" roles="manager-gui,admin-gui"/>
</tomcat-users>
删除默认的空用户或测试账户,避免未授权访问。此外,可通过RemoteAddrValve限制管理界面访问IP(如仅允许内网IP):
<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+" />
</Context>
此措施可防止未经授权的用户访问管理功能。
4. 隐藏Tomcat版本信息与禁用默认应用
修改conf/server.xml中的Connector节点,添加server属性隐藏Tomcat版本:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
server="CustomServer/1.0" />
删除webapps目录下的默认应用(如docs、examples、manager、host-manager、ROOT),避免暴露敏感信息或提供不必要的功能。若需保留manager/host-manager,需严格限制访问IP。
5. 配置操作系统级安全措施
firewalld或iptables仅允许必要端口(如HTTP 8080、HTTPS 8443)的入站流量,拒绝其他端口。例如:sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
sudo firewall-cmd --reload
sudo chcon -R -t httpd_sys_content_t /opt/tomcat
sudo chcon -R -t httpd_sys_rw_content_t /opt/tomcat/logs
sudo setsebool -P tomcat_execmem 1 # 允许Tomcat执行内存操作(如需要)
这些措施可限制网络访问并强化系统权限控制。
6. 启用安全功能与监控
keytool)并在server.xml中添加HTTPS连接器,强制加密传输:<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/path/to/keystore.jks" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
server.xml中设置autoDeploy="false"和unpackWARs="false",防止恶意WAR文件自动部署:<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
conf/server.xml中配置AccessLogValve),记录访问源IP、时间、请求URL等信息;定期审查日志并设置入侵检测系统(IDS),及时发现异常行为。