Tomcat安全加固配置手册

第1章   概述

1.1   目标

现有的Web服务体系架构缺少有效的安全性支持,所以需要一个安全框架模型来解决Web服务中的各种安全问题。Web服务器是应用的载体,如果这个载体出现安全问题,那么运行在其中的Web应用程序的安全就得不到保障了。本文主要描述Apache Tomcat的安全加固和配置工作,最终用以指导系统实施。

1.2   预期读者

本文档用于指导系统工程师进行系统实施工作,架构师和系统工程师应该通读本文档,选择适当方式用于自己的系统。

第2章    产品介绍

Tomcat是一个HTTP服务器,是Sun透过Java Community Process开发的、对广泛使用的Servlet和JavaServer Page(JSP)技术的正式参考实作。Servlet和JSP技术用于建构HTTP服务器应用程序。虽然Servlet技术中加入了许多特性(包括存取安全性、Session管理和执行绪控制)。JSP技术提供了一种处理动态生成的 HTML 页面的简便方法,这些 HTML 页面被直接编译成 Servlet 以用于快速执行时作业。Tomcat除了上述的两种技术保障安全之外,还可以通过配置Tomcat的参数以增加安全性。

第3章   Tomcat的安全加固配置

3.1  Tomcat版本统一

查看目前系统部署的Tomcat是否为统一的版本,切换到$CATALINA_HOME\bin目录下:

Linux

[root@srv-dfh526tomcat6-spaceservice]# cd bin/

[root@srv-dfh526bin]# ./version.sh

UsingCATALINA_BASE:  /soft/tomcat6-spaceservice

UsingCATALINA_HOME:  /soft/tomcat6-spaceservice

UsingCATALINA_TMPDIR: /soft/tomcat6-spaceservice/temp

UsingJRE_HOME:        /usr/local/jdk6

UsingCLASSPATH:      /soft/tomcat6-spaceservice/bin/bootstrap.jar

Serverversion: Apache Tomcat/6.0.33

Serverbuilt:   Aug 16 2011 02:16:34

Servernumber:  6.0.33.0

OSName:        Linux

OSVersion:     2.6.32-279.el6.x86_64

Architecture:   amd64

JVMVersion:    1.6.0_32-b05

JVMVendor:     Sun Microsystems Inc.

Windows

D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30\bin>version.bat

UsingCATALINA_BASE:  "D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30"

UsingCATALINA_HOME:  "D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30"

UsingCATALINA_TMPDIR: "D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30\temp"

 

UsingJRE_HOME:       "D:\Java\jdk1.8.0"

UsingCLASSPATH:      "D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30\bin\b

ootstrap.jar"

Serverversion: Apache Tomcat/6.0.30

Serverbuilt:   January 10 2011 1752

Servernumber:  6.0.30.0

OSName:        Windows 7

OSVersion:     6.1

Architecture:   amd64

JVMVersion:    1.8.0-ea-b121

JVMVendor:     Oracle Corporation

D:\tools\apache-tomcat-6.0.30\apache-tomcat-6.0.30\bin>

3.2   Tomcat帐号安全

将$CATALINA_HOME\conf\tomcat-users.xml中文件的所有用户都注释掉,配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<? xmlversion = '1.0'  encoding = 'utf-8' ?>
< tomcat-users >
<!—
   < rolerolename = "tomcat" /> 
   < rolerolename = "role1" /> 
   < rolerolename = "manager" /> 
   < rolerolename = "admin" /> 
   < user  username = "tomcat" password = "tomcat"  roles = "tomcat" /> 
   < userusername = "both"  password = "tomcat" roles = "tomcat,role1" /> 
   < userusername = "role1"  password = "tomcat" roles = "role1" /> 
   < userusername = "admin"  password = "admin" roles = "manager" /> 
-->
</ tomcat-users >


如果业务需要内置的Tomcat用户,则需要给其分配合理的权限,密码设置符合密码策略,Tomcat角色类型如下:

 role1:具有读权限;

 tomcat:具有读和运行权限;

 admin:具有读、运行和写权限;

 manager:具有远程管理权限。

如果使用启用了Tomcat用户,则需要设置Tomcat定时登出,将$CATALINA_HOME\conf\server.xml配置如下:

1
2
3
4
5
6
7
8
9
10
11
< Connectorport = "8080"
        protocol = "HTTP/1.1"
        maxHttpHeaderSize = "8192" 
        maxThreads = "150"
        minSpareThreads = "25" 
        maxSpareThreads = "75"
        enableLookups = "false" 
        redirectPort = "8443" 
        acceptCount = "100"
        connectionTimeout = "30000"
        disableUploadTimeout = "true" />


 

加固检查:

输入帐号和密码都无法登录

spacer.gif

 

3.3   除webapps应用

除了需要部署上去的应用,其余位于$CATALINA_HOME\webapps文件夹中的应用如docs、examples、host-manager、manager和ROOT。

注:若无业务必要,请执行删除上述的应用包。

加固检查:

输入:http://localhost:8080/manager/html

出现的页面空白

spacer.gif

 

3.4   禁止Tomcat目录列表

确保$CATALINA_HOME\conf\web.xml中listings的值为false:

1
2
3
4
< init-param >
     < param-name >listings</ param-name >
     < param-value >false</ param-value >
</ init-param >


 

 

3.5   设置Cookie的HttpOnly属性

因为目前框架中没有为Cookie添加HttpOnly属性,所以可以在Tomcat中设置。

第一步,在$CATALINA_HOME\conf\context.xml文件中添加useHttpOnly="true"配置如下:

1
2
3
< Context   useHttpOnly = "true" >
        < WatchedResource >WEB-INF/web.xml</ WatchedResource >
</ Context >


     第二步,在项目应用的web.xml中配置上:

1
2
3
4
5
6
< session-config >
      < cookie-config >
             < http-only >true</ http-only >
             < secure >true</ secure >
      </ cookie-config >
</ session-config >


加固检查:

可以通过firebug查看cookie,出现HttpOnly属性

spacer.gif

 

3.6   配置shutdown端口

在$CATALINA_HOME\conf\server.xml中“<Server port="8005" shutdown="SHUTDOWN">”配置有允许任何人只要telnet到服务器的8005端口,输入"SHUTDOWN",然后回车,服务器立即就被关掉了。从安全的角度上考虑,需要把这个shutdown指令改成一个别人不容易猜测的字符串。而且这个修改不影响shutdown.bat或shutdown.sh的执行。配置如下:

<Serverport="未被占用的端口" shutdown="较为复杂的字符串">

注:配置的端口需要大于1024。

加固检查:

使用telnet 127.0.0.1 8005进入,输入“SHUTDOWN”,Tomcat不会被关闭。

 

3.7   隐藏Tomcat版本信息

在默认配置下,当应用出现异常时,客户端会显示Tomcat的版本信息。攻击者可以根据Tomcat版本信息选择漏洞库攻击,所以需要将Tomcat的版本信息隐藏,将$CATALINA_HOME\lib\catalina.jar\org\apache\catalina\util中的配置ServerInfo.properties如下:

1
2
3
server.info=需要展现的信息如SmartCity
server.number=SmartCity
server.built= 20140101


     加固检测:

输入一个异常的URL看看出现的异常页面是否出现类似(无Tomcat的版本信息)如下内容:

spacer.gif

 

3.8   关闭war自动部署

默认的配置war放在$CATALINA_HOME\webapps中会自动部署,所以关闭war自动部署防止被植入木马等恶意程序。将$CATALINA_HOME\conf\server.xml配置如下:

1
2
3
4
5
6
< Hostname = "localhost"
        appBase = "webapps"
     unpackWARs = "false"
    autoDeploy = "false"
     xmlValidation = "false"
     xmlNamespaceAware = "false" >


     加固检查:

将一个war文件放进$CATALINA_HOME\webapps,启动Tomcat后,war文件不会被部署。

3.9   Tomcat启动权限

场景一:新部署的应用

#若系统中已经存在该用户,则不需要重写创建

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost~] # groupadd dfhapp
[root@localhost~] # useradd  -d/home/ dfhapp -g dfhapp dfhapp
#创建的密码需要符合密码策略要求
[root@localhost~] # passwd dfhapp
更改用户 tomcat 的密码。
新的密码:
无效的密码:过于简单化/系统化
无效的密码:过于简单
重新输入新的密码:
passwd :所有的身份验证令牌已经成功更新。
[root@localhost/] # cd /
[root@localhost/] # mkdir /soft
[root@localhost/] # chown -R dfhapp:dfhapp /soft/


1
2
3
4
5
6
7
8
9
10
11
12
#切换用户
[root@localhost/] # su dfhapp
[dfhapp@localhost /]$  cd  /soft/
[dfhapp@localhost soft]$ wgethttp: //mirror .esocc.com /apache/tomcat/tomcat-6/v6 .0.39 /bin/apache-tomcat-6 .0.39.zip
[dfhapp@localhost soft]$ unzip apache-tomcat-6.0.39.zip
[dfhapp@localhost soft]$  mv  apache-tomcat-6.0.39 tomcat-demo
[dfhapp@localhost soft]$  cd  tomcat-demo/
[dfhapp@localhost tomcat-demo]$  chmod  750 *
[dfhapp@localhost tomcat-demo]$  chmod  -R 540 bin/*
[dfhapp@localhost tomcat-demo]$  chmod  -R 540 lib/*
[dfhapp@localhost tomcat-demo]$  chmod  -R 640 conf/*
[dfhapp@localhost tomcat-demo]$  cd  bin/


1
2
3
4
5
6
7
#启动Tomcat
[dfhapp@localhost bin]$ . /startup .sh 
UsingCATALINA_BASE:    /soft/tomcat-demo
UsingCATALINA_HOME:    /soft/tomcat-demo
UsingCATALINA_TMPDIR:  /soft/tomcat-demo/temp
UsingJRE_HOME:         /usr
UsingCLASSPATH:       /soft/tomcat-demo/bin/bootstrap .jar


 

场景二:已存在应用

#若系统中已经存在该用户,则不需要重写创建

1
2
3
4
5
6
7
8
9
10
[root@localhost~] # groupadd dfhapp
[root@localhost~] # useradd  -d/home/ dfhapp -g dfhapp dfhapp
#创建的密码需要符合密码策略要求
[root@localhost~] # passwd dfhapp
更改用户 tomcat 的密码。
新的密码:
无效的密码:过于简单化/系统化
无效的密码:过于简单
重新输入新的密码:
passwd :所有的身份验证令牌已经成功更新。


#关闭应用线程,标红的线程号需要一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@yuanyuan2/] # ps -ef |grep tomcat_demo
root      4917     1 6 16:08 pts /1     00:00:54 /usr/bin/java-Djava .util.logging.config. file = /apache/tomcat_demo/conf/logging .properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server-Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=256m-Djava.endorsed. dirs = /apache/tomcat_demo/endorsed  -classpath /apache/tomcat_demo/bin/bootstrap .jar -Dcatalina.base= /apache/tomcat_demo-Dcatalina .home= /apache/tomcat_demo  -Djava.io.tmpdir= /apache/tomcat_demo/temporg .apache.catalina.startup.Bootstrap start
root      5066 4858  0 16:22 pts /1     00:00:00  grep  tomcat_demo
  [root@yuanyuan2 /] # kill  -9 4917
#删除缓存目录,不然无法降权
[root@yuanyuan2~] # cd /apache/tomcat_demo/
[root@yuanyuan2tomcat_demo] # rm -rf work/Catalina/
[root@yuanyuan2tomcat_demo] # rm -rf conf/Catalina/
[root@localhost/] # chown -R dfhapp:dfhapp/data/
#切换用户
[root@localhost/] # su dfhapp
[dfhapp@yuanyuan2 /]$  cd  /apache/tomcat_demo/
#重新赋权限
[dfhapp@localhost tomcat-demo]$  chmod  750 *
[dfhapp@localhost tomcat-demo]$  chmod  -R 540 bin/*
[dfhapp@localhost tomcat-demo]$  chmod  -R 540 lib/*
[dfhapp@localhost tomcat-demo]$  chmod  -R 640 conf/*
[dfhapp@localhost tomcat-demo]$  cd  bin/


1
2
3
4
5
6
7
#启动Tomcat
[dfhapp@localhost bin]$ . /startup .sh 
UsingCATALINA_BASE:    /soft/tomcat-demo
UsingCATALINA_HOME:    /soft/tomcat-demo
UsingCATALINA_TMPDIR:  /soft/tomcat-demo/temp
UsingJRE_HOME:         /usr
UsingCLASSPATH:       /soft/tomcat-demo/bin/bootstrap .jar


 

注:(1)上述的dfhapp组名和用户可以根据需要更改。

     (2)如果需要上传文件到服务容器中的可以将存放目录设置为750.,命令如下。

1
[tomcat@localhostimage]$  chmod  -R 750 get/


     (3)鉴于Tonmcat的赋权操作是重复的,所以可以建立一个shell文件,存放在Tonmcat的根目录下进行赋权。

1
2
3
4
5
6
7
8
9
10
[tomcat@yuanyuan2tomcat_demo]$  pwd
/apache/tomcat_demo
#创建tomcat.sh脚本
[tomcat@yuanyuan2tomcat_demo]$ vim tomcat.sh 
chmod  750 *
chmod  -R 540 bin/*
chmod  -R 540 lib/*
chmod  -R 640 conf/*
[tomcat@yuanyuan2tomcat_demo]$  chmod  755 tomcat.sh
[tomcat@yuanyuan2tomcat_demo]$ . /tomcat .sh


     Tomcat中各个文件的权限:

1
2
3
4
5
6
7
8
9
10
11
12
13
[tomcat@localhosttomcat-demo]$ ll
总用量 124
drwxr-x---.2 tomcat tomcat  4096 1月  2722:42 bin
drwxr-x---.3 tomcat tomcat  4096 4月   220:52 conf
drwxr-x---.2 tomcat tomcat  4096 1月  2722:42 lib
-rwxr-x---.1 tomcat tomcat 57695 1月  27 22:42 LICENSE
drwxr-x---.2 tomcat tomcat  4096 4月   220:52 logs
-rwxr-x---.1 tomcat tomcat   783 1月  2722:42 NOTICE
-rwxr-x---.1 tomcat tomcat  9360 1月  2722:42 RELEASE-NOTES
-rwxr-x---.1 tomcat tomcat 16707 1月  27 22:42 RUNNING.txt
drwxr-x---.2 tomcat tomcat  4096 1月  2722:42 temp
drwxr-x---.8 tomcat tomcat  4096 4月   220:52 webapps
drwxr-x---.3 tomcat tomcat  4096 4月   220:52 work



本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/1610192

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值