在Linux环境下,Tomcat的安全策略设置需围绕身份鉴别、访问控制、数据加密、入侵防范、安全审计五大核心维度展开,以下是具体操作步骤:
root用户运行Tomcat,降低权限滥用风险。使用以下命令创建系统用户(-r表示系统用户,-s /bin/false禁止登录):sudo useradd -r -d /opt/tomcat -s /bin/false tomcat
tomcat用户,限制其他用户访问:sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R 750 /opt/tomcat # 目录权限:所有者可读写执行,组用户可读执行,其他用户无权限
/opt/tomcat/conf/tomcat-users.xml,删除无关账号(如默认的tomcat用户),添加必要的角色与用户。例如,添加管理员角色(admin-gui、manager-gui)和对应用户:<tomcat-users>
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="StrongPassword123!" roles="admin-gui,manager-gui"/>
</tomcat-users>
注:密码需符合复杂度要求(至少8位,包含大小写字母、数字、特殊符号)。
server.xml,关闭autoDeploy和unpackWARs,防止恶意WAR文件自动部署:<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
webapps/manager/META-INF/context.xml,通过RemoteAddrValve仅允许特定IP(如公司内网)访问管理界面:<Context>
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.1\.\d+|127\.0\.0\.1"/>
</Context>
web.xml(全局或应用级),设置listings="false",防止目录结构泄露:<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
注:全局
web.xml位于conf目录,应用级web.xml位于webapps/your_app/WEB-INF/。
sudo mkdir -p /etc/pki/tls/certs
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/pki/tls/private/tomcat.key \
-x509 -days 365 -out /etc/pki/tls/certs/tomcat.crt
server.xml,添加Connector节点(端口建议用8443):<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="/etc/pki/tls/certs/tomcat.crt"
keystorePass="YourCertPassword"
clientAuth="false" sslProtocol="TLS"/>
注:若使用密钥库(JKS格式),需将证书导入密钥库并修改
keystoreFile路径。
webapps目录下的默认应用(如docs、examples、ROOT),减少攻击面:rm -rf /opt/tomcat/webapps/docs /opt/tomcat/webapps/examples /opt/tomcat/webapps/ROOT
firewalld(CentOS)或iptables限制仅允许必要端口(如8080、8443、8005):sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp # HTTP
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp # HTTPS
sudo firewall-cmd --permanent --zone=public --add-port=8005/tcp # Shutdown
sudo firewall-cmd --reload
server.xml中的AJP Connector:<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->
注:AJP协议可能存在漏洞,禁用后可降低风险。
server.xml中的Host标签,添加AccessLogValve记录访问日志(包含IP、时间、请求方法、响应状态等):<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false">
<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"/>
</Host>
grep、awk等工具分析日志,监控异常行为(如频繁的404错误、非法IP访问):grep "404" /opt/tomcat/logs/localhost_access_log.*.txt
grep "admin" /opt/tomcat/logs/localhost_access_log.*.txt # 监控管理界面访问
logging.properties(conf目录),调整日志级别为FINE或FINER,记录更多细节:org.apache.catalina.level = FINE
com.example.app.level = FINER
catalina.policy(conf目录),定义细粒度的权限控制(如限制文件读写、网络访问):grant {
// 允许读取系统属性
permission java.util.PropertyPermission "user.dir", "read";
permission java.util.PropertyPermission "java.home", "read";
// 允许连接特定端口
permission java.net.SocketPermission "localhost:8080", "connect";
// 禁止退出JVM
permission java.lang.RuntimePermission "exitVM", "deny";
};
catalina.sh),添加-security参数:./catalina.sh start -security
注:SecurityManager会限制应用的系统权限,需测试应用兼容性后再上线。
通过以上步骤,可全面强化Linux环境下Tomcat的安全性,有效防范未授权访问、数据泄露、恶意攻击等风险。需根据实际业务需求调整配置(如开放特定端口、添加自定义角色),并定期更新Tomcat至最新版本以修复安全漏洞。