近期安全部门内部漏扫时,发现部分tomcat存在通过OPTIONS方法提交特定的请求的问题,在响应中查看allow头信息,在allow头中发现delete、put等选项,delete方法是用来调试web服务器连接的http方式,支持该方式的服务器文件可能被非法删除;put方法用来向服务器提交文件,测试显示部分请求中这些方法是允许的。借此机会,顺手整理了下针对tomcat的安全加固。

一、删除示例文档

删除webapps/docs、examples、manager、ROOT、host-manager,这个步骤不提供了,拿到tomcat一般第一件事就做这个,老生常谈了。

二、禁止列目录

打开web.xml,将listings 改成 false ,防止直接访问目录时由于找不到默认页面而列出目录下的文件。

三、修改默认端口

编辑conf/server.xml文件,把8080改成1024-65535的未使用端口。

四、禁用tomcat默认帐号

打开conf/tomcat-user.xml文件,将以下用户注释掉:

<pre data-language="XML">```markup
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->

### 五、禁用不需要的http方法

对应开头,一般禁用delete,put方法,修改web.xml文件,增加如下内容:
```markup


/*
PUT
DELETE
HEAD
OPTIONS
TRACE





BASIC


```
```

注意,web.xml文件的修改,需重启tomcat生效。

### 六、启用安全cookie

防止xss跨站点攻击,tomcat6开始支持此属性,此处在context.xml中添加启用配置,context.xml配置即调用时生效不需要重启tomcat

```
```markup
# http://tomcat.apache.org/tomcat-6.0-doc/config/context.html


```
```

### 七、修改tomcat版本信息

进入apache-tomcat目录lib下,找到catalina.jar,使用压缩工具依次找到org\\apache\\catalina\\util下的ServerInfo.properties。打开ServerInfo.properties编辑:(去掉版本信息)如下:

```
```markup
server.info=Apache Tomcat
server.number=
server.built=

```
```

### 八、重定向错误页面

conf/web.xml在倒数第1行之前加如下内容:

```
```markup

     401
     /401.htm


     404
     /404.htm


     500
     /500.htm


```
```

然后在webapps\\manger目录中创建相应的401.html\\404.htm\\500.htm文件,错误返回页也可在应用中配置,应用中配置则只在当前应用生效。

### 九、其他

以下这个项可能不完全和安全相关,也单独列下吧。

#### 1、禁止使用root用户运行

这个只针对类linux系统而言的,一旦有漏洞,被人注入上传木马,以什么样的用户运行就获取了什么权限。

#### 2、虚拟目录

配置类似如下:

```
```markup




```
```

默认server.xml里一般只有appBase,没有docBase,两者的区别是:appBase这个目录下面的子目录将自动被部署为应用,且war文件将被自动解压缩并部署为应用。如果不想自动war部署,就把autoDeploy配置为false。默认为tomcat下的ROOT目录;docBase只是指向了你某个应用的虚拟目录,这个可以和appBase没有任何关系。这个可以拿apache httpd的默认目录DocumentRoot和虚拟主机VirtualHost对比。

#### 3、日志审核

access log,新的版本里默认都是开启这个的:

修改conf/server.xml,取消注释如下部分:

```
```markup
 

```
```

启用access\_log后,重启tomcat,在tomcat\_home/logs中可以看到访问日志。