阅读量:23
Linux环境下Tomcat安全加固措施
1. 身份鉴别:强化用户认证与权限管理
- 删除多余账号:修改
/conf/tomcat-users.xml,删除与运维无关的账号(如tomcat1),仅保留必要角色(如admin、manager)。例如:<user username="tomcat" password="Tomcat@1234" roles="admin"/> - 设置口令复杂度:要求密码长度≥8位,包含数字、小写字母、大写字母、特殊符号中的至少3类(如
Manager@1234),避免使用弱密码(如123456、tomcat)。 - 非root用户启动:创建专用Tomcat用户(
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.shroot身份运行,降低权限滥用风险。
2. 访问控制:限制非法访问
- 基于IP的访问限制:通过
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"/> - 禁用危险HTTP方法:修改
/conf/web.xml,将DefaultServlet的readonly参数设为true,禁止PUT、DELETE等方法:防止攻击者通过HTTP方法篡改或删除文件。<init-param> <param-name>readonly</param-name> <param-value>true</param-value> </init-param>
3. 安全审计:记录操作日志
- 启用访问日志:取消
/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目录下,便于后续审计和溯源。
4. 资源控制:优化服务配置
- 设置连接超时:修改
/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> - 修改默认端口:将HTTP端口从8080改为非标准端口(如8081),HTTPS端口从8443改为非标准端口(如8444),降低被扫描工具发现的风险:
<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".../>
5. 入侵防范:抵御常见攻击
- 配置SSL/TLS加密:使用JDK自带的
keytool生成自签名证书(或从CA获取证书),修改/conf/server.xml启用HTTPS连接器:配置示例:keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/tomcat/conf/tomcat.keystore -validity 3650强制管理界面使用HTTPS,加密传输数据,防止中间人攻击。<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" keystoreFile="/opt/tomcat/conf/tomcat.keystore" keystorePass="changeit"/> - 隐藏版本信息:修改
/lib/catalina.jar中的ServerInfo.properties文件,将server.info和server.number参数修改为自定义值(如MyTomcat/1.0),然后重新打包catalina.jar:
重启Tomcat后,通过jar uf /opt/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.propertiescurl -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 - 关闭AJP端口:若不需要与Apache/Nginx集成,修改
/conf/server.xml,注释掉AJP连接器(默认端口8009):避免AJP协议漏洞被利用。<!---->
6. 操作系统层面加固
- 配置SELinux(若启用):若系统启用了SELinux,需设置正确的上下文,允许Tomcat访问其目录:
若需永久生效,编辑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):
仅允许信任的IP地址访问Tomcat端口,进一步提升安全性。sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent sudo firewall-cmd --zone=public --add-port=8444/tcp --permanent sudo firewall-cmd --reload