LINUX AS 5 審計功能

gaopengtttt發表於2010-04-06

轉自網路:

一直以為只有solaris才有audit,發現從2.6的開始linux就有了auditctl
類似於sun的audit
只是這方面的資料相對的少啊,英文的,看得很辛苦,有沒有人用過的,比如說我想審查對usb裝置的操作!
下面我貼一下從網上down的文章。
2.6 Linux核心有用日誌記錄事件的能力,比如記錄系統呼叫和檔案訪問。然後,管理員可以評審這些日誌,確定可能存在的安全裂口,比如失敗的登入嘗試,或者使用者對系統檔案不成功的訪問。這種功能稱為Linux審計系統,在Red Hat Enterprise Linux 5中已經可用。
  要使用Linux Auditing System,可採用下面的步驟:
  (1) 配置審計守護程式。
  (2) 新增審計規則和觀察器來收集所需的資料。
  (3) 啟動守護程式,它啟用了核心中的Linux Auditing System並開始進行日誌記錄。
  (4) 透過生成審計報表和搜尋日誌來週期性地分析資料。
  本章將詳細討論各個部分。
25.1 配置審計守護程式
  Red Hat Enterprise Linux 5核心中的Linux Auditing System預設是關閉的。當啟動審計守護程式時,啟用這個核心特性。要在啟動時不透過守護程式auditd來啟用Linux Auditing System,只需用audit= 1引數來引導。如果這個引數設定為1,而且auditd沒有執行,則審計日誌會被寫到/var/log/messages中。
  要使用auditd和實用程式來生成日誌檔案報表,必須安裝audit RPM程式包。如果沒有安裝,則參見第3章“作業系統更新”瞭解關於程式包安裝的指令。
  用了auditd,管理員就可以定製產生的審計日誌。下面只是一部分可用的自定義配置:
● 設定審計訊息的專用日誌檔案
● 確定是否迴圈使用日誌檔案
● 如果日誌檔案的啟動用掉了太多磁碟空間則發出警告
● 配置審計規則記錄更詳細的資訊
● 啟用檔案和目錄觀察器
  這些設定值及更多設定值位於/etc/audit/auditd.conf檔案中,它包含修改審計守護程式的行為的選項。每個選項均應在獨立的一行上,後面跟著等於號(=)和這個選項的值。程式清單25-1顯示了預設配置檔案。
  程式清單25-1 預設審計守護程式引數
#
# This file controls the configuration of the audit daemon
#

log_file = /var/log/audit/audit.log
log_format = RAW
priority_boost = 3
flush = INCREMENTAL
freq = 20
num_logs = 4
dispatcher = /sbin/audispd
disp_qos = lossy
max_log_file = 5
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
  可以配置下面這些選項(參見程式清單25-1瞭解預設值):
log_file
審計日誌檔案的完整路徑。如果您配置守護程式向除預設/var/log/audit/外的目錄中寫日誌檔案時,一定要修改它上面的檔案許可權,使得只有根使用者有讀、寫和執行許可權。所有其他使用者都不能訪問這個目錄或這個目錄中的日誌檔案。
log_format
寫日誌時要使用的格式。當設定為RAW時,資料會以從核心中檢索到的格式寫到日誌檔案中。當設定為NOLOG時,資料不會寫到日誌檔案中,但是如果用dispatcher選項指定了一個,則資料仍然會傳送到審計事件排程程式中。
priority_boost
    審計應採用多少優先順序推進守護程式。必須是非負數。0表示沒有變化。
