tomcat安全加固配置手册

第1章   概述

1.1   目标

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

1.2   预期读者

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

第2章    产品介绍

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

第3章   Tomcat的安全加固配置

3.1  Tomcat版本统一

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

Linux:apache

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

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

UsingCATALINA_BASE:  /soft/tomcat6-spaceservice缓存

UsingCATALINA_HOME:  /soft/tomcat6-spaceservicetomcat

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