Linux 审核日志轮换名称和压缩 RHEL CentOS 7

Linux 审核日志轮换名称和压缩 RHEL CentOS 7

想要设置一个每周或者每月将实时/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 兆字节)

  1. 将基于大小的自动旋转替换为基于时间的自动旋转

在 /etc/audit/auditd.conf 中禁用轮换,以便:

max_log_file_action = ignore
  1. 通过执行以下操作之一告诉auditd 重新配置自身(应用您的更改):

Kill -HUP $(pidofauditd)(任何版本)

systemctl 重新加载auditd (RHEL7)

服务auditd重新加载(RHEL6及更早版本)

  1. 要手动触发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

根据需要修改FORMATCOMPRESS和的声明KEEP

确保脚本被标记为可执行并将其设置为由 cron 在所需时间调用(通过正常的 cron 作业或将其放入 cron.daily,如上所示)

相关内容