各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言,我会以最快速度给你们总结,然后发出来!
依据 GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》第三级”安全计算环境” 条款,结合 Tomcat 8.5/9.0/10.1 官方安全指南及多家测评机构现场实践,给出可直接落地的 测评命令清单。
已在 Tomcat 8.5.93 / 9.0.82 / 10.1.15 环境验证通过,支持 Standalone / Cluster 部署模式。
一、身份鉴别(8.1.4.1)
1.1 管理接口认证配置
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 管理后台密码 | cat $CATALINA_HOME/conf/tomcat-users.xml | grep 'manager|admin' | 强密码,非默认角色组合 |
| 管理接口禁用 | cat $CATALINA_HOME/conf/Catalina/localhost/manager.xml 2>/dev/null | 不存在或配置仅本地访问 |
| 主机管理器禁用 | ls $CATALINA_HOME/webapps/host-manager/ | 不存在或已删除 |
| 管理器应用限制 | cat $CATALINA_HOME/conf/Catalina/localhost/manager.xml | grep 'Valve' | 配置RemoteAddrValve限制IP |
Tomcat管理接口核查:
# 设置环境变量
exportCATALINA_HOME=/opt/tomcat # 或 /usr/share/tomcat9, /var/lib/tomcat*
# 查看Tomcat版本
cat$CATALINA_HOME/RELEASE-NOTES |head-20|grep"Apache Tomcat Version"
# 或
java-cp$CATALINA_HOME/lib/catalina.jar org.apache.catalina.util.ServerInfo 2>/dev/null |head-5
# 查看管理用户配置(关键检查)
cat$CATALINA_HOME/conf/tomcat-users.xml |grep-v'^<!--'|grep-v'^$'|grep'user'
# 检查是否存在弱密码或默认账户
cat$CATALINA_HOME/conf/tomcat-users.xml |grep-E'username="(admin|tomcat|manager|root)"'
cat$CATALINA_HOME/conf/tomcat-users.xml |grep'password='|grep-v'password="\$'# 非加密密码告警
# 检查角色配置(最小权限原则)
cat$CATALINA_HOME/conf/tomcat-users.xml |grep'role rolename='
# 生产环境不应使用manager-gui, admin-gui角色
# 查看管理器上下文配置
cat$CATALINA_HOME/conf/Catalina/localhost/manager.xml 2>/dev/null ||echo"manager.xml不存在(可能已删除)"
# 查看主机管理器配置
cat$CATALINA_HOME/conf/Catalina/localhost/host-manager.xml 2>/dev/null ||echo"host-manager.xml不存在"
# 检查是否删除管理应用
ls-la$CATALINA_HOME/webapps/ |grep-E'manager|host-manager'
# 生产环境应删除或重命名这两个目录
# 检查管理接口访问控制(IP限制)
if[-f"$CATALINA_HOME/conf/Catalina/localhost/manager.xml"];then
cat$CATALINA_HOME/conf/Catalina/localhost/manager.xml |grep-A5'RemoteAddrValve\|RemoteHostValve'
fi
1.2 Realm配置与认证
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| Realm配置 | cat $CATALINA_HOME/conf/server.xml | grep -A 5 'Realm' | 使用DataSourceRealm或LDAPRealm,非MemoryRealm |
| 密码加密 | cat $CATALINA_HOME/conf/server.xml | grep -i 'CredentialHandler' | 配置SHA-256或PBKDF2,非明文 |
| 锁定策略 | cat $CATALINA_HOME/conf/server.xml | grep -i 'LockOutRealm' | 启用账户锁定 |
Realm安全核查:
# 查看Server.xml中的Realm配置
cat$CATALINA_HOME/conf/server.xml |grep-B2-A10'<Realm'
# 检查是否使用LockOutRealm(防止暴力破解)
cat$CATALINA_HOME/conf/server.xml |grep-A5'LockOutRealm'
# 检查凭证处理器(密码加密)
cat$CATALINA_HOME/conf/server.xml |grep-A5'CredentialHandler'
# 应配置:org.apache.catalina.realm.MessageDigestCredentialHandler 或 SecretKeyCredentialHandler
# 检查密码算法
cat$CATALINA_HOME/conf/server.xml |grep-i'algorithm'|head-5
# 检查是否使用JDBCRealm(生产环境推荐)
cat$CATALINA_HOME/conf/server.xml |grep-A10'DataSourceRealm\|JDBCRealm'
# 检查是否使用LDAP/AD集成
cat$CATALINA_HOME/conf/server.xml |grep-A10'JNDIRealm'
# 检查JAASRealm配置(企业集成)
cat$CATALINA_HOME/conf/server.xml |grep-A10'JAASRealm'
1.3 会话管理与超时
# 查看会话超时配置
cat$CATALINA_HOME/conf/web.xml |grep-A5'session-config'
# 检查会话Cookie配置
cat$CATALINA_HOME/conf/context.xml |grep-A5'CookieProcessor\|sessionCookiePath\|useHttpOnly'
# 检查web.xml中的会话超时(分钟)
cat$CATALINA_HOME/conf/web.xml |grep-A3'session-timeout'
# 检查是否启用HttpOnly和Secure Cookie
cat$CATALINA_HOME/conf/context.xml |grep-i'useHttpOnly\|secure'
# 检查会话固定保护
cat$CATALINA_HOME/conf/server.xml |grep-i'changeSessionIdOnAuthentication'
# 检查并发会话控制(通过Valve)
cat$CATALINA_HOME/conf/server.xml |grep-A5'SingleSignOn\|Authenticator'
1.4 远程管理安全
# 检查AJP连接器配置(如使用)
cat$CATALINA_HOME/conf/server.xml |grep-A10'protocol="AJP/1.3"'
# 应配置secretRequired="true"和secret属性
# 检查AJP是否绑定本地(防止Ghostcat等漏洞)
cat$CATALINA_HOME/conf/server.xml |grep-A5'AJP/1.3'|grep'address'
# 检查是否禁用不必要连接器
cat$CATALINA_HOME/conf/server.xml |grep-E'<Connector'|grep-v'^<!--'
# 检查Shutdown端口安全
cat$CATALINA_HOME/conf/server.xml |grep-A3'port="8005"'
# 应配置shutdown命令为随机字符串或禁用(-1)
# 检查是否配置JMX远程(应禁用或安全加固)
cat$CATALINA_HOME/bin/setenv.sh 2>/dev/null |grep-i'jmxremote'
cat$CATALINA_HOME/bin/catalina.sh |grep-i'jmxremote'
# 检查访问日志中的管理操作
tail-100$CATALINA_HOME/logs/localhost_access_log.*.txt 2>/dev/null |grep-E'/manager/html|/host-manager/html'
高风险项:管理后台使用弱密码、未删除默认管理应用、AJP未配置secret、Shutdown端口使用默认字符串,直接判定不符合三级要求。
二、访问控制(8.1.4.2)
2.1 部署与文件权限
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 部署目录权限 | ls -la $CATALINA_HOME/webapps/ | tomcat用户所有,755权限 |
| 配置目录权限 | ls -la $CATALINA_HOME/conf/ | tomcat用户所有,750权限 |
| 日志目录权限 | ls -la $CATALINA_HOME/logs/ | tomcat用户所有,750权限 |
| 敏感文件保护 | find $CATALINA_HOME -name "*.xml" -o -name "*.properties" | xargs ls -la | 无全局可读敏感文件 |
文件权限核查:
# 检查Tomcat进程用户
ps aux |grep-E'java.*tomcat\|java.*catalina'|grep-vgrep|awk'{print $1}'|sort|uniq
# 检查安装目录权限
ls-la$CATALINA_HOME/ |head-15
# 检查关键目录权限
echo"=== webapps ==="
ls-la$CATALINA_HOME/webapps/ |head-10
stat-c'%a %U:%G'$CATALINA_HOME/webapps/
echo"=== conf ==="
ls-la$CATALINA_HOME/conf/ |head-10
stat-c'%a %U:%G'$CATALINA_HOME/conf/
echo"=== logs ==="
ls-la$CATALINA_HOME/logs/ |head-5
stat-c'%a %U:%G'$CATALINA_HOME/logs/
echo"=== lib ==="
stat-c'%a %U:%G'$CATALINA_HOME/lib/
# 检查配置文件权限
find$CATALINA_HOME/conf -type f -name"*.xml"-execstat-c'%a %U:%G %n'{}\;
# 检查是否包含敏感信息
cat$CATALINA_HOME/conf/server.xml |grep-i'password'|grep-v'<!--'
# 检查context.xml中的数据源密码
cat$CATALINA_HOME/conf/context.xml |grep-i'password\|username'
# 检查setenv.sh中的敏感信息
cat$CATALINA_HOME/bin/setenv.sh 2>/dev/null |grep-i'pass\|secret\|key'
# 检查日志文件权限(应仅tomcat可读)
stat-c'%a %U:%G'$CATALINA_HOME/logs/catalina.out 2>/dev/null ||stat-c'%a %U:%G'$CATALINA_HOME/logs/catalina.*.log |head-1
2.2 运行时安全管理
# 检查Security Manager是否启用(生产环境建议)
cat$CATALINA_HOME/bin/catalina.sh |grep-i'security\|java.security.manager'
ls-la$CATALINA_HOME/conf/catalina.policy 2>/dev/null
# 检查是否以root运行(高风险)
ps aux |grepjava|grep-E'catalina|tomcat'|grep-vgrep|awk'{print $1}'|whileread user;do
if["$user"="root"];then
echo"⚠ 警告: Tomcat以root用户运行"
else
echo"运行用户: $user"
fi
done
# 检查JVM参数安全
ps aux |grepjava|grep-E'catalina|tomcat'|grep-o'\-D[^ ]*'|head-20
# 检查是否禁用不安全的JMX
ps aux |grepjava|grep-E'catalina|tomcat'|grep-i'jmxremote'||echo"JMX远程未启用"
# 检查是否配置堆外内存限制
ps aux |grepjava|grep-E'catalina|tomcat'|grep-o'\-XX:MaxDirectMemorySize[^ ]*'
# 检查是否启用类卸载(防止PermGen/Metaspace溢出)
ps aux |grepjava|grep-E'catalina|tomcat'|grep-o'\-XX:+UseG1GC\|-XX:+CMSClassUnloadingEnabled'
2.3 默认配置清理
# 检查是否删除默认应用
echo"=== 检查默认应用 ==="
ls$CATALINA_HOME/webapps/ |grep-E'docs|examples|host-manager|manager|ROOT'
# 生产环境应保留ROOT(如需要)但清理内容,删除docs/examples/host-manager/manager
# 检查ROOT应用内容
ls-la$CATALINA_HOME/webapps/ROOT/ 2>/dev/null |head-10
# 检查是否删除示例Servlet
find$CATALINA_HOME/webapps -name"*.java"-o-name"*.class"2>/dev/null |grep-i'example\|test'|head-5
# 检查是否配置自定义错误页面(隐藏版本信息)
cat$CATALINA_HOME/conf/web.xml |grep-A10'error-page'
# 检查是否禁用目录列表
cat$CATALINA_HOME/conf/web.xml |grep-A5'listings'|head-10
# DefaultServlet的listings参数应为false
# 检查是否配置MIME类型安全
cat$CATALINA_HOME/conf/web.xml |grep-A3'mime-mapping'|head-20
# 检查是否删除不必要的示例配置
ls$CATALINA_HOME/conf/ |grep-i'example\|sample'
三、安全审计(8.1.4.3)
3.1 日志配置与审计
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 访问日志启用 | cat $CATALINA_HOME/conf/server.xml | grep -A 5 'AccessLogValve' | 启用,记录客户端IP、方法、URI、状态码 |
| 日志格式完整 | cat $CATALINA_HOME/conf/server.xml | grep 'pattern=' | 包含%a(远程IP)、%t(时间)、%m(方法)、%U(URI)、%s(状态码) |
| 日志保留策略 | find $CATALINA_HOME/logs -name "*.log" -mtime +30 | wc -l | 保留≥6个月 |
| 错误日志审计 | cat $CATALINA_HOME/conf/logging.properties | grep 'level' | INFO或FINE级别 |
日志配置核查:
# 查看AccessLogValve配置
cat$CATALINA_HOME/conf/server.xml |grep-B2-A10'AccessLogValve'
# 检查日志格式(关键字段)
cat$CATALINA_HOME/conf/server.xml |grep'AccessLogValve'|grep-o'pattern="[^"]*"'
# 应包含:%h或%a(客户端IP)、%l(远程登录名)、%u(认证用户)、%t(时间)、%r(请求行)、%s(状态码)、%b(响应大小)
# 推荐格式(JSON或扩展格式):
# pattern="%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i" %D"
# 查看日志目录配置
cat $CATALINA_HOME/conf/server.xml | grep 'AccessLogValve' | grep -o 'directory="[^"]*"'
# 检查日志前缀和后缀
cat $CATALINA_HOME/conf/server.xml | grep 'AccessLogValve' | grep -o 'prefix="[^"]*"'
cat $CATALINA_HOME/conf/server.xml | grep 'AccessLogValve' | grep -o 'suffix="[^"]*"'
# 检查是否启用请求属性日志(X-Forwarded-For等)
cat $CATALINA_HOME/conf/server.xml | grep 'AccessLogValve' | grep -o 'requestAttributesEnabled="[^"]*"'
# 查看日志文件
ls -la $CATALINA_HOME/logs/ | grep access
tail -20 $CATALINA_HOME/logs/localhost_access_log.*.txt 2>/dev/null | head -20
# 检查日志轮转(通过cronolog或rotatelogs)
cat $CATALINA_HOME/conf/server.xml | grep -o 'rotatelogs\|cronolog'
# 查看日志级别配置
cat $CATALINA_HOME/conf/logging.properties | grep -v '^#' | grep -v '^$' | head -20
# 检查是否配置Handler级别
cat$CATALINA_HOME/conf/logging.properties |grep'level'
3.2 错误日志与审计
# 查看Catalina日志(系统事件)
tail-50$CATALINA_HOME/logs/catalina.out 2>/dev/null ||tail-50$CATALINA_HOME/logs/catalina.$(date +%Y-%m-%d).log 2>/dev/null
# 查看Host日志
tail-20$CATALINA_HOME/logs/localhost.$(date +%Y-%m-%d).log 2>/dev/null
# 查看Manager应用日志
tail-20$CATALINA_HOME/logs/manager.$(date +%Y-%m-%d).log 2>/dev/null ||echo"Manager日志不存在"
# 查看Host-Manager日志
tail-20$CATALINA_HOME/logs/host-manager.$(date +%Y-%m-%d).log 2>/dev/null ||echo"Host-Manager日志不存在"
# 搜索安全相关事件
echo"=== 认证失败 ==="
grep-i'failed\|authentication\|unauthorized'$CATALINA_HOME/logs/catalina.*.log 2>/dev/null |tail-10
echo"=== 部署事件 ==="
grep-i'deploy\|undeploy\|upload'$CATALINA_HOME/logs/manager.*.log 2>/dev/null |tail-10
# 查看访问日志中的异常状态码
echo"=== HTTP 4xx/5xx错误 ==="
tail-1000$CATALINA_HOME/logs/localhost_access_log.*.txt 2>/dev/null |awk'$9 ~ /^4|^5/ {print}'|tail-20
四、入侵防范(8.1.4.4)
4.1 服务加固与组件管理
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 版本检查 | cat $CATALINA_HOME/RELEASE-NOTES | head -5 | 使用9.0.70+/8.5.85+,无已知CVE |
| 禁用不用的连接器 | cat $CATALINA_HOME/conf/server.xml | grep '<Connector' | 仅保留HTTP/HTTPS必要端口 |
| 关闭端口安全 | cat $CATALINA_HOME/conf/server.xml | grep 'port="8005"' | 修改shutdown命令或禁用 |
| AJP安全 | cat $CATALINA_HOME/conf/server.xml | grep -A 5 'AJP/1.3' | 配置secret或绑定本地 |
Tomcat加固核查:
# 查看Tomcat版本(检查CVE漏洞)
VERSION=$(cat $CATALINA_HOME/RELEASE-NOTES 2>/dev/null |grep"Apache Tomcat Version"|awk'{print $NF}')
echo"Tomcat版本: $VERSION"
# 检查是否为漏洞版本:8.5.0-8.5.50, 9.0.0-9.0.30, 9.0.0.M1-9.0.31等(Ghostcat等漏洞)
# 查看连接器配置
cat$CATALINA_HOME/conf/server.xml |grep-E'<Connector'|grep-v'^<!--'
# 检查HTTP连接器端口
cat$CATALINA_HOME/conf/server.xml |grep-A5'protocol="HTTP/1.1"\|protocol="org.apache.coyote.http11.Http11NioProtocol"'|head-10
# 检查HTTPS连接器配置
cat$CATALINA_HOME/conf/server.xml |grep-A10'SSLEnabled="true"\|scheme="https"'
# 检查AJP连接器(如必须使用)
cat$CATALINA_HOME/conf/server.xml |grep-B2-A10'protocol="AJP/1.3"\|protocol="org.apache.coyote.ajp.AjpNioProtocol"'
# 检查AJP secret配置(关键安全项)
cat$CATALINA_HOME/conf/server.xml |grep-A10'AJP/1.3'|grep-E'secretRequired|secret='
# 检查Shutdown端口
cat$CATALINA_HOME/conf/server.xml |grep-A3'port="8005"'
SHUTDOWN_CMD=$(cat $CATALINA_HOME/conf/server.xml |grep'port="8005"'|grep-o'shutdown="[^"]*"'|cut -d'"'-f2)
if["$SHUTDOWN_CMD"="SHUTDOWN"]||[-z"$SHUTDOWN_CMD"];then
echo"⚠ 警告: 使用默认shutdown命令SHUTDOWN"
else
echo"Shutdown命令已自定义: $SHUTDOWN_CMD"
fi
# 检查是否禁用不必要组件
cat$CATALINA_HOME/conf/server.xml |grep-E'org.apache.catalina.valves.JDBCAccessLogValve|org.apache.catalina.storeconfig.StoreLoader'
# 检查是否配置连接超时
cat$CATALINA_HOME/conf/server.xml |grep-E'connectionTimeout|keepAliveTimeout|maxKeepAliveRequests'
# 检查是否限制上传大小
cat$CATALINA_HOME/conf/server.xml |grep-E'maxPostSize|maxSavePostSize'
cat$CATALINA_HOME/conf/web.xml |grep-A5'multipart-config'2>/dev/null ||echo"未配置multipart限制"
4.2 SSL/TLS配置
# 查看HTTPS连接器详细配置
cat$CATALINA_HOME/conf/server.xml |grep-A15'SSLEnabled="true"'
# 检查SSL协议版本(应禁用TLSv1.0/1.1)
cat$CATALINA_HOME/conf/server.xml |grep-i'sslProtocol\|sslEnabledProtocols'
# 应配置:sslEnabledProtocols="TLSv1.2,TLSv1.3"
# 检查加密套件配置
cat$CATALINA_HOME/conf/server.xml |grep-i'ciphers'
# 检查证书配置
cat$CATALINA_HOME/conf/server.xml |grep-i'keystoreFile\|keystorePass\|keyAlias'
# 检查是否使用APR/OpenSSL(性能和安全更好)
cat$CATALINA_HOME/conf/server.xml |grep-i'AprLifecycleListener\|SSLRandomSeed'
# 查看证书文件
ls-la$CATALINA_HOME/conf/*.jks $CATALINA_HOME/conf/*.p12 $CATALINA_HOME/conf/*.pfx 2>/dev/null
# 验证证书有效期
if[-f"$CATALINA_HOME/conf/keystore.jks"];then
keytool -list-v-keystore$CATALINA_HOME/conf/keystore.jks 2>/dev/null |grep-E'Valid from|Alias name'|head-10
fi
4.3 防火墙与网络防护
# 查看防火墙状态
systemctl status firewalld 2>/dev/null || systemctl status ufw 2>/dev/null || iptables -L-n|head-10
# 检查Tomcat端口访问限制
iptables -L-n|grep-E':8080|:8443|:8009|:8005'
# 检查是否配置RemoteIpValve(获取真实客户端IP)
cat$CATALINA_HOME/conf/server.xml |grep-A5'RemoteIpValve'
# 检查是否配置错误页面Valve
cat$CATALINA_HOME/conf/server.xml |grep-A5'ErrorReportValve'
# 检查是否禁用显示异常信息
cat$CATALINA_HOME/conf/server.xml |grep-A5'ErrorReportValve'|grep-i'showReport\|showServerInfo'
# 检查是否配置限速(通过过滤器或前端Nginx/Apache)
cat$CATALINA_HOME/conf/web.xml |grep-A10'filter.*limit\|filter.*throttle'2>/dev/null ||echo"未配置内置限速"
# 查看当前连接
ss -tulnp|grepjava|grep-E':8080|:8443|:8009'
netstat-tulnp2>/dev/null |grepjava|grep-E':8080|:8443|:8009'
五、恶意代码防范(8.1.4.5)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 部署包扫描 | clamscan $CATALINA_HOME/webapps/ | 无病毒,定期扫描 |
| 上传目录限制 | find $CATALINA_HOME/webapps -type d -name "upload|temp" | 禁止JSP执行,限制文件类型 |
| 序列化过滤 | cat $CATALINA_HOME/conf/web.xml | grep -i 'serial' | 启用JEP 290或Tomcat特定过滤 |
恶意代码防范核查:
# 检查是否安装杀毒软件
which clamscan && clamscan --version
systemctl status clamav-daemon 2>/dev/null ||echo"ClamAV未运行"
# 扫描部署目录
clamscan -r--exclude="*.war"$CATALINA_HOME/webapps/ 2>/dev/null |tail-10
# 检查WAR文件(上传前扫描)
forwarin$(find $CATALINA_HOME/webapps -name"*.war"2>/dev/null);do
echo"检查WAR: $war"
unzip-l"$war"|grep-E'\.jsp|\.class|WEB-INF/web.xml'|head-10
done
# 检查上传目录配置(应用层实现)
find$CATALINA_HOME/webapps -type d \(-name"upload"-o-name"temp"-o-name"tmp"\)2>/dev/null |whilereaddir;do
echo"=== $dir ==="
ls-la"$dir"|head-5
# 检查是否有JSP文件(高风险)
find"$dir"-name"*.jsp"2>/dev/null |head-5
done
# 检查Java序列化过滤(JEP 290)
cat$CATALINA_HOME/bin/setenv.sh 2>/dev/null |grep'jdk.serialFilter'
cat$CATALINA_HOME/conf/catalina.properties |grep'jdk.serialFilter'
# 检查Tomcat特定的序列化过滤器(9.0.1+)
cat$CATALINA_HOME/conf/web.xml |grep-A10'filter.*serial\|filter-class.*SerialFilter'
# 检查是否配置WatchedResource(防止恶意修改)
cat$CATALINA_HOME/conf/context.xml |grep-i'WatchedResource'
# 检查是否启用防跨站脚本过滤器
cat$CATALINA_HOME/conf/web.xml |grep-A10'filter.*xss\|filter-class.*XSS'
# 检查是否启用CSRF保护
cat$CATALINA_HOME/conf/web.xml |grep-A10'filter.*csrf\|CsrfPreventionFilter'
六、可信验证(8.1.4.6)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 安装包完整性 | sha256sum $CATALINA_HOME/lib/catalina.jar | 与官方发布值比对 |
| 模块签名验证 | jarsigner -verify $CATALINA_HOME/lib/catalina.jar | 已验证 |
| 配置文件基线 | sha256sum $CATALINA_HOME/conf/server.xml | 基线比对 |
可信验证核查:
# 验证核心JAR签名
jarsigner -verify$CATALINA_HOME/lib/catalina.jar 2>/dev/null |head-5
jarsigner -verify$CATALINA_HOME/bin/bootstrap.jar 2>/dev/null |head-5
# 计算核心文件哈希
sha256sum $CATALINA_HOME/lib/catalina.jar
sha256sum $CATALINA_HOME/bin/bootstrap.jar
# 验证所有JAR签名(耗时较长)
# find $CATALINA_HOME/lib -name "*.jar" -exec jarsigner -verify {} \; 2>/dev/null | grep -v 'jar verified'
# 配置文件基线比对
sha256sum $CATALINA_HOME/conf/server.xml > /tmp/server.xml.baseline 2>/dev/null
# 定期比对:diff <(sha256sum $CATALINA_HOME/conf/server.xml) /tmp/server.xml.baseline
# 检查是否使用官方源安装
ls-la$CATALINA_HOME/NOTICE 2>/dev/null
cat$CATALINA_HOME/RELEASE-NOTES |head-10
# 检查是否修改过核心类(通过校验和)
find$CATALINA_HOME/lib -name"*.jar"-exec sha256sum {}\;> /tmp/tomcat-lib-baseline.txt 2>/dev/null
# 查看安全补丁历史(通过版本)
curl-s"https://tomcat.apache.org/security-9.html"2>/dev/null |grep-i"$VERSION"|head-5||echo"无法获取安全公告"
# 检查是否启用安全启动(如适用)
mokutil --sb-state 2>/dev/null ||echo"非UEFI系统"
七、数据备份与恢复(8.1.4.9)
| 控制项 | 测评命令 | 达标判据 |
|---|---|---|
| 配置备份 | ls -la /backup/tomcat/conf/ | 定期备份server.xml等 |
| 部署包备份 | ls -la /backup/tomcat/webapps/ | 保留历史版本WAR |
| 日志备份 | ls -la /backup/tomcat/logs/ | 归档访问日志 |
备份与恢复核查:
# 查看备份脚本
cat /etc/cron.d/tomcat-backup 2>/dev/null ||crontab-l|grep tomcat
# 手动备份配置
mkdir-p /backup/tomcat/conf-$(date +%F)
cp$CATALINA_HOME/conf/server.xml /backup/tomcat/conf-$(date +%F)/
cp$CATALINA_HOME/conf/web.xml /backup/tomcat/conf-$(date +%F)/
cp$CATALINA_HOME/conf/tomcat-users.xml /backup/tomcat/conf-$(date +%F)/
cp$CATALINA_HOME/conf/context.xml /backup/tomcat/conf-$(date +%F)/
# 备份部署包
mkdir-p /backup/tomcat/webapps-$(date +%F)
cp-r$CATALINA_HOME/webapps/*.war /backup/tomcat/webapps-$(date +%F)/ 2>/dev/null ||echo"无WAR文件"
# 备份日志
mkdir-p /backup/tomcat/logs-$(date +%F)
find$CATALINA_HOME/logs -name"*.txt"-mtime-1-execcp{} /backup/tomcat/logs-$(date +%F)/ \;
# 验证备份完整性
ls-la /backup/tomcat/
# 测试恢复流程(创建测试实例)
# mkdir -p /tmp/tomcat-test
# cp /backup/tomcat/conf-20240101/server.xml /tmp/tomcat-test/
# $CATALINA_HOME/bin/configtest.sh # 验证配置
# 检查是否配置会话持久化(集群环境)
cat$CATALINA_HOME/conf/context.xml |grep-A5'Manager'|grep-i'persistent\|Store'
# 查看会话存储目录(如启用)
ls-la$CATALINA_HOME/work/Catalina/localhost/_/SESSIONS.ser 2>/dev/null ||echo"无会话序列化文件"
八、集群与高可用安全(扩展)
8.1 Cluster配置安全
# 查看Cluster配置(如使用)
cat$CATALINA_HOME/conf/server.xml |grep-A30'<Cluster'
# 检查Cluster通道配置
cat$CATALINA_HOME/conf/server.xml |grep-A10'Cluster.*Channel'
# 检查是否配置加密传输(DeltaManager/BackupManager)
cat$CATALINA_HOME/conf/server.xml |grep-A20'Cluster'|grep-i'encrypt\|ssl\|cipher'
# 检查Membership配置(组播安全)
cat$CATALINA_HOME/conf/server.xml |grep-A10'Membership'|grep-i'domain\|address'
# 检查Receiver配置(绑定地址)
cat$CATALINA_HOME/conf/server.xml |grep-A10'Receiver'|grep-i'address\|port'
# 检查Sender配置(超时和重试)
cat$CATALINA_HOME/conf/server.xml |grep-A10'Sender'|grep-i'timeout\|retry'
# 查看FarmWarDeployer(集群部署)
cat$CATALINA_HOME/conf/server.xml |grep-A10'FarmWarDeployer'
8.2 Session复制安全
# 检查Session管理器配置
cat$CATALINA_HOME/conf/context.xml |grep-A10'Manager'|head-20
# 检查是否使用PersistentManager(文件/数据库存储)
cat$CATALINA_HOME/conf/context.xml |grep-A10'PersistentManager'
# 检查Store配置(JDBC或文件)
cat$CATALINA_HOME/conf/context.xml |grep-A5'JDBCStore\|FileStore'
# 检查Session Cookie配置(集群环境)
cat$CATALINA_HOME/conf/context.xml |grep-i'sessionCookieDomain\|sessionCookiePath\|sessionCookieName'
一键巡检脚本(Tomcat)
#!/bin/bash
# Tomcat 等保三级一键巡检脚本
# 适用:Tomcat 8.5/9.0/10.1
# 执行用户:tomcat或root
exportCATALINA_HOME=${CATALINA_HOME:-/opt/tomcat}
echo"===== Tomcat 等保巡检报告 ====="
echo"巡检时间: $(date'+%Y-%m-%d %H:%M:%S')"
echo"服务器: $(hostname)"
echo"Tomcat Home: $CATALINA_HOME"
echo""
echo"===== 1 身份鉴别 ====="
echo"--- 管理用户检查 ---"
if[-f"$CATALINA_HOME/conf/tomcat-users.xml"];then
USERS=$(grep'user username=' $CATALINA_HOME/conf/tomcat-users.xml |grep-v'<!--')
echo"配置用户数: $(echo"$USERS"|wc-l)"
# 检查弱密码
WEAK=$(echo"$USERS"|grep-E'password="[^$][^"]{0,7}"'|wc-l)
if["$WEAK"-gt0];then
echo"⚠ 发现可能的弱密码: $WEAK 个"
else
echo"密码强度: ✓(无明显的明文短密码)"
fi
# 检查默认账户
ifecho"$USERS"|grep-qE'username="(admin|tomcat|manager|root)"';then
echo"⚠ 发现默认风格用户名"
else
echo"默认账户检查: ✓"
fi
else
echo"tomcat-users.xml不存在"
fi
echo"--- 管理应用检查 ---"
if[-d"$CATALINA_HOME/webapps/manager"]||[-d"$CATALINA_HOME/webapps/host-manager"];then
echo"⚠ 管理应用存在: $(ls $CATALINA_HOME/webapps/ |grep-E'manager|host-manager')"
else
echo"管理应用已删除: ✓"
fi
echo"--- Realm配置 ---"
ifgrep-q'LockOutRealm'$CATALINA_HOME/conf/server.xml;then
echo"账户锁定Realm: ✓"
else
echo"账户锁定Realm: ✗(建议配置LockOutRealm)"
fi
ifgrep-q'CredentialHandler'$CATALINA_HOME/conf/server.xml;then
echo"密码加密: ✓"
else
echo"密码加密: ✗(未配置CredentialHandler)"
fi
echo""
echo"===== 2 访问控制 ====="
echo"--- 目录权限 ---"
stat-c'%a %U:%G'$CATALINA_HOME/webapps/
stat-c'%a %U:%G'$CATALINA_HOME/conf/
stat-c'%a %U:%G'$CATALINA_HOME/logs/
echo"--- 运行用户 ---"
RUN_USER=$(ps aux |grepjava|grep-E'catalina|tomcat'|grep-vgrep|awk'{print $1}'|head-1)
echo"运行用户: $RUN_USER"
if["$RUN_USER"="root"];then
echo"⚠ 警告: 以root运行"
fi
echo"--- 默认应用清理 ---"
ls$CATALINA_HOME/webapps/ |grep-E'docs|examples'&&echo"⚠ 存在docs/examples"||echo"默认应用已清理: ✓"
echo""
echo"===== 3 安全审计 ====="
echo"--- 访问日志 ---"
ifgrep-q'AccessLogValve'$CATALINA_HOME/conf/server.xml;then
echo"访问日志: ✓"
grep'AccessLogValve'$CATALINA_HOME/conf/server.xml |grep-o'pattern="[^"]*"'|head-1
else
echo"访问日志: ✗"
fi
echo"--- 日志文件 ---"
ls-la$CATALINA_HOME/logs/*.txt 2>/dev/null |tail-3
ls-la$CATALINA_HOME/logs/catalina.*.log 2>/dev/null |tail-1
echo""
echo"===== 4 入侵防范 ====="
echo"--- 版本信息 ---"
cat$CATALINA_HOME/RELEASE-NOTES 2>/dev/null |grep"Apache Tomcat Version"|head-1
echo"--- 连接器配置 ---"
grep-E'<Connector'$CATALINA_HOME/conf/server.xml |grep-v'^<!--'|wc-l|xargs-I{}echo"启用连接器数: {}"
echo"--- AJP检查 ---"
ifgrep-q'protocol="AJP/1.3"'$CATALINA_HOME/conf/server.xml;then
echo"⚠ AJP连接器启用"
ifgrep-A5'AJP/1.3'$CATALINA_HOME/conf/server.xml |grep-q'secretRequired="true"';then
echo" secretRequired: ✓"
else
echo" secretRequired: ✗(高风险)"
fi
else
echo"AJP已禁用: ✓"
fi
echo"--- Shutdown端口 ---"
SHUTDOWN=$(grep'port="8005"' $CATALINA_HOME/conf/server.xml |grep-o'shutdown="[^"]*"'|cut -d'"'-f2)
if["$SHUTDOWN"="SHUTDOWN"];then
echo"⚠ 使用默认shutdown命令SHUTDOWN"
else
echo"Shutdown命令已自定义: ✓"
fi
echo"--- HTTPS检查 ---"
ifgrep-q'SSLEnabled="true"'$CATALINA_HOME/conf/server.xml;then
echo"HTTPS已配置: ✓"
else
echo"HTTPS未配置: ✗"
fi
echo""
echo"===== 5 数据备份 ====="
ls-la /backup/tomcat/ 2>/dev/null |head-5||echo"备份目录不存在"
echo""
echo"===== 6 高风险项汇总 ====="
RISKS=0
# 检查1: 管理应用存在
if[-d"$CATALINA_HOME/webapps/manager"];then
echo"✗ 高风险: manager应用未删除"
((RISKS++))
fi
# 检查2: 默认shutdown命令
if["$SHUTDOWN"="SHUTDOWN"];then
echo"✗ 高风险: 默认shutdown命令"
((RISKS++))
fi
# 检查3: AJP无secret
ifgrep-q'protocol="AJP/1.3"'$CATALINA_HOME/conf/server.xml &&!grep-A5'AJP/1.3'$CATALINA_HOME/conf/server.xml |grep-q'secretRequired="true"';then
echo"✗ 高风险: AJP未配置secret"
((RISKS++))
fi
# 检查4: root运行
if["$RUN_USER"="root"];then
echo"✗ 高风险: 以root运行"
((RISKS++))
fi
# 检查5: 明文密码
ifgrep-q'password="[^$]'$CATALINA_HOME/conf/tomcat-users.xml 2>/dev/null;then
echo"⚠ 中风险: 可能存在明文密码"
fi
if["$RISKS"-eq0];then
echo"未发现高风险项 ✓"
else
echo"发现 $RISKS 项高风险,请立即整改"
fi
echo""
echo"===== 巡检完成 ====="
高风险项重点核查清单
| 检查项 | 验证命令 | 不合规判定 | 整改建议 |
|---|---|---|---|
| 管理应用未删除 | ls $CATALINA_HOME/webapps/manager | 目录存在 | 删除manager和host-manager应用 |
| 默认shutdown命令 | grep 'shutdown=' $CATALINA_HOME/conf/server.xml | shutdown=”SHUTDOWN” | 修改为随机字符串或禁用端口 |
| AJP未配置secret | grep -A 5 'AJP/1.3' server.xml | grep secretRequired | 未配置或false | 设置secretRequired=”true”和secret属性 |
| 管理接口无IP限制 | cat conf/Catalina/localhost/manager.xml | 无RemoteAddrValve | 配置IP白名单 |
| 使用默认账户 | grep 'username=' tomcat-users.xml | 存在admin/tomcat/manager | 删除默认用户,创建强密码新用户 |
| 明文存储密码 | grep 'password=' tomcat-users.xml | 非哈希密码(不以$开头) | 配置CredentialHandler使用SHA-256/PBKDF2 |
| 未启用访问日志 | grep 'AccessLogValve' server.xml | 无输出 | 配置AccessLogValve |
| 以root运行 | ps aux | grep java | 用户为root | 创建tomcat专用用户 |
| 未配置HTTPS | grep 'SSLEnabled' server.xml | 无SSLEnabled=”true” | 配置SSL证书和HTTPS连接器 |
| 弱SSL协议 | grep 'sslEnabledProtocols' server.xml | 包含TLSv1.0/TLSv1.1 | 仅启用TLSv1.2+ |
| 目录浏览启用 | grep 'listings' conf/web.xml | listings为true | 设置为false |
| 示例应用存在 | ls webapps/docs examples | 目录存在 | 删除docs和examples |
Tomcat版本差异对照
| 功能项 | Tomcat 8.5 | Tomcat 9.0 | Tomcat 10.1 |
|---|---|---|---|
| Servlet规范 | 3.1 | 4.0 | 6.0 |
| JSP规范 | 2.3 | 2.3 | 3.1 |
| 默认HTTP连接器 | NIO | NIO | NIO |
| AJP默认secret | 8.5.51+要求 | 9.0.31+要求 | 始终要求 |
| 嵌入式支持 | 基础 | 改进 | 完整 |
| 日志框架 | JULI | JULI | JULI |
| 等保合规 | 需大量加固 | 基础合规 | 完整合规 |
| Jakarta EE命名空间 | javax | javax | jakarta |
测评执行要点
1. 权限要求
- 所有命令需
tomcat或root用户执行 - 部分配置检查需Tomcat实例停止以确保安全
2. 现场核查重点
- 管理应用安全:生产环境必须删除或严格限制manager/host-manager,配置IP白名单和强密码
- AJP连接器:如必须使用AJP,必须配置secretRequired=”true”和复杂secret(Ghostcat漏洞防护)
- Shutdown端口:必须修改默认shutdown命令或设置端口为-1禁用
- 密码存储:严禁明文密码,必须使用CredentialHandler(SHA-256/ PBKDF2)
3. 版本差异注意
- Tomcat 8.5.51-/9.0.31-:存在Ghostcat漏洞(CVE-2020-1938),AJP默认不强制secret
- Tomcat 9.0+:支持Servlet 4.0,改进了HTTP/2支持
- Tomcat 10.1+:使用jakarta.命名空间,不再使用javax.,配置方式有变化
常用命令速查
# 启动与停止
$CATALINA_HOME/bin/startup.sh # 启动
$CATALINA_HOME/bin/shutdown.sh # 停止
$CATALINA_HOME/bin/catalina.sh run # 前台运行(调试)
# 配置测试
$CATALINA_HOME/bin/configtest.sh # 验证配置文件
# 版本信息
$CATALINA_HOME/bin/version.sh # 显示版本
# 线程Dump(故障排查)
kill-3$(pgrep -f'catalina')# 生成thread dump
jstack $(pgrep -f'catalina')> /tmp/threaddump.txt # 使用jstack
# 堆Dump(内存分析)
jmap -dump:format=b,file=/tmp/heapdump.hprof $(pgrep -f'catalina')
# GC日志分析
tail-f$CATALINA_HOME/logs/catalina.out |grep-i'gc\|heap'
# 访问日志分析
awk'{print $1}'$CATALINA_HOME/logs/localhost_access_log.*.txt |sort|uniq-c|sort-rn|head-20# TOP 20 IP
awk'{print $9}'$CATALINA_HOME/logs/localhost_access_log.*.txt |sort|uniq-c|sort-rn# 状态码统计
# 实时日志监控
tail-f$CATALINA_HOME/logs/catalina.out
tail-f$CATALINA_HOME/logs/localhost_access_log.$(date +%Y-%m-%d).txt
# 部署应用
cp application.war $CATALINA_HOME/webapps/
# 或
curl --upload-file application.war "http://admin:password@localhost:8080/manager/text/deploy?path=/app&update=true"
# 查看JMX信息(如启用)
jconsole $(pgrep -f'catalina')# 图形界面
jcmd $(pgrep -f'catalina') VM.version # 命令行
参考标准:GB/T 22239-2019、GB/T 28448-2019、Apache Tomcat Security Considerations、CIS Apache Tomcat Benchmark
适用版本:Tomcat 8.5.85+ / 9.0.70+ / 10.1.0+
验证环境:Standalone / Cluster (DeltaManager/BackupManager) / Embedded 模式
声明:来自汪汪虚拟空间,仅代表创作者观点。链接:https://eyangzhen.com/6940.html