第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" /> |
加固檢查:
輸入賬號和密碼都沒法登陸
3.3 除webapps應用
除了須要部署上去的應用,其他位於$CATALINA_HOME\webapps文件夾中的應用如docs、examples、host-manager、manager和ROOT。
注:若無業務必要,請執行刪除上述的應用包。
加固檢查:
輸入:http://localhost:8080/manager/html
出現的頁面空白
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屬性
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的版本信息)以下內容:
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 |