1. 权限与访问控制:限制日志文件的可访问性
在CentOS中,需通过文件系统权限和SELinux策略严格限制日志文件的访问范围。首先,创建专用日志目录(如/var/log/java-app),并将所有权赋予运行Java应用的用户(如java-app),设置权限为750(所有者可读写执行,组用户可读执行,其他用户无权限):
sudo mkdir -p /var/log/java-app
sudo chown -R java-app:java-app /var/log/java-app
sudo chmod -R 750 /var/log/java-app
其次,启用SELinux并配置自定义策略,仅允许授权用户或进程访问日志文件。例如,通过audit2allow工具生成策略,解决SELinux的AVC拒绝问题,或手动创建策略模块限制访问。
2. 敏感信息过滤与脱敏:防止隐私数据泄露
在Java应用中,需避免直接记录敏感信息(如密码、信用卡号、身份证号)。可通过以下方式实现:
password=123456替换为password=****);SensitiveDataFilter)自动拦截包含敏感关键词的日志;DailyRollingFileAppender或PatternLayout,在日志写入前对消息进行脱敏处理(如掩码手机号、身份证号)。3. 日志加密:保护日志文件的存储安全
对日志文件进行加密,防止未授权用户读取。常见方法包括:
eCryptfs或EncFS加密日志目录,将日志存储在加密容器中;log4j-encryption插件或Logback的Encryption配置,对日志文件进行加密(需设置密钥);GnuPG(gpg命令)或Logstash的gpg编解码器,对日志文件进行对称加密(如AES256)。4. 日志轮转与归档:防止日志文件过度积累
配置日志轮转策略,自动管理日志文件的大小和数量,避免过期日志占用磁盘空间或成为攻击目标。可使用logrotate工具,创建配置文件(如/etc/logrotate.d/java-app),设置每日轮转、保留30天历史、压缩旧日志等参数:
/var/log/java-app/*.log {
daily
rotate 30
compress
missingok
notifempty
create 640 java-app java-app
postrotate
/bin/kill -HUP $(cat /var/run/java-app.pid 2>/dev/null) 2>/dev/null || true
endscript
}
对于加密日志,可在postrotate脚本中调用gpg命令自动加密轮转后的日志。
5. 监控与审计:追踪日志访问行为
通过监控工具记录日志文件的访问和修改行为,及时发现异常。使用auditd工具添加审计规则,监控日志目录的读写操作:
sudo yum install audit
sudo auditctl -w /var/log/java-app/application.log -p wa -k java-app-log-access
审计日志会记录到/var/log/audit/audit.log中,可通过ausearch命令查询特定事件(如ausearch -k java-app-log-access)。
6. 合规管理与备份:确保日志安全可追溯
遵循隐私法规(如GDPR、CCPA),对日志进行合规管理。定期备份日志文件到安全存储(如NAS、云存储),并清理过期日志(如超过90天的日志)。备份可通过cron定时任务实现,例如每天凌晨备份日志到/backup/java-logs:
0 2 * * * tar -czvf /backup/java-logs/$(date +\%Y-\%m-\%d).tar.gz /var/log/java-app/
同时,确保备份文件也经过加密和权限控制。