proctitleの16進部分をasciiに変換するために、rsyslogを使用してaudit.logを解析するbashスクリプトを使用しようとしています。しかし、結果はありません。 audit_ascii.logファイルに "proctitle"値を含む行はありません。私はスクリプトをテストしましたが、うまく動作するので、問題は私のrsyslog.confで発生したようです。
rsyslog.conf:
$InputFileName /var/log/audit/audit.log
$InputFileTag tag_auditd:
$InputFileStateFile log_audit
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor
if $msg contains "msg=audit" then {
action(type="omprog" binary="/bin/bash /opt/bin/hex2ascii.sh" output="/var/log/audit/audit_ascii.log")
16進数2ascii
#!/bin/bash
read log
hasHex=$(echo $log | egrep "msg=audit" | egrep "type=PROCTITLE" | egrep -v '"' | wc -c)
if [ ${hasHex} -gt 0 ];
then
part1=$(echo $log | cut -d"=" -f1-3)
part2=$(echo $log | cut -d"=" -f4)
part2=$(echo $part2 | xxd -r -p )
echo $part1 >> /var/log/audit/verif.txt
#echo "${part1}=${part2}\n" >> /var/log/audit/audit_ascii.log
log="${part1}=${part2}\n"
#else
#echo $log >> /var/log/audit/audit_ascii.log
fi
答え1
rsyslogには複数の組み込みモジュールがありますが、その一部は組み込まれておらず、使用する前にロードする必要があります。
使用しているモジュールimfile
の前には、次の行が必要です(前の構文から):
$ModLoad imfile
同じ、オフログモジュール、最新の構文を使用する場合は必須
module(load="omprog")
ステートメントで使用される前にif
(結論が不足している}
)あなたがそれから得るエラーメッセージを見てくださいrsyslogd -N 1
。
答え2
スクリプトが変更されたログを別のファイルにリダイレクトした後、プロセスを停止します。次に、新しいファイルをrsyslogの他の入力に渡します。私が見つけた最高のソリューション