flush
多長時間向日志檔案中寫一次資料。值可以是NONE、INCREMENTAL、DATA和SYNC之一。如果設定為NONE,則不需要做特殊努力來將資料重新整理到日誌檔案中。如果設定為INCREMENTAL,則用freq選項的值確定多長時間發生一次向磁碟的重新整理。如果設定為DATA,則審計資料和日誌檔案一直是同步的。如果設定為SYNC,則每次寫到日誌檔案時,資料和後設資料是同步的。
freq
如果flush設定為INCREMETNAL,審計守護程式在寫到日誌檔案中前從核心中接收的記錄數。
num_logs
max_log_file_action設定為ROTATE時要儲存的日誌檔案數目。必須是0~99之間的數。如果設定為小於2,則不會迴圈日誌。如果遞增了日誌檔案的數目,就可能有必要遞增/etc/audit/audit.rules中的核心backlog設定值,以便留出日誌迴圈的時間。如果沒有設定num_logs值,它就預設為0,意味著從來不迴圈日誌檔案。
dispatcher
當啟動這個守護程式時,由審計守護程式自動啟動程式。所有守護程式都傳遞給這個程式。可以用它來進一步定製報表或者以與您的自定義分析程式相容的不同格式產生它們。自定義程式的示例程式碼可以在/usr/share/doc/audit- /skeleton.c中找到。由於排程程式用根使用者特權執行,因此使用這個選項時要極其小心。這個選項不是必需的。
disp_qos
控制排程程式與審計守護程式之間的通訊型別。有效值為lossy和lossless。如果設定為lossy,若審計守護程式與排程程式之間的緩衝區已滿(緩衝區為128千位元組),則傳送給排程程式的引入事件會被丟棄。然而,只要log_format沒有設定為nolog,事件就仍然會寫到磁碟中。如果設定為lossless,則在向排程程式傳送事件之前和將日誌寫到磁碟之前,排程程式會等待緩衝區有足夠的空間。
max_log_file
以兆位元組表示的最大日誌檔案容量。當達到這個容量時,會執行max_log_file _action指定的動作。
max_log_file_action
當達到max_log_file的日誌檔案大小時採取的動作。值必須是IGNORE、SYSLOG、SUSPEND、ROTATE和KEEP_LOGS之一。如果設定為IGNORE,則在日誌檔案達到max_log_file後不採取動作。如果設定為SYSLOG,則當達到檔案容量時會向系統日誌/var/log/messages中寫入一條警告。如果設定為SUSPEND,則當達到檔案容量後不會向日志檔案寫入審計訊息。如果設定為ROTATE,則當達到指定檔案容量後會迴圈日誌檔案,但是隻會儲存一定數目的老檔案,這個數目由num_logs引數指定。老檔案的檔名將為audit.log.N,其中N是一個數字。這個數字越大,則檔案越老。如果設定為KEEP_LOGS,則會迴圈日誌檔案,但是會忽略num_logs引數,因此不會刪除日誌檔案。
space_left
以兆位元組表示的磁碟空間數量。當達到這個水平時,會採取space_left_action引數中的動作。
space_left_action
當磁碟空間量達到space_left中的值時,採取這個動作。有效值為IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和HALT。如果設定為IGNORE,則不採取動作。如果設定為SYSLOG,則向系統日誌/var/log/messages寫一條警告訊息。如果設定為EMAIL,則從action_mail_acct向這個地址傳送一封電子郵件,並向/var/log/messages中寫一條警告訊息。如果設定為SUSPEND,則不再向審計日誌檔案中寫警告訊息。如果設定為SINGLE,則系統將在單使用者模式下。如果設定為SALT,則系統會關閉。
action_mail_acct
負責維護審計守護程式和日誌的管理員的電子郵件地址。如果地址沒有主機名,則假定主機名為本地地址,比如root。必須安裝sendmail並配置為向指定電子郵件地址傳送電子郵件。
admin_space_left
以兆位元組表示的磁碟空間數量。用這個選項設定比space_left_action更多的主動性動作,以防萬一space_left_action沒有讓管理員釋放任何磁碟空間。這個值應小於space_left_action。如果達到這個水平,則會採取admin_space_left_ action所指定的動作。
admin_space_left_action
當自由磁碟空間量達到admin_space_left指定的值時,則採取動作。有效值為IGNORE、SYSLOG、EMAIL、SUSPEND、SINGLE和HALT。與這些值關聯的動作與space_left_action中的相同。
disk_full_action
如果含有這個審計檔案的分割槽已滿,則採取這個動作。可能值為IGNORE、SYSLOG、SUSPEND、SINGLE和HALT。與這些值關聯的動作與space_left _action中的相同。
  提示:
  如果不迴圈審計日誌檔案,則含有/var/log/audit/的分割槽可能變滿並引起系統錯誤。因此,建議讓/var/log/audit/位於一個單獨的專用分割槽。
