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

相關文章
相關標籤/搜索