创建用户
useradd -u 501 tomcat passwd tomcat
tomcat安装
tar zxf apache-tomcat-8.5.5.tar.gz -C /usr/local/ cd /usr/local/; ln -s apache-tomcat-8.5.5 tomcat chown -R tomcat.tomcat *tomcat*
应用程序配置
mkdir -p /data/webapps cd /data/ chown -R tomcat.tomcat webapps su tomcat #将应用程序放置在/data/webapps/目录下。建立相应的目录如团购wmw_tuan,静态化wmw_static,并修改server.xml,对应好目录即可 ###server.xml### <Host name="localhost" appBase="webapps" unpackWARS="true" autoDeploy="true"> <Context path="" docBase="/data/webapps/wmw_static" /> ...
启动tomcat
/usr/local/tomcat/bin/startup.sh
tomcat重启问题
/usr/local/tomcat/bin/shutdown.sh 这个命令是关闭tomcat
重启有2个问题需要注意:
1、建议生产环境中,每次重启之前把这两个文件夹清空,不然可能会因为缓存的问题造成一些奇怪的事件
2、有时候会发现执行shutdown.sh后,tomcat并没有完全关闭,所以我们可以做脚本kill进程
去除其他用户对tomcat启停脚本的执行权限
chmod 744 -R tomcat/bin/*
telnet端口保护
说明: 修改默认的8005管理端口为不易猜测的端口(大于1024) 修改SHUTDOWN指令为其他字符串 标准配置: <Server port="8527" shutdown="dangerous"> 备注: 以上配置项的配置内容只是建议配置
ajp端口保护
说明: 修改默认的ajp 8009端口为不易冲突的大于1024端口 通过iptables规则限制ajp端口访问的权限仅为线上机器 标准配置: <Connector port="8528" protocol="AJP/1.3"/> 备注: 以上配置项内容仅为建议配置,请按照实际情况进行合理配置,但要求端口在8000~8999之间 保护此端口的目的在于防止线下的测试流量被mod_jk转发至线上tomcat服务器
禁用管理端
说明: 删除默认的{tomcat安装目录}/conf/tomcat-user.xml文件,重启tomcat后将会自动生成新的文件 删除{tomcat安装目录}/webapps下默认所有的目录和文件 将tomcat应用根目录配置为tomcat安装目录以外的目录 标准配置: <Context path="" docBase="/data/webapps/bagtree" debug="0" reloadable="false" crossContext="true" /> 备注: 对于前段web模块,tomcat管理端属于tomcat的高危安全隐患,一旦被攻破,黑客通过上传web shell的方式将会直接取 得服务器的控制权,后果极其严重
降权启动
说明: tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限 如需要直接对外使用80端口,可通过普通帐号启动后,配置iptables规则进行转发 备注: 避免一旦tomcat服务被入侵,黑客直接获取高级用户权限危害整个server的安全
文件访问列表控制
说明: conf/web.xml文件中default部分listings的配置必须为false 标准配置: <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> 备注: false为不列出目录文件,true为允许列出,默认为false
版本信息隐藏
说明: 修改conf/web.xml,重定向403、404以及500等错误到指定的错误页面 也可以通过应用程序目录下的WEB-INF/web.xml进行错误页面的重定向 标准配置: <error-page> <error-code>403</error-code> <location>/forbidden.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/notfound.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/serverbusy.jsp</location> </error-page> 备注: 在配置中对一些常见错误进行重定向,避免当出现错误时tomcat默认显示的错误页面暴露服务器和版本信息 必须确保程序跟目录下的错误页面已经存在
Server header重写
说明: 在HTTP Connector配置中加入server的配置 标准配置: server="webserver" 备注: 当tomcat HTTP端口直接提供web服务时此配置生效,加入此配置,将会替换http响应Server header部分默认配置,默认是Apache-Coyote/1.1
访问控制
说明: 通过配置,限定访问的ip源 标准配置: <Context path="" docBase="/home/work/tomcat" debug="0" reloadable="false" crossContext="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValue" allow="61.148.18.138,61.135.165.*" deny="*.*.*.*" /> </Context> 备注: ip的白名单,拒绝非白名单ip的访问,此配置主要是针对高保密级别的系统
起停脚本权限回收
说明: 取出其他用户对tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限 标准配置: chmod -R 744 tomcat/bin/* 备注: 防止其他用户有起停线上tomcat的权限
访问日志格式规范
说明: 开启tomcat默认访问日志中的Referer和User-Agent记录 标准配置: <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false" /> 备注: 开启Referer和User-Agent是为了一旦出现安全问题能够更好的根据日志进行问题排查