disk_error_action
如果在寫審計日誌或迴圈日誌檔案時檢測到錯誤時採取的動作。值必須是IGNORE、SYSLOG、SUSPEND、SINGLE和HALT之一。與這些值關的動作與space_left_action中的相同。
  /etc/sysconfig/auditd檔案可以用來設定帶EXTRAOPTIONS引數的auditd的命令列選項。唯一的命令列選項-f以除錯模式安排守護程式。如果啟用了除錯模式,則會出現標準錯誤訊息而不是日誌檔案。AUDITD_LANG設定值可以用來修改守護程式的位置。如果設定為none,則所有位置資訊會從審計環境中刪除。如果AUDITD_CLEAN _STOP選項設定為yes,則當用service auditd stop命令停止守護程式時,會刪除審計規則與觀察器。要了解關於審計規則的更多資訊,請參見下一節。
25.2 編寫審計規則與觀察器
  Linux Auditing System可以用來為事件寫規則,比如系統呼叫,比如用auditctl命令列實用程式觀察檔案或目錄上的操作。如果用初始化指令碼啟動auditd(用service auditd start命令),則規則和觀察器可以新增到/etc/audit/audit.rules中,以便在啟動守護程式時執行它們。只有根使用者可以讀或修改這個檔案。
  /etc/audit.audit.rules中的每個規則和觀察器必須單獨在一行中,以#開頭的行會被忽略。規則和觀察器是auditctl命令列選項,前面沒有auditctl命令。它們從上到下閱讀檔案。如果一個或多個規則或觀察器互相沖突,則使用找到的第一個。
25.2.1 編寫審計規則
  要新增審計規則,可在/etc/audit/audit.rules檔案中用下面的語法:
-a ,
  警告:
  如果在執行守護程式時新增規則/etc/audit/audit.rules,則一定要以根使用者身份用service auditd restart命令啟用修改。也可以使用service auditd reload命令,但是這種方法不會提供配置檔案錯誤的訊息。
  列表名必須是下列名稱之一。
task
每個任務的列表。只有當建立任務時才使用。只有在建立時就已知的欄位(比如UID)才可以用在這個列表中。
entry
    系統呼叫條目列表。當進入系統呼叫確定是否應建立審計時使用。
exit
    系統呼叫退出列表。當退出系統呼叫以確定是否應建立審計時使用。
user
使用者訊息過濾器列表。核心在將使用者空間事件傳遞給審計守護程式之前使用這個列表過濾使用者空間事件。有效的欄位只有uid、auid、gid和pid。
exclude
事件型別排除過濾器列表。用於過濾管理員不想看到的事件。用msgtype欄位指定您不想記錄到日誌中的訊息。
  這個動作必須下面的動作之一:
never
    不生成審計記錄。
always
分配審計上下文,總是把它填充在系統呼叫條目中,總是在系統呼叫退出時寫一個審計記錄。
  可以包括下面幾個選項中的一個或多個。
-s
根據名稱或數字指定一個系統。要指定所有系統呼叫,可使用all作為系統呼叫名稱。如果程式使用了這個系統呼叫,則開始一個審計記錄。可以為相同的規則指定多個系統呼叫,每個系統呼叫必須用-S啟動。在相同的規則中指定多個系統,而不是列出單獨的規則,這樣可以導致更好的效能,因為只需要評價一個規則。
- F
指定一個規則欄位。如果為一個規則指定了多個欄位,則只有所有欄位都為真才能啟動一個審計記錄。每個規則都必須用-F啟動,最多可以指定64個規則。如果用使用者名稱和組名作為欄位,而不是用UID和GID,則會將它們解析為UID和GID以進行匹配。下面是有效的欄位名:
pid
      程式ID。
ppid
      父程式的程式ID。
uid
      使用者ID。
euid
      有效使用者ID。
suid
      設定使用者ID。
fsuid
      檔案系統使用者ID。
gid
      組ID。
egid
      有效組ID。
sgid
      設定組ID。
fsgid
      檔案系統組ID。
auid
      審計ID,或者使用者登入時使用的原始ID。
msgtype
      訊息型別號。只應用在排除過濾器列表上。
