17.5 管理稽核子系統

17.5.1 檢視稽核 log

稽核記帳是以 BSM 二進制格式儲存的,因此必須使用工具來對其進行修改, 或將其轉換為純文字。 praudit 命令能夠將記帳檔案轉換為簡單的純文字格式; 而 auditreduce 命令則可以為分析、 存檔或列印目的來濃縮稽核 log 檔案。 auditreduce 支援一系列篩選參數,包括事件類型、 事件類、使用者、事件的日期和時間,以及檔案路徑或操作對象。

例如,praudit 工具會將指定的稽核記帳轉存為簡單純文字格式的稽核 log :

# praudit /var/audit/AUDITFILE

此處 AUDITFILE 是要轉存的稽核 log 檔案。

稽核記帳中包括一系列稽核記錄,這些記錄由一系列代號(token)組成, 而 praudit 能把它們順序顯示為一行。 每個代號都屬於某個特定的類型,例如 header 表示稽核記錄頭,而 path 則表示在一次名字尋找中的檔案路徑。 下面是一個 execve 事件的例子:

header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec
exec arg,finger,doug
path,/usr/bin/finger
attribute,555,root,wheel,90,24918,104944
subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100
return,success,0
trailer,133

這個稽核記錄表示一次成功的 execve 調用,執行了 "finger doug"。 在參數代號中是由 shell 提交給 kernel 的指令。 path 代號包含了由 kernel 尋找得到的可執行檔案路徑。 屬性代號中包含了對可執行檔案的描述, 特別地,它包括了檔案的權限模式,用以確定應用程式是否是 setuid 的。 主體代號描述了主體程序,並順序記錄了稽核使用者 ID、生效使用者 ID 和組 ID、實際使用者 ID 和組 ID、程序 ID、會話 ID、端口 ID,以及登入地址。 注意稽核使用者 ID 和實際使用者 ID 是不同的: 使用者 robert 在執行這個命令之前已經切換為 root 帳戶, 但它會以最初進行身份驗証的使用者身份進行稽核。 最後,返回值代號表示執行成功,並終結這一記錄。

17.5.2 濃縮稽核記帳

由於稽核 log 可能會很大,管理員可能會希望選擇記錄的一個子集來使用, 例如與特定使用者相關的記錄:

# auditreduce -u trhodes /var/audit/AUDITFILE | praudit

這將選擇儲存在 AUDITFILE 中的所有由 trhodes 產生的稽核 log。

17.5.3 委派稽核檢查權限

audit 組中的使用者, 擁有讀取 /var/audit 下的稽核記帳的權限; 預設情況下,這個組是空的,因此只有 root 使用者可以讀取稽核記帳。 如果希望給某個使用者指定稽核檢查權,則可以將其加入 audit。 由於檢視稽核 log 的內容可以提供關於使用者和程序行為的大量深度資訊, 在您委派這些權力時,請務必謹慎行事。

17.5.4 透過稽核管道來實施監控

稽核管道是位於設備檔案系統中的自動複製(cloning)的虛擬設備, 用於讓應用程式控制正在執行的稽核記錄流, 這主要是為了滿足入侵檢測和系統監控軟體作者的需要。 不過,對管理員而言, 稽核管道設備也提供了一種無須冒稽核記帳檔案屬主出現問題的麻煩, 或由於 log 翻轉而打斷事件流的麻煩,而實作實施監控的方便途徑。 要跟蹤實施事件流,使用下面的指令:

# praudit /dev/auditpipe

預設情況下,稽核管道設備節點只有 root 使用者才能訪問。 如果希望 audit 組的成員能夠訪問它,應在 devfs.rules 中加入下述 devfs 規則:

add path 'auditpipe*' mode 0440 group audit

請參見 devfs.rules(5) 以了解關於設定 devfs 檔案系統的進一步資訊。

Warning: 很容易設定出稽核事件反饋循環,也就是檢視事件的操作本身會產生更多的事件。 例如,如果所有的網路 I/O 均被稽核,又在 SSH 會話中執行 praudit,就會以很高的速率產生持續的稽核事件流, 因為每顯示一個事件都會產生新的事件。 建議您在需要在稽核管道設備上執行 praudit 時,選擇一個沒有進行精細 I/O 稽核的會話來執行。

17.5.5 稽核記帳檔案的輪轉

稽核計賬只由 kernel 寫入,且只能由 auditd 管理。 管理員不應嘗試使用 newsyslog.conf(5) 或其它工具來完成稽核 log 的輪轉工作。 您可以使用 audit 管理工具來關閉稽核、重新設定稽核系統,並完成 log 輪轉。 下面的命令將讓稽核服務新增新的稽核 log, 並發信號給 kernel 要求其使用新的 log。 舊 log 將終止並被改名, 此時,管理員就可以操作它了。

# audit -n

Warning: 如果 auditd 服務程式沒有在執行, 則這個命令將失敗並給出錯誤提示。

/etc/crontab 加入如下設置, 將使 cron(8) 每十二小時將 log 輪轉一次。

0     */12       *       *       *       root    /usr/sbin/audit -n

這些修改會在您儲存 /etc/crontab 後生效。

對於稽核記帳檔案基於大小的自動翻轉,可以透過 audit_control(5) 中的 filesz 選項來設定, 這個選項在這一章的設定檔一節中已經介紹過。

17.5.6 壓縮稽核記帳

由於稽核記帳檔案會變得很大,通常會希望在稽核服務關閉它時, 對其進行壓縮或歸檔。 audit_warn script 可以用來在一系列與稽核有關的事件發生時, 執行一些使用者定義的操作,這也包括在稽核記帳翻轉時進行清理操作。 舉例而言,可以在 audit_warn script 中加入下列內容來在稽核記帳關閉時壓縮它:

#
# Compress audit trail files on close.
#
if [ "$1" = closefile ]; then
        gzip -9 $2
fi

其它存檔操作也包括將稽核記帳複製到一個中央的服務器,刪除舊的記帳檔案, 或濃縮稽核記帳並刪除不需要的記錄等。 這個 script 會在稽核記帳檔案正常關閉時執行一次, 因此在不正常關閉系統時,就不會執行它了。

本文及其他文件,可由此下載:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。
關於本文件的問題,請洽詢 <doc@FreeBSD.org>。