Bash

Rsyslog - 解析 audit.log / omprog 更改日誌值

  • September 9, 2021

我正在嘗試使用 bash 腳本來使用 rsyslog 解析 audit.log,以便將 proctitle 的十六進制部分轉換為 ascii。但是我沒有得到結果:文件 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")

hex2ascii

   #!/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

在腳本將更改的日誌重定向到另一個文件後停止流程。然後我將新文件作為 rsyslog 中的另一個輸入。我找到的最佳解決方案

儘管 rsyslog 內置了幾個模組,但其中一些模組沒有並且需要在使用之前載入。

您正在使用的imfile模組需要以以下行開頭(在舊語法中):

$ModLoad imfile

同樣,omprog模組,如果使用較新的語法,需要

module(load="omprog")

在它可以在if語句中使用之前(缺少關閉})。查看您將從中獲得的錯誤消息rsyslogd -N 1

引用自:https://unix.stackexchange.com/questions/664867