pers
      OS Personality Number。
arch
系統呼叫的處理器體系結構。指定精確的體系結構,比如i686(可以透過uname -m命令檢索)或者指定b32來使用32位系統呼叫表,或指定b64來使用64位系統呼叫表。
devmajor
      Device Major Number。
devminor
      Device Minor Number。

inode
      Inode Number。
exit
      從系統呼叫中退出值。
success
      系統呼叫的成功值。1表是真/是,0表示假/否。
a0,a1,a2,a3
      分別表示系統呼叫的前4個引數。只能用數字值。
key
設定用來標記事件的審計日誌事件訊息的過濾鍵。參見程式清單25-2和程式清單25-3中的示例。當新增觀察器時,類似於使用-k選項。參見“編寫審計規則與觀察器”瞭解關於-k選項的詳細資訊。
obj_user
      資源的SELinux使用者。
obj_role
      資源的SELinux角色。
obj_type
      資源的SELinux型別。
obj_lev_low
      資源的SELinux低階別。
obj_lev_high
      資源的SELinux高階別。
subj_role
      程式的SELinux角色。
subj_type
      程式的SELinux型別。
subj_sen
      程式的SELinux敏感性。
subj_clr
      程式的SELinux安全級別(clearance)。
  -a選項向列表末尾新增規則。要向列表開頭新增規則,可用-A替換-a。刪除語法相同的規則,用-d替換-a。要刪除所有規則,可指定-D選項。程式清單25-2含有一些示例審計規則,比如/etc/audit/audit.rules。
  程式清單25-2 示例審計規則
#Record all file opens from user 501
#Use with caution since this can quickly
#produce a large quantity of records
-a exit,always -S open -F uid=501 -F key=501open
#Record file permission changes
-a entry,always -S chmod
  提示:
  如果安裝了audit程式包,則其他示例在/usr/share/doc/audit-/目錄的*.rules檔案中。
  當發生了定義的規則中的動作時,如果有一個規則在/etc/audit/auditd.conf中定義則它會透過排程程式傳送,然後會有一條日誌訊息寫到/var/log/audit/audit.log中。例如,程式清單25-3中含有程式清單25-2中的第一個規則的日誌項,日誌檔案從使用者501開啟。這個規則包括一個過濾鍵,它出現在程式清單25-3中日誌項的末尾。
  程式清單25-3 示例審計規則日誌訊息
type=SYSCALL msg=audit(1168206647.422:5227): arch=c000003e syscall=2
success=no exit=-2 a0=7fff37fc5a40 a1=0 a2=2aaaaaaab000 a3=0 items=1
ppid=26640 pid=2716 auid=501 uid=501 gid=501 euid=501 suid=501 fsuid=501
egid=501 sgid=501 fsgid=501 tty=pts5 comm="vim" exe="/usr/bin/vim"
key="501open"
25.2.2 編寫審計觀察器
  Linux Auditing System也允許管理員觀察檔案和目錄。如果一個觀察器放在一個檔案或目錄上,則會記錄成功或失敗的動作,比如開啟和執行檔案或目錄。要新增觀察器,可使用-w選項,後面跟著一個要觀察的檔案或目錄。
  警告:
  如果在守護程式執行時您新增了觀察器/etc/audit/audit.rules,則一定要以根使用者身份用service auditd restart命令啟用修改。也可以用service auditd reload命令,但是它不會通知您關於配置檔案錯誤的訊息。
  程式清單25-4中含有包括在/etc/audit/audit.rules檔案中的示例規則。如果與-w結合起來使用-k 選項,則由觀察器產生的所有記錄會含有一個警報詞(限制為31個位元組),因此可以將該觀察器的記錄輕鬆地從日誌檔案中過濾出來。要限制檔案或目錄觀察器為某些動作,可使用-p選項,後面跟著下面的選項中的一個或多個:r表示觀察讀動作,w表示觀察寫動作,x表示觀察執行動作,a表示在末尾新增動作。要刪除一個觀察器,可使用由後面跟著檔案或目錄的-W選項。
  程式清單25-4 示例審計觀察器
