想要设置一个每周或者每月将实时/var/log/audit/audit.log
文件保存到压缩文件,其名称例如audit_2020-05-05.log.gz
在RHEL/CentOS 7.x有没有一个优雅的使以下所有事情在现有审计中发生的方法.conf文件?
否则就是最好的简单地执行一个 root crontab 的方法,它将运行一个自制的 bash shell 脚本,该脚本将...
service auditd stop
cp /var/log/audit/audit.log /var/log/audit/audit_<date>.log
service auditd start
gzip -9 /var/log/audit/audit_<date>.log
/etc/audit/
如果可能的话,我更愿意在文件的范围内完成上述操作,这就是我问的原因。但我强烈希望audit_<date>.log.gz
每周/每月都会出现具有特定文件命名约定的文件。
最终目标是一种可靠且强大的方式来管理创建的审核日志存档...使任何一个保存的审核日志文本文件在未压缩的情况下大小小于 1GB,因此相应地调整日志保存/轮换。而且也不会丢失任何审核日志或根据audit.conf 设置将系统置于单用户模式。所以任何更好的比我目前认为的我会很高兴听到的方式。
答案1
默认情况下,Red Hat Enterprise Linux 所有版本中的auditd 都会在其日志文件达到一定大小时自动轮转,具体大小由中max_log_file
的设置确定auditd.conf
(默认为 6 兆字节)
- 将基于大小的自动旋转替换为基于时间的自动旋转
在 /etc/audit/auditd.conf 中禁用轮换,以便:
max_log_file_action = ignore
- 通过执行以下操作之一告诉auditd 重新配置自身(应用您的更改):
Kill -HUP $(pidofauditd)(任何版本)
systemctl 重新加载auditd (RHEL7)
服务auditd重新加载(RHEL6及更早版本)
- 要手动触发auditd轮转,需要接收USR1信号
每日轮换的简单解决方案:将auditd.cron复制到cron.daily
~]# cp /usr/share/doc/audit-*/auditd.cron /etc/cron.daily
~]# chmod +x /etc/cron.daily/auditd.cron
~]# cat /etc/cron.daily/auditd.cron
#!/bin/sh
##########
# This script can be installed to get a daily log rotation
# based on a cron job.
##########
/sbin/service auditd rotate
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t auditd "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
实施日志压缩
auditd不支持日志压缩;但是,更新上述脚本以重命名旧的audit.log.n 文件并压缩它们是很简单的。提供一个工作示例用于演示目的。
按照上述步骤禁用基于大小的自动旋转
将之前创建的脚本替换为以下代码:
#!/bin/bash
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
FORMAT="%F_%T" # Customize timestamp format as desired, per `man date`
# %F_%T will lead to files like: audit.log.2015-02-26_15:43:46
COMPRESS=gzip # Change to bzip2 or xz as desired
KEEP=5 # Number of compressed log files to keep
ROTATE_TIME=5 # Amount of time in seconds to wait for auditd to rotate its logs. Adjust this as necessary
rename_and_compress_old_logs() {
for file in $(find /var/log/audit/ -name 'audit.log.[0-9]'); do
timestamp=$(ls -l --time-style="+${FORMAT}" ${file} | awk '{print $6}')
newfile=${file%.[0-9]}.${timestamp}
# Optional: remove "-v" verbose flag from next 2 lines to hide output
mv -v ${file} ${newfile}
${COMPRESS} -v ${newfile}
done
}
delete_old_compressed_logs() {
# Optional: remove "-v" verbose flag to hide output
rm -v $(find /var/log/audit/ -regextype posix-extended -regex '.*audit\.log\..*(xz|gz|bz2)$' | sort -n | head -n -${KEEP})
}
rename_and_compress_old_logs
service auditd rotate
sleep $ROTATE_TIME
rename_and_compress_old_logs
delete_old_compressed_logs
根据需要修改FORMAT
、COMPRESS
和的声明KEEP
确保脚本被标记为可执行并将其设置为由 cron 在所需时间调用(通过正常的 cron 作业或将其放入 cron.daily,如上所示)