关于Tomcat7.0.73的安全配置

来源:互联网 发布:网络的弊辩论赛资料 编辑:程序博客网 时间:2024/06/09 23:36

在项目发布后tomcat的安全配置

1、注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

在 conf/tomcat-users.xml<?xml version='1.0' encoding='utf-8'?><tomcat-users></tomcat-users>

2、隐藏Tomcat版本信息

在CATALINA_HOME/conf/server.xml<Connector port="80" protocol="HTTP/1.1"           connectionTimeout="20000"           redirectPort="8443"           maxThreads="8192"           minSpareThreads="64"           maxSpareThreads="128"           acceptCount="128"           enableLookups="false"           server="Neo App Srv 1.0"/>

3、启动用户与端口

不要使用root用户启动tomcat,Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。
即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系统,Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。这造成了一个问题,Linux系统小于1024的端口只有root可以使用,这也是为什么Tomcat默认端口是8080。
如果你想使用80端口只能使用root启动Tomcat。这有带来了很多安全问题。
解决方案是创建一个不同用户,如:

groupadd -g 80 daemonadduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon

注意 /sbin/nologin , 意味着该用户不能登录,同时我也没有给它指定密码,这个用户只能用于启动tomcat

chown daemon:daemon -R /srv/*su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

接下来解决80端口问题, 思路就是80去调用8080,或者映射端口。

下面是影射方案80 跳转 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

取消跳转

iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

查看规则

iptables -t nat -L

另一个就是从80请求去调用8080的方案

这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等

4、应用程序安全

关闭war自动部署,防止被植入木马等恶意程序

unpackWARs="false" autoDeploy="false"

应用程序部署与tomcat启动,不能使用同一个用户。

我的tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。

adduser --home /www -c "Web Application" www

5、JSESSIONID

修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID。

tomcat-user.xm 安全

查看进程帐户应为专用非root帐号。

查看tomcat配置文件server.xml是否有设置connectionTimeout值,

符合:设置账户自动登出。

检查tomcat/conf/web.xml配置文件,查看是否含有如下配置

<security-constraint>    <web-resource-collection>        <url-pattern>/*</url-pattern>        <http-method>PUT</http-method>        <http-method>DELETE</http-method>        <http-method>HEAD</http-method>        <http-method>OPTIONS</http-method>        <http-method>TRACE</http-method>    </web-resource-collection>    <auth-constraint>    </auth-constraint></security-constraint>    <login-config>        <auth-method>BASIC</auth-method>    </login-config>
原创粉丝点击