1.删除默认目录

安装完tomcat后,删除$CATALINA_HOME/webapps下默认的所有目录文件

rm -rf /usr/local/tomcat/webapps/*

2.用户管理

如果不需要通过web部署应用,建议注释或删除tomcat-users.xml下用户权限相关配置

3.隐藏tomcat版本信息

方法一:修改$CATALINA_HOME/conf/server.xml,在Connector节点添加server字段,示例如下

    

访问测试:

# curl -I 127.0.0.1:8080
HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 29 Mar 2018 03:16:36 GMT
Server: WS1.0

浏览器测试:

 http://ip:8080/hello
测试结果显示并没隐藏Tomcat版本信息。

方法二:进入apache-tomcat目录lib下,找到catalina.jar,使用vim工具依次找到org/apache/catalina/util下的ServerInfo.properties

server.info=Apache Tomcat
server.number=
server.built=

用户也可自定义修改server.info字段和server.number字段,示例修改如下所示

server.info=WS/1.0
server.number=1.0
server.built=Feb 7 2018 18:52:33 UTC

浏览器测试:

 http://ip:8080/hello
测试结果显示已隐藏Tomcat版本信息。
这里建议设置web.xml的error-page,指定返回页面。

4.关闭自动部署

如果不需要自动部署,建议关闭自动部署功能。

在$CATALINA_HOME/conf/server.xml中的host字段,修改unpackWARs=”false” autoDeploy=”false”。

      
       

5.自定义错误页面

修改$CATALINA_HOME/conf/web.xml,在/usr/local/tomcat/webapps/ROOT下自定义40x、50x等容错页面,防止信息泄露。

  
       404
       /404.html
   

   
        500
        /500.html
   

6.禁止列目录(高版本默认已禁止)

修改$CATALINA_HOME/conf/web.xml

    
        default
        org.apache.catalina.servlets.DefaultServlet
        
            debug
            0
        
        
            listings
            false
        
        1
    

7.AJP端口管理

AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。前端如果是由nginx做的反向代理的话可以不使用此连接器,因此需要注销掉该连接器。

    
    

8.服务权限控制

tomcat以非root权限启动,应用部署目录权限和tomcat服务启动用户分离,比如tomcat以tomcat用户启动,而部署应用的目录设置为nobody用户750。

9.启用cookie的HttpOnly属性,使用HttpOnly提升Cookie安全性


修改$CATALINA_HOME/conf/context.xml,添加useHttpOnly="true",如下所示



    
    WEB-INF/web.xml

    
    

    
    


启用安全cookie,防止xss跨站点***,tomcat6开始支持此属性,此处在context.xml中添加启用配置,context.xml配置即调用时生效不需要重启tomcat

配置cookie的secure属性,在web.xml中sesion-config节点配置cookie-config,此配置只允许cookie在加密方式下传输。

    
        30
        
                true