auditd是Linux系统原生安全审计工具,可跟踪对Java日志文件的访问、修改等操作,确保日志完整性。
yum安装auditd,启动服务并设置开机自启:sudo yum install audit -y
sudo systemctl start auditd
sudo systemctl enable auditd
auditctl命令添加规则,监视Java日志文件的写(w)和属性变更(a)操作。例如,监控/var/log/java-app.log:sudo auditctl -w /var/log/java-app.log -p wa -k java_app_logs
规则说明:-w指定监控路径,-p设置权限(w=写,a=属性变更),-k添加关键字便于后续检索。ausearch命令检索关键词java_app_logs的审计事件:sudo ausearch -k java_app_logs
aureport生成统计报告(如操作类型、用户、时间):sudo aureport -k -i
使用Log4j、Logback等日志框架,配置Java应用输出结构化审计日志(包含时间戳、用户ID、操作类型、资源等关键信息)。
log4j.properties):log4j.rootLogger=INFO, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/var/log/java-audit.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - [User:%X{userId}] [Action:%m] %n
说明:%X{userId}需通过代码获取用户身份(如Spring Security的SecurityContextHolder),Action字段记录具体操作(如“登录”“数据修改”)。DEBUG用于调试,INFO用于常规操作,ERROR用于异常),避免无关日志干扰审计。通过ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog集中收集、分析Java日志,提升审计效率。
sudo yum install java-11-openjdk -y);logstash.conf):input {
file {
path => "/var/log/java-audit.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:loglevel} %{GREEDYDATA:logmessage}" } }
date { match => ["timestamp", "ISO8601"] }
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
logrotate避免日志文件过大,设置保留周期(如7天):/etc/logrotate.d/java-audit文件:/var/log/java-audit.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
root或审计组可读):sudo chown root:adm /var/log/java-audit.log
sudo chmod 640 /var/log/java-audit.log
sha256sum生成日志文件哈希值,定期比对防止篡改:sha256sum /var/log/java-audit.log > /var/log/java-audit.log.sha256
sudo yum install fail2ban -y
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local,添加Java应用端口(如8080)的防护规则:[java-app]
enabled = true
port = 8080
filter = java-app-auth
logpath = /var/log/java-audit.log
maxretry = 5
bantime = 3600
通过以上步骤,可实现CentOS上Java日志的全生命周期审计(记录→收集→分析→保护→告警),满足安全合规需求(如GDPR、等保)。