Linux 감사 로그 회전 이름 및 압축 RHEL CentOS 7

Linux 감사 로그 회전 이름 및 압축 RHEL CentOS 7

설정하고 싶음주간또는달마다라이브 /var/log/audit/audit.log파일을 다음과 같은 이름의 압축 파일로 저장합니다.audit_2020-05-05.log.gz

존재하다RHEL/센트OS 7.x하나 있나요?우아한기존 감사에서 다음 사항이 모두 발생하도록 하는 방법.conf문서?

그렇지 않으면 그것은최고간단히 루트 crontab 메소드를 실행하면 homebrew bash 쉘 스크립트가 실행됩니다.

  • 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

max_log_file기본적으로 Red Hat Enterprise Linux의 모든 버전에서 auditd는 로그 파일이 설정에 따라 결정된 특정 크기 auditd.conf(기본값은 6MB)에 도달하면 자동으로 회전합니다.

  1. 크기 기반 자동 회전을 시간 기반 자동 회전으로 대체

다음을 위해 /etc/audit/auditd.conf에서 회전을 비활성화합니다.

max_log_file_action = ignore
  1. 다음 중 하나를 수행하여 auditd에 자체 재구성(변경 사항 적용)을 지시합니다.

Kill -HUP $(pidofauditd) (모든 버전)

systemctl 다시 로드 감사(RHEL7)

서비스 감사 다시 로드(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

필요에 따라 FORMAT, COMPRESS및 의 설명을 수정합니다.KEEP

스크립트가 실행 가능으로 표시되어 있는지 확인하고 원하는 시간에 cron에 의해 호출되도록 설정하십시오(일반적인 cron 작업을 통해 또는 위에 표시된 대로 cron.daily에 넣어서).

관련 정보