类别 | 配置内容及说明 | 标准配置 | 备注 |
---|---|---|---|
降权启动 | 1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发; | 避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全; | |
隐藏版本 | 在访问tomcat不存在页面时,访问404底部会提示出现apache tomcat 8.5.51泄漏版本号,黑客根据此版本漏洞进行恶意攻击 |
Tomcat安全优化
1、降权启动
[root@localhost ~]# useradd tomcat
[root@localhost ~]# chown tomcat.tomcat /data/application/tomcat/ -R
[root@localhost ~]# su -c '/data/application/tomcat/bin/start.sh start' tomcat
Using CATALINA_BASE: /data/application/tomcat
Using CATALINA_HOME: /data/application/tomcat
Using CATALINA_TMPDIR: /data/application/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /data/application/tomcat/bin/bootstrap.jar:/data/application/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost ~]# ps -ef | grep tomcat
tomcat 1065 1 64 20:33 ? 00:00:06 /usr/local/java/bin/java -Djava.util.logging.config.file=/data/applicationtomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/application/tomcat/bin/bootstrap.jar:/data/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 1112 1027 0 20:33 pts/0 00:00:00 grep --color=auto tomcat
2、隐藏版本
1.找到Tomcat所在目录下的lib目录
2.找到catalina.jar文件
3.解压unzip catalina.jar之后会多出两个文件夹
4.进入org/apache/catalina/util 编辑配置文件ServerInfo.properties
5.修改配置文件
server.info=Apache Tomcat
server.number=
server.built=
6.更新jar包信息
lib目录下执行
jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
7.重启tomcat
生产优化
上策:优化代码
该项需要开发经验足够丰富,对开发人员要求较高
中策:jvm优化机制 垃圾回收机制 把不需要的内存回收
优化jvm--优化垃圾回收策略
优化catalina.sh配置文件。在catalina.sh配置文件中添加代码
# tomcat分配1G内存模板
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m
# 重启服务
su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat
su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat
# 其他参数
-XX:MetaspaceSize 元数据区
-XX:MaxMetaspaceSize 元数据区最大值
-Xmx 最大堆内存
-Xms 最小堆内存
-Xmn 年轻代大小 [堆大小=年轻代大小 + 年老代大小]
-Xss 最大栈空间
-XX:PermSize 永久代
-XX:MaxPermSize 永久代最大
# gc 正常状态
MinorGC 执行时间不到50ms;
Minor GC 执行不频繁,约10秒一次;
Full GC 执行时间不到1s;
Full GC 执行频率不算频繁,不低于10分钟1次。
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
jps 检测gc状态
#!/usr/bin/env python
import os,sys
jps_info = os.popen("/usr/bin/sudo /usr/local/java/bin/jps | grep %s | awk '{print $1}'"% sys.argv[1])
jps_info = jps_info.read()
jps_id = jps_info.strip()
jstat = {'YGC':'$13','YGCT':'$14','FGC':'$15','FGCT':'$16','GCT':'$17'}
info = jstat[sys.argv[2]]
command = "/usr/bin/sudo /usr/local/java/bin/jstat -gc "+jps_id+" | awk '{print "+info+"}'| /usr/bin/tail -n 1"
os.system(command)
下策:加足够大的内存
该项的资金投入较大
下下策:每天0点定时重启tomcat
使用较为广泛