tomcat的安全配置

一、目的

本标准是Qunar信息系统安全技术标准的一部分,主要目的是根据信息安全管理政策要求,为tomcat配置提供安全标准。

 二、范围

适用于我司所有tomcat。

 三、内容

 3.1 版本

同一应用,TOMCAT和JDK使用统一版本,生成环境TOMCAT和JDK由OPS部门或PE维护,其他人员禁止变更。当前指定的最低版本如下:

开始执行日期 
软件名称 
指定版本 
2011/11/8 
tomcat 
6.0.29 
2011/11/8 
jdk 
1.6.0_20-b02 
 3.2 删除默认文件

删除TOMCAT默认示例文件、帮助文件、后台管理界面等,禁止使用manager/admin管理后台。需删除的文件和目录清单如下:

$CATALINA_BASE/server/webapps/manager
$CATALINA_BASE/server/webapps/host-manager
$CATALINA_BASE/webapps/balancer
$CATALINA_BASE/webapps/manager
$CATALINA_BASE/webapps/host-manager
$CATALINA_BASE/webapps/webdav
$CATALINA_BASE/webapps/tomcat-docs
$CATALINA_BASE/webapps/jsp-examples
$CATALINA_BASE/webapps/servlets-examples
$CATALINA_BASE/webapps/examples
$CATALINA_BASE/webapps/docs
$CATALINA_BASE/conf/tomcat-users.xml 
 3.3 启动帐号

建立独立用户,用户名和组名均为tomcat,不设置密码(即禁止SSH登录),tomcat进程以此帐号身份运行,严禁以root权限运行tomcat,禁止以个人帐号或其他有shell权限的帐号运行tomcat。可选如下方法之一来实现非ROOT启动tomcat:

 3.3.1 修改启动脚本

在$CATALINA_BASE/startenv.sh里面export环境变量:

export TOMCAT_USER=tomcat

同时需要修改$CATALINA_HOME/bin/startup.sh

修改前

exec "$PRGDIR"/"$EXECUTABLE" start "$@"

修改后

if [ -z "$TOMCAT_USER" ]; then
    exec "$PRGDIR"/"$EXECUTABLE" start "$@"
else
    exec su $TOMCAT_USER -c "$PRGDIR/$EXECUTABLE start $@"
fi
 3.3.2 使用jsvc来启动tomcat

在jsvc配置文件里面指定参数

-u tomcat
 3.4 禁止列目录

配置$CATALINA_BASE/conf/web.xml文件,防止直接访问目录时由于找不到默认主页而列出目录下所有文件。

<servlet>
        ......
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        ......
</servlet> 
 3.5 日志记录

必须打开access log记录功能,按小时或按天记录。prefix/fileDateFormat/pattern可自定义,但必须记录关键信息,例如:源IP,Host、时间、请求、状态码、数据大小、UA等。注意:如果前端是NG做反向代理,默认的pattern="combined"和pattern="common"不能记录用户的真实IP,必须自定义pattern,记录客户端真实IP(X-Real-IP)。access log应该定期压缩上传至中央日志服务器保存。$CATALINA_BASE/conf/server.xml配置示例:

<Valve className="org.apache.catalina.valves.AccessLogValve"
    directory="logs"  prefix="自定义" suffix=".log"
    fileDateFormat="yyyy-MM-dd-HH"
    pattern="%a %l %u %t &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot; %{X-Real-IP}i"
    resolveHosts="false"/> 

特殊情况如不需要记录日志,请向安全组报备,安全组将记录在wiki。

 3.6 禁止使用jmx

如之前已经启用,在启动脚本里面(catalina.sh或startenv.sh)删除CATALINA_OPTS变量里面jmxremote相关参数即可。

 3.7 禁止使用AJP

配置$CATALINA_BASE/conf/server.xml文件,注释或删除如下部分。

注释前

<Connector port="*" maxThreads="*"
               enableLookups="false" redirectPort="*" protocol="AJP/**" />

注释后

<!--
<Connector port="*" maxThreads="*"
               enableLookups="false" redirectPort="*" protocol="AJP/**" />
-->
 3.8 目录权限

默认情况下,tomcat启动用户对WEB目录下所有文件及子目录应无写权限。

假设web目录是/home/q/www/xx.qunar.com/webapps,正确的权限设置应该是:

chown -R root:root /home/q/www/xx.qunar.com/webapps && chmod -R 0755 /home/q/www/xx.qunar.com/webapps

即属主是root,权限是0755,子目录权限跟父目录完全一样。

日志文件及cache文件应放在WEB目录之外,具体请参见TC发布的标准:http://wiki.corp.qunar.com/pages/viewpage.action?pageId=11239369

 3.9 可写目录禁止执行

如tomcat需支持上传功能,或因其它原因需要对WEB目录有写权限,那么应该限制这些可写目录禁止执行jsp脚本。上传功能在代码实现中,通常会存在各种各样的安全漏洞,导致上传限制被绕过,被攻击者上传jsp文件进而获取web shell。设置可写目录禁止执行jsp,是一道非常重要的防线!注意:这里指的不是去除文件系统rwx权限中的x,文件系统权限中的x可以保留,无危害。

appdir路径有几种可能:

(1) 默认位置

appdir="$CATALINA_BASE/webapps/ROOT"

(2) 默认位置下指定了appname

appdir="$CATALINA_BASE/webapps/$appname"

(3)通过docBase参数指定的路径

appdir="$docBase"

以下是通过UrlRewriteFilter模块来限制的示例配置,如果WEB-INF及相关目录不存在,创建一个即可。

 3.9.1 部署jar

http://tuckey.org/urlrewrite/获取最新版本的urlrewrite jar包,把"urlrewrite-x.x.x.jar"拷贝到"$appdir/WEB-INF/lib"目录下

 3.9.2 修改web.xml加载filter

在"$appdir/WEB-INF/web.xml"增加如下配置项

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
 3.9.3 设置规则禁止上传目录执行jsp

新建配置文件"$appdir/WEB-INF/urlrewrite.xml",假设/upload/和/images/logo/目录需要设置为禁止执行jsp,配置如下:

<?xml version="1.0" encoding="utf-8"?>

<urlrewrite>
    <rule>
        <from>.*/[\.]*/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
    <rule>
        <from>^/upload/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
    <rule>
        <from>^/images/logo/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>
</urlrewrite>

第1条rule用于拦截/重写类似这样的非法请求,这条必不可少,否则其它规则会被绕过!

http://host//shell.jsp
http://host/dir/../shell.jsp
http://host/./shell.jsp

第2条rule用于拦截/重写类似这样的非法请求

http://host/upload/shell.jsp
http://host/upload/dir/shell.jsp

第3条rule用于拦截/重写类似这样的非法请求

http://host/images/logo/shell.jsp
http://host/images/logo/dir/shell.jsp

如果有其它目录需要禁止执行jsp,参照第2条和第3条进行配置即可。

如果根目录及子目录都禁止执行jsp,配置为

    <rule>
        <from>^/.*\.jsp$</from>
        <to>/deny.html</to>
    </rule>


设置完成并重启tomcat后,请用curl(如果用浏览器,某些特殊的请求会被浏览器净化,达不到测试目的)来验证设置是否生效:

curl -i http://host/upload/shell.jsp
curl -i http://host/upload/dir/../shell.jsp

 具体的URL地址请做相应替换

 3.9.4 可写目录的权限设置

假设web服务启动帐号为tomcat,可写目录是/homr/q/xxx.qunar.com/webapps/upload,正确的权限设置应该是:

chown -R tomcat:tomcat /homr/q/xxx.qunar.com/webapps/upload && chmod -R 0755 /homr/q/xxx.qunar.com/webapps/upload

即可写目录的属主应该为web启动帐号,权限应该为0755,子目录的权限应该跟父目录完全一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值