#Watch for changes to sysconfig files
-w /etc/sysconfig -k SYSCONFIG
#Watch for changes to audit config files
-w /etc/audit/audit.rules -k AUDIT_RULES
-w /etc/audit/auditd.conf -k AUDIT_CONF
-w /var/log/audit/ -k LOG_AUDIT
#Watch to see who tries to start the VPN client
-w /usr/bin/vpnc -k VPNC -p x
#Watch password files
-w /etc/group -k PASSWD
-w /etc/passwd -k PASSWD
-w /etc/shadow -k PASSWD
  例如,程式清單25-4包括了關鍵過濾器PASSWD的口令檔案上的一個觀察器。程式清單25-5含有刪除一個使用者後/var/log/audit/audit.log中的日誌項,它會修改正在觀察的這些口令檔案。正如程式清單25-3中帶過濾鍵的規則的示例,這個鍵被新增到日誌項的末尾,因此可以輕鬆地將它從日誌項的其餘部分過濾出來。
  程式清單25-5 審計觀察器的示例日誌項
type=SYSCALL msg=audit(1168227741.656:17915): arch=c000003e syscall=82
success=yes exit=0 a0=7fff00975dd0 a1=60a700 a2=0 a3=22 items=5 ppid=26575
pid=4147 auid=501 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0
tty=pts4 comm="userdel" exe="/usr/sbin/userdel" key="PASSWD"
25.2.3 定製auditctl
  配置審計系統引數的命令列選項也能包括在/etc/audit/audit.rules中。表25-1列出了這些選項。
表25-1 配置審計系統引數的auditctl選項
選 項
說 明
-b
允許的未完成審計緩衝區的最大數目。核心中的預設值為64。如果緩衝區已滿,則核心引用透過-f選項設定的失敗標誌,以確定採取哪個動作
-e [0,1]
設定為0禁用審計,或者設定為1啟用審計。對於為了故障檢修或其他目的而臨時禁用審計會很有用
-f [0,1,2]
設定用於通知核心如何處理關鍵錯誤(比如審計緩衝區已滿或者核心記憶體用完)的失敗標誌。有效值是0(沒有動作),1(用printk將訊息記錄到/var/log/messages)和2(混亂)。預設值為1,但是2更安全。
-r
以每秒鐘的訊息條數為單位的速率限制。如果設定為0,則沒有限制。如果超出了速率限制,則核心會諮詢-f選項中的失敗標誌來確定採取哪個動作
-i
當從一個檔案中讀取規則時忽略錯誤
  
  要驗證設定了這些選項,可用auditctl -s命令檢視狀態。輸出類似下面這樣:
AUDIT_STATUS: enabled=1 flag=1 pid=1954 rate_limit=0 backlog_limit=256
lost=0 backlog=0
25.3 啟動和停止守護程式
  當配置守護程式和新增規則與觀察器時,可以以根使用者身份執行service auditd start命令啟動守護程式。要停止它,可使用service auditd stop命令。要使它自動在執行時啟動,則應作為根使用者執行chkconfig auditd on命令。
  如果當您修改守護程式的配置時守護程式已經在執行,則應以根使用者身份執行service auditd restart命令啟用修改。要驗證規則與觀察器已經修改,應以根使用者身份執行auditctl -1命令列出所有活動的規則和觀察器。例如,程式清單25-6顯示了程式清單25-2和25-4中的規則和觀察器的auditctl -1輸出。
  25.4 分析記錄
  如果使用了auditd,則除非用/etc/audit/audtid.conf中的log_file引數修改了檔名,否則審計訊息會寫到/var/log/audit.log中。日誌檔案是文字檔案,可以透過less實用程式或文字編輯器(比如Emacs或Vi)閱讀。訊息的格式為從核心中接收的格式,順序也是接收時的順序。aureport實用程式可以用來從日誌檔案中生成彙總報表。ausearch實用程式可以用來基於一些條件搜尋報表。這些條件可以是:審計事件ID、檔名、UID或GID、訊息型別和系統呼叫名等。
  除非將守護程式配置為迴圈日誌檔案和像前面“配置審計守護程式”一節中介紹的那樣刪除老檔案,否則/var/log/audit/中的日誌檔案永遠不會被刪除。管理員應經常檢查日誌,刪除老日誌或者移到備份儲存器中。如果不周期性地刪除日誌,它們會填滿整個磁碟的。因為這個原因,所以建議把/var/log/audit/放在一個單獨的專用分割槽上,這樣就不會影響寫其他日誌檔案或者引起其他系統錯誤。
  提示:
  要強制立即迴圈日誌檔案,可以以根使用者身份執行service auditd rotate命令。老日誌檔案的檔名將為audit.log.N,其中N是一個數字。這個數字越大,日誌檔案越老。
25.4.1 生成報表
  要生成審計訊息的報表,可使用aureport。為了安全起見,/var/log/audit/目錄和其中的所有審計日誌檔案只對根使用者可讀。因此,您必須作為根使用者執行aureport命令。如果執行aureport時沒有使用任何選項,則會顯示程式清單25-7中所示的彙總報表。
  表25-2 生成特定報表的aureport選項
選 項
說 明
-a
報告關於訪問向量緩衝(access vector cache,AVC)的訊息
-c
報告關於配置修改的訊息
-cr
報告關於crypto事件的訊息
-e
報告關於事件的訊息
-f
報告關於檔案的訊息
-h
報告關於主機的訊息
-l
報告關於登入的訊息
-m
報告關於賬戶修改的訊息
-ma
報告關於Mandatory Access Control(MAC)事件的訊息
-p
報告關於程式的訊息
-s
報告關於系統呼叫的訊息
-tm
報告關於終端的訊息
  要以更可讀的格式產生結果,比如用它們對映到的使用者名稱替換UID,則也要使用-i選項:
aureport - -i
  要顯示每個日誌的啟動和停止時間,可以新增-t選項:
aureport - -i -t
  要顯示等於或早於特定時間的事件,可以新增-te選項,並在後面跟著結束日期和結束時間。用數字格式表示您所在地點的日期和時間,並以24小時制格式表示時間。例如,對於en_us.UTF-8這個地方,可使用日期格式MM/DD/YY:
aureport - -i -te
  要顯示等於或者晚於特定時間的事件,新增-ts選項,後面跟著開始日期和時間。採用與-te選項相同的日期和時間格式化規則。
aureport - -i -ts
  要僅顯示失敗事件,則使用- -failure,注意這個選項前面有兩條虛線而不是一條:
aureport - -i --failed
  要僅顯示成功事件,則使用- -success,注意這個選項前面有兩條虛線而不是一條:
aureport - -i --success
  有些報表也可以用- -summary選項以彙總格式生成;注意這個選項前面有兩條虛線作字首:
aureport - -i --summary
  要產生彙總報表而不是關於一個地區的報表,可使用-r選項:
aureport -r -i
  要產生來自一個日誌檔案的報表而不是預設報表,則可用-if選項指定它:
aureport - -i -if /var/log/audit/audit.log.1
25.4.1 搜尋記錄
  除了生成事件報表並用aureport彙總外,管理員也可以用ausearch搜尋審計記錄。以根使用者身份執行ausearch命令,後面跟著表25-3中的一個或多個選項。如果指定了多個選項,則顯示的結果會對兩個請求都匹配。要檢索匹配一個選項或另一個選項的條件,則執行兩次不同的搜尋並親自組合結果。
25.5 用審計跟蹤程式
  autrace實用程式可以用來生成特定程式中的審計記錄。當autrace在執行時,沒有其他規則或觀察器可以啟用。對於其他審計實用程式,autrace必須以根使用者身份執行。要審計跟蹤一個程式,需採用下列步驟:
  (1) 暫時關閉所有規則與觀察器:
auditctl -D
  (2) (可選)要把審計記錄從程式中隔離開,需強制一個日誌檔案迴圈:
service auditd rotate
  autrace的日誌將放在/var/log/audit/audit.log中。
  (3) 在命令列執行autrace:
autrace
  (4) 等待直到程式完成。將顯示一條類似於下面這個訊息:
Trace complete. You can locate the records with 'ausearch -i -p 10773'
  (5) 重啟審計守護程式來重新啟用規則和觀察器:
service auditd restart
  (6) 用ausearch顯示關於跟蹤的詳細資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-631385/,如需轉載,請註明出處,否則將追究法律責任。

相關文章