一、权限与所有权管理
在CentOS系统中,Tomcat日志文件(如catalina.out、localhost_access_log.*.txt等)需严格限制访问权限,防止未授权读取或篡改。首先,将日志文件的所有者设为Tomcat运行用户(通常为tomcat),所属组也设为tomcat,并设置合理权限:
sudo chown -R tomcat:tomcat /opt/tomcat/logs # 假设Tomcat安装在/opt/tomcat
sudo chmod -R 750 /opt/tomcat/logs # 所有者可读写执行,组可读执行,其他用户无权限
对于catalina.out等关键日志,可通过修改catalina.sh脚本中的UMASK值(如UMASK=0027),控制新生成日志的默认权限(640:所有者可读写,组可读,其他用户无权限)。
二、日志级别与内容控制
调整日志级别,避免记录过多敏感信息(如调试细节)。编辑conf/logging.properties文件,将全局日志级别设置为WARN(仅记录警告及以上级别信息),或针对特定包(如org.apache.catalina)设置更严格的级别:
handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
.level = WARN
1catalina.org.apache.juli.FileHandler.level = WARN
java.util.logging.ConsoleHandler.level = WARN
同时,隐藏Tomcat版本信息,修改conf/server.xml中的AccessLogValve配置,移除Server响应头(通过server.xml的<Connector>标签添加server=" "),避免暴露Tomcat版本给攻击者。
三、日志文件轮转与清理
使用logrotate工具自动分割、压缩和清理旧日志,防止日志文件过大占用磁盘空间或包含过多历史敏感信息。创建/etc/logrotate.d/tomcat配置文件,内容如下:
/opt/tomcat/logs/catalina.out {
daily # 每天轮转
missingok # 日志不存在时不报错
rotate 7 # 保留7天日志
compress # 压缩旧日志(如catalina.out.1.gz)
notifempty # 日志为空时不轮转
copytruncate # 复制原日志后清空,避免重启Tomcat
}
测试配置是否正确:logrotate -d /etc/logrotate.d/tomcat(模拟运行),确认无误后手动触发:logrotate -f /etc/logrotate.d/tomcat。
四、访问控制与审计
firewalld)限制访问Tomcat日志文件的IP地址。例如,仅允许管理服务器(192.168.1.100)访问日志目录:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" access to directory "/opt/tomcat/logs" permit'
sudo firewall-cmd --reload
getenforce返回Enforcing),需调整策略允许Tomcat用户访问日志文件。使用audit2allow工具生成自定义策略:sudo ausearch -c 'java' --raw | audit2allow -M my-tomcat-log
sudo semodule -i my-tomcat-log.pp
auditd服务,记录对Tomcat日志文件的访问(如读取、修改)。编辑/etc/audit/audit.rules,添加以下规则:-w /opt/tomcat/logs/catalina.out -p war -k tomcat_log_access
-w /opt/tomcat/logs/localhost_access_log.*.txt -p war -k tomcat_access_log
重启auditd服务:sudo systemctl restart auditd,通过ausearch -k tomcat_log_access查看审计日志。
五、第三方日志管理与监控
使用集中式日志管理工具(如ELK Stack、Filebeat)收集、分析和可视化Tomcat日志,便于及时发现异常。以Filebeat为例,安装后配置/etc/filebeat/filebeat.yml,监控Tomcat日志目录并输出到Elasticsearch:
filebeat.inputs:
- type: log
enabled: true
paths:
- /opt/tomcat/logs/catalina.out
- /opt/tomcat/logs/localhost_access_log.*.txt
processors:
- add_cloud_metadata: ~
output.elasticsearch:
hosts: ["localhost:9200"]
index: "tomcat-logs-%{+yyyy.MM.dd}"
启动Filebeat并设置开机自启:sudo systemctl start filebeat && sudo systemctl enable filebeat。通过Kibana查看日志,配置警报规则(如“5分钟内出现10次404错误”)。
六、其他安全措施
localhost_access_log(记录访问详情),在conf/server.xml中注释AccessLogValve配置:<!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" /> -->