温馨提示×

Linux环境下Tomcat的安全加固措施

小樊
39
2025-11-11 07:40:47
栏目: 智能运维

Linux环境下Tomcat安全加固措施

1. 身份鉴别:强化用户认证与权限管理

  • 删除多余账号:修改/conf/tomcat-users.xml,删除与运维无关的账号(如tomcat1),仅保留必要角色(如adminmanager)。例如:
    <user username="tomcat" password="Tomcat@1234" roles="admin"/>
    
  • 设置口令复杂度:要求密码长度≥8位,包含数字、小写字母、大写字母、特殊符号中的至少3类(如Manager@1234),避免使用弱密码(如123456tomcat)。
  • 非root用户启动:创建专用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.sh
    
    确保Tomcat进程不以root身份运行,降低权限滥用风险。

2. 访问控制:限制非法访问

  • 基于IP的访问限制:通过RemoteAddrValve限制管理界面(如managerhost-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,将DefaultServletreadonly参数设为true,禁止PUTDELETE等方法:
    <init-param>
        <param-name>readonly</param-name>
        <param-value>true</param-value>
    </init-param>
    
    防止攻击者通过HTTP方法篡改或删除文件。

3. 安全审计:记录操作日志

  • 启用访问日志:取消/conf/server.xmlAccessLogValve的注释,记录访问源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
    
    配置示例:
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               SSLEnabled="true"
               scheme="https"
               secure="true"
               keystoreFile="/opt/tomcat/conf/tomcat.keystore"
               keystorePass="changeit"/>
    
    强制管理界面使用HTTPS,加密传输数据,防止中间人攻击。
  • 隐藏版本信息:修改/lib/catalina.jar中的ServerInfo.properties文件,将server.infoserver.number参数修改为自定义值(如MyTomcat/1.0),然后重新打包catalina.jar
    jar uf /opt/tomcat/lib/catalina.jar org/apache/catalina/util/ServerInfo.properties
    
    重启Tomcat后,通过curl -I http://ip:8080检查响应头,确认Server字段不再显示Tomcat版本信息,防止攻击者利用版本漏洞发起攻击。
  • 禁用不必要的组件:删除/webapps目录下的docsexampleshost-managermanagerROOT目录(若不需要),减少攻击面:
    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):
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->
    
    避免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(生产环境)。
  • 配置防火墙:使用firewalldiptables限制外部访问Tomcat端口(如8081、8444):
    sudo firewall-cmd --zone=public --add-port=8081/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=8444/tcp --permanent
    sudo firewall-cmd --reload
    
    仅允许信任的IP地址访问Tomcat端口,进一步提升安全性。

0