設定したい週間または月ごとライブ/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
特定のファイル命名規則を持つファイルが毎週/毎月表示されることを強く望んでいます。
最終目標は、生成された監査ログアーカイブを管理するための信頼性が高く強力な方法です。保存された監査ログテキストファイルが圧縮されていないサイズが1 GB未満になるように、ログの保存/回転を適切に調整してください。また、監査ログを失ったり、audit.conf設定に基づいてシステムをシングルユーザーモードに切り替えたりする必要はありません。だからとにかくより良いもの私は現在聞きたいものよりはるかに優れていました。
答え1
max_log_file
デフォルトでは、Red Hat Enterprise Linux のすべてのバージョンで auditd は、ログファイルが設定によって決定された特定のサイズauditd.conf
(デフォルトは 6 MB)に達すると自動的に回転します。
- サイズベースの自動回転を時間ベースの自動回転に置き換える
次のために、/etc/audit/auditd.confで回転を無効にします。
max_log_file_action = ignore
- 次のいずれかを実行して、auditdに独自の再構成(変更の適用)を指示します。
Kill -HUP $(pidofauditd) (すべてのバージョン)
systemctlリロード監査(RHEL7)
サービス監査の再ロード(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に入れます)。