1. 程式人生 > >linux audit審計(4)--audit的日誌切分,以及與rsyslog的切分協同使用

linux audit審計(4)--audit的日誌切分,以及與rsyslog的切分協同使用

切分 pri kernel 下場 表示 審計 action 通過 小時

audit的規則配置稍微不當,就會短時間內產生大量日誌,所以這個規則配置一定要當心。當audit日誌寫滿後,可以看到如下場景:

-r-------- 1 root root 8388609 Mar 31 11:47 audit.log.997
-r-------- 1 root root 8388780 Mar 31 11:47 audit.log.998
-r-------- 1 root root 8388621 Mar 31 11:47 audit.log.999

然後在messages日誌中有一大堆的warning

2018-03-31T12:12:02.881911+08:00|warning|kernel[-]|[74525.638569] audit: audit_backlog=8193 > audit_backlog_limit=8192
2018-03-31T12:12:02.881997+08:00|warning|kernel[-]|[74525.638571] audit: audit_lost=7035351 audit_rate_limit=0 audit_backlog_limit=8192
2018-03-31T12:12:02.882088+08:00|err|kernel[-]|[74525.638572] audit: backlog limit exceeded

之後可能還會影響rsyslog的正常工作。

auditd本身有日誌切分的功能,auditd使用fprintf函數來記錄log,累計每次寫log的size,每次寫完後都會去檢查log的大小,當這個size達到用戶配置的max_log_file的大小時,就會shift_logs(這個是對於KEEP_LOGS這種模式而言的),新的達到切分值的日誌命名為audit.log.1,之前的日誌audit.log.(num+1)。

檢查日誌時,隔幾次還會去查看一下磁盤空間是否充足,使用的函數是fstatfs,來獲取audit.log文件所在的mount分區的空間信息,當達到space_left的值或者admin_space_left,或者磁盤不足時就會執行相應的action。

那麽既然auditd本身有log切分的功能,那如果和rsyslog一起使用,會出現什麽問題呢?

對於使用syslog函數來記錄日誌的話,日誌的切分是很準確的,但是auditd是使用的fprintf來記錄的log,這樣的話,還能按照rsyslog中的配置來切分嗎?答案是可以的,我們可以這樣處理,在/etc/rsyslog.conf配置文件中,按照如下方式來配置:

$outchannel audit,/var/log/audit/audit.log.tmp,2097152,xx_log_dump.sh param1 param2

audit表示是outchannel的名稱(不是日誌文件的名稱),/var/log/audit/audit.log.tmp是日誌輸出的目的文件的名稱,即rsyslog要檢查大小的文件,2097152表示日誌文件的大小閾值,xx_log_dump.sh表示日誌文件到達閾值後執行的腳本,一般為轉儲腳本,參數和程序之間通過空格隔開。這樣配置後,rsyslog就會從/var/log/audit/audit.log文件中讀取日誌,然後一條一條的以syslog的方式寫入到audit.log.tmp中,因為audit.log.tmp中加入了日期信息,所以audit.log.tmp會比audit.log文件稍大些,當audit.log.tmp達到2097152這個大小時,就把audit.log切分為audit.log.1並且轉儲處理。

但是要保證/etc/audit/auditd.conf中配置的max_log_file的值要大於/etc/rsyslog.conf配置的切分轉儲的值。否則audit要切分,rsyslog也過來切分,就亂了,要在audit切分前,rsyslog先完成切分和轉儲。

linux audit審計(4)--audit的日誌切分,以及與rsyslog的切分協同使用