audit是什麼?
audit是記錄linux審計資訊的核心模組。
他記錄系統中的各種動作和事件,比如系統呼叫,檔案修改,執行的程式,系統登入登出和記錄所有系統中所有的事件。audit還可以將審計記錄寫入日誌檔案。
audit怎麼用?
audit配置檔案
/etc/audit/auditd.conf
為audit的配置檔案。
簡單講一下幾個常用配置項:
- log_file:指定log檔案存放的位置。
- max_log_file:指定單個log檔案的最大大小,單位是Mbyte。
- max_log_file_action:當log檔案達到max_log_file設定的大小時執行的動作,可選的動作有:ignore/syslog/suspend/rotate。
ignore表示忽略max_log_file設定的限制,繼續寫log檔案。
syslog表示會向syslog中寫入一條warning。
suspend表示auditd不再寫log檔案,但是auditd繼續執行。
rotate表示分多個log檔案,一個log檔案達到上限後在建立一個新的不同名字的log檔案。 - num_logs
表示保留日誌檔案的最大個數,只有在max_log_file_action=rotate時該選項該有意義,必須是0~99之間的數。如果設定為小於2,則不會迴圈日誌。如果遞增了日誌檔案的數目,就可能有必要遞增/etc/audit/audit.rules中的核心backlog設定值,以便留出日誌迴圈的時間。如果沒有設定num_logs值,它就預設為0,意味著從來不迴圈日誌檔案。當達到指定檔案容量後會迴圈日誌檔案,但是隻會儲存一定數目的老檔案,這個數目由num_logs引數指定。老檔案的檔名將為audit.log.N,其中 N是一個數字。這個數字越大,則檔案越老。 - space_left:表示log_file檔案所在的分割槽空閒空間少於這個設定的值時,觸發相應的動作,單位是Mbyte。
- space_left_action:指定space_left觸發後執行的動作,可選的選項有:ignore/syslog/suspend/single/halt,前面三個選項與max_log_file_action相似,single表示audit程式會將系統模式變為單使用者模式,halt表示audit程式將會觸發系統關機。
auditctl
-a [ 列表,動作 | 動作,列表 ]
audit定義了user,task,exclude,exit列表,他們的功能分別為:
- user:過濾掉使用者空間的事件。
- task:只有當fork或clone時才使用。
- exclude:過濾管理員不想看到的事件。
- exit:從系統呼叫退出時建立稽核事件。
audit定義了always, never動作,他們的含義分別為:
- always:分配稽核上下文,始終在系統呼叫進入時填寫它,並始終在系統呼叫退出時寫出一條記錄。
- never:不生成審計記錄。
-S [ syscall名稱 | all ]
所有的系統呼叫都可以在/usr/include/asm/unistd_64.h 檔案中找到。
-F [ n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v ]
定義作用域。
其中n可以是:
pid:程式ID。
uid:使用者ID。
gid:組ID。
...
-w 路徑
-p 許可權
許可權的動作分為四種:
- r — 讀取檔案或者目錄。
- w — 寫入檔案或者目錄。
- x — 執行檔案或者目錄。
- a — 改變在檔案或者目錄中的屬性。
-k 關鍵字
舉例:
- 記錄程式1005所有的系統呼叫
auditctl -a exit,always -S all -F pid=1005
- 記錄對
/etc/shadow
進行的寫操作和屬性修改
auditctl -w /etc/shadow -p wa
auditctl -a exit,always -F path=/etc/shadow -F perm=wa
ausearch
建議使用key,如:ausearch -k passwd_changes
。
總結
audit是一個十分好用的審計工具,以往經常遇到客戶問是誰動過某某檔案,如果用audit監控著就不怕說不上來了,auditctl加的規則是一次性的,若要永久,可以加到/etc/audit/audit.rules
。