等保测评命令——tomcat

各位大佬,想看那种网络设备/操作系统/数据库/中间件的测评命令清单,可在留言区留言,我会以最快速度给你们总结,然后发出来!

依据 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 &quot;%r&quot; %s %b &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; %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.xmlshutdown=”SHUTDOWN”修改为随机字符串或禁用端口
AJP未配置secretgrep -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专用用户
未配置HTTPSgrep 'SSLEnabled' server.xml无SSLEnabled=”true”配置SSL证书和HTTPS连接器
弱SSL协议grep 'sslEnabledProtocols' server.xml包含TLSv1.0/TLSv1.1仅启用TLSv1.2+
目录浏览启用grep 'listings' conf/web.xmllistings为true设置为false
示例应用存在ls webapps/docs examples目录存在删除docs和examples

Tomcat版本差异对照

功能项Tomcat 8.5Tomcat 9.0Tomcat 10.1
Servlet规范3.14.06.0
JSP规范2.32.33.1
默认HTTP连接器NIONIONIO
AJP默认secret8.5.51+要求9.0.31+要求始终要求
嵌入式支持基础改进完整
日志框架JULIJULIJULI
等保合规需大量加固基础合规完整合规
Jakarta EE命名空间javaxjavaxjakarta

测评执行要点

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

汪汪虚拟空间的头像汪汪虚拟空间

相关推荐

添加微信
添加微信
Ai学习群
返回顶部