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:

[[email protected]]# cd bin/

[[email protected]]# ./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中文件的所有用户都注释掉,配置如下:

<?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配置如下:

<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:

<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"配置如下:

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

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

<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如下:

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

加固检测:

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

3.8   关闭war自动部署

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

<Hostname="localhost"
       appBase="webapps"
    unpackWARs="false"
   autoDeploy="false"
    xmlValidation="false"
    xmlNamespaceAware="false">

加固检查:

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

3.9   Tomcat启动权限

场景一:新部署的应用

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

[[email protected]~]# groupadd dfhapp
[[email protected]~]# useradd  -d/home/ dfhapp -g dfhapp dfhapp
#创建的密码需要符合密码策略要求
[[email protected]~]# passwd dfhapp
更改用户 tomcat 的密码。
新的密码:
无效的密码:过于简单化/系统化
无效的密码:过于简单
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[[email protected]/]# cd /
[[email protected]/]# mkdir /soft
[[email protected]/]# chown -R dfhapp:dfhapp /soft/
#切换用户
[[email protected]/]# su dfhapp
[[email protected] /]$ cd /soft/
[[email protected] soft]$ wgethttp://mirror.esocc.com/apache/tomcat/tomcat-6/v6.0.39/bin/apache-tomcat-6.0.39.zip
[[email protected] soft]$ unzip apache-tomcat-6.0.39.zip
[[email protected] soft]$ mv apache-tomcat-6.0.39 tomcat-demo
[[email protected] soft]$ cd tomcat-demo/
[[email protected] tomcat-demo]$ chmod 750 *
[[email protected] tomcat-demo]$ chmod -R 540 bin/*
[[email protected] tomcat-demo]$ chmod -R 540 lib/*
[[email protected] tomcat-demo]$ chmod -R 640 conf/*
[[email protected] tomcat-demo]$ cd bin/
#启动Tomcat
[[email protected] 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

场景二:已存在应用

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

[[email protected]~]# groupadd dfhapp
[[email protected]~]# useradd  -d/home/ dfhapp -g dfhapp dfhapp
#创建的密码需要符合密码策略要求
[[email protected]~]# passwd dfhapp
更改用户 tomcat 的密码。
新的密码:
无效的密码:过于简单化/系统化
无效的密码:过于简单
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。

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

[[email protected]/]# 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
 [[email protected] /]# kill  -9 4917
#删除缓存目录,不然无法降权
[[email protected]~]# cd /apache/tomcat_demo/
[[email protected]_demo]# rm -rf work/Catalina/
[[email protected]_demo]# rm -rf conf/Catalina/
[[email protected]/]# chown -R dfhapp:dfhapp/data/
#切换用户
[[email protected]/]# su dfhapp
[[email protected] /]$ cd /apache/tomcat_demo/
#重新赋权限
[[email protected] tomcat-demo]$ chmod 750 *
[[email protected] tomcat-demo]$ chmod -R 540 bin/*
[[email protected] tomcat-demo]$ chmod -R 540 lib/*
[[email protected] tomcat-demo]$ chmod -R 640 conf/*
[[email protected] tomcat-demo]$ cd bin/
#启动Tomcat
[[email protected] 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.,命令如下。

[[email protected]]$ chmod -R 750 get/

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

[[email protected]_demo]$ pwd
/apache/tomcat_demo
#创建tomcat.sh脚本
[[email protected]omcat_demo]$ vim tomcat.sh 
chmod 750 *
chmod -R 540 bin/*
chmod -R 540 lib/*
chmod -R 640 conf/*
[[email protected]_demo]$ chmod 755 tomcat.sh
[[email protected]_demo]$ ./tomcat.sh

Tomcat中各个文件的权限:

[[email protected]]$ 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
时间: 2024-08-06 23:01:19

Tomcat安全加固配置手册的相关文章

Nginx安全加固配置手册

第1章   概述 1.1   目标 Nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,可以稳定地运行在Linux.Windows等操作系统上,其特点是占用内存少,并发能力强. 同其他软件一样,Nginx也出现过一些安全漏洞,利用这些漏洞可以对Web服务器进行渗透攻击.本文主要描述互联网架构中常用产品Nginx 的配置和安全加固工作,最终用以指导系统实施. 1.2   预期读者

Nginx+Tomcat+MemCached 集群配置手册

系统实施文档 Nginx+Tomcat+MemCached 集群配置手册 目    录 第1章   概述 1.1   目标 互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架构时会应用很多高性能的产品, 本文主要描述互联网架构中门户应用的集群的配置工作,最终用以指导系统实施. 1.2   预期读者 本文档用于指导系统工程师进行系统实施工作,架构师和系统工程师应该通读本文档,选择适当版本用于自己的系统架构. 第2章   产品介绍 2.1   Nginx介绍 Nginx是一

JNDI在Tomcat中的配置

使用JNDI获取连接对象 java:comp/env/jdbc/news 这段为固定写法java:comp/env/ 在Tomcat中的配置 配置在:context.xml文件内 F:\apache-tomcat-7.0.68-windows-x64\apache-tomcat-7.0.68\conf\context.xml ---------mySQL<Resource name="jdbc/news"auth="Container" type="

SVN Server环境安装配置手册

SVN Server环境安装配置手册_百度文库 http://wenku.baidu.com/link?url=923bv1olSkznh1gWd7Gqoxxwj18IHIlTXcEbNiPSLM5H32k93UtQ22rAVppNIlVv89ru4E1cPFe1yESSEkSsR4NfDMMRgpA2d3GI_KcV37m

Linux中tomcat开机启动配置脚本【参考其他文章的总结备忘录】

参考文章http://blog.sina.com.cn/s/blog_a57562c80101ic47.html http://blog.csdn.net/cheng168520/article/details/4312828 http://blog.sina.com.cn/s/blog_7f395ece0100ti5y.html 以前在自己本机上安装过一个Linux,后台应为系统崩溃,以前配置的开机启动脚本.数据库主从双备份.负载均衡等都没了,所以现在在重新配置一次,赶紧做个笔记防止自己以后又

TOMCAT虚拟路径配置

在tomcat安装好后,只要把你的web项目copy到%TOMCAT_HOME%webapp下面就可以是使用啦!!其实还有种方法就是设定虚拟目录,即把项目的目录映射到tomcat中.这样做即可以不用重复的部署,节约时间,而且给开发人员带来方便.方法如下:1,找到%TOMCAT_HOME%/conf/server.xml,(即tomcat的安装目录下面相关的文件)打开此xml文件,在 <host> </host>之间加入如下代码: <Context path="&qu

Nginx + Tomcat 负载均衡配置详解

Nginx作为反向代理服务器,实现负载均衡.首先浏览器发起请求,到达Nginx,由Nginx将请求地址转发给相应的tomcat服务器,再由tomcat服务器将结果返回给Nginx,Nginx将结果再转发给浏览器. 在这过程中,对于浏览器来说,并不知道后端的存在, 相对于Tomact来说,当前的客户端是Nginx服务器.这就完成了一个代理的过程. 首先准备三台Linux服务器:IP地址分别为 192.168.1.61  192.168.1.62  192.168.1.63 其中61安装nginx服

nginx+tomcat集群配置(1)---根目录设定和多后端分发配置

前言: 对于javaer而言, nginx+tomcat集群配置, 已然成了web应用部署的主流. 大公司如此, 小公司亦然. 对于个人开发者而言, 资源有限, 往往多个web应用混部于一台服务器(云主机), 如何隔离访问这些服务资源? 彼此又不影响呢? nginx来为你排忧解难, ^_^. 本文将介绍tomcat的简单配置和部署, 以及nginx作为反向代理, 如何分流. 基础架构: 不成文的约定: 1). 一个tomcat容器部署一个webapp应用实例 2). url根目录访问webapp

【工具系列一】——Tomcat的基本配置

Tomcat是Java领域最著名的开源Web容器,也是平时最常用Web服务器,我们有必要对其基本的配置有所了解. 本篇博客中所介绍的配置基于版本apache-tomcat-6.0.43 Tomcat下载地址:http://tomcat.apache.org/ 目录说明 windows平台下目录结构说明: bin:操作Tomcat命令的路径 conf:Tomcat配置 lib:核心类库,第三方类库存放路径(扩展Tomcat功能) logs:存放每次运行后产生的日志 temp:web应用运行过程中生