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- <version>/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 <list>,<action> <options>
警告:
若是在運行守護進程時添加規則/etc/audit/audit.rules,則必定要以根用戶身份用service auditd restart命令啓用修改。也可使用service auditd reload命令,可是這種方法不會提供配置文件錯誤的消息。
列表名必須是下列名稱之一。
task
每一個任務的列表。只有當建立任務時才使用。只有在建立時就已知的字段(好比UID)才能夠用在這個列表中。
entry
系統調用條目列表。當進入系統調用肯定是否應建立審計時使用。
exit
系統調用退出列表。當退出系統調用以肯定是否應建立審計時使用。
user
用戶消息過濾器列表。內核在將用戶空間事件傳遞給審計守護進程以前使用這個列表過濾用戶空間事件。有效的字段只有uid、auid、gid和pid。
exclude
事件類型排除過濾器列表。用於過濾管理員不想看到的事件。用msgtype字段指定您不想記錄到日誌中的消息。
這個動做必須下面的動做之一:
never
不生成審計記錄。
always
分配審計上下文,老是把它填充在系統調用條目中,老是在系統調用退出時寫一個審計記錄。
<options>能夠包括下面幾個選項中的一個或多個。
-s <syscall>
根據名稱或數字指定一個系統。要指定全部系統調用,可以使用all做爲系統調用名稱。若是程序使用了這個系統調用,則開始一個審計記錄。能夠爲相同的規則指 定多個系統調用,每一個系統調用必須用-S啓動。在相同的規則中指定多個系統,而不是列出單獨的規則,這樣能夠致使更好的性能,由於只須要評價一個規則。
- F <name[=,!=,<,>,<=]value>
指定一個規則字段。若是爲一個規則指定了多個字段,則只有全部字段都爲真才能啓動一個審計記錄。每一個規則都必須用-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-<version>/目錄的*.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 <key>選項,則由觀察器產生的全部記錄會含有一個警報詞(限制爲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 ××× client
-w /usr/bin/***c -k ×××C -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 <backlog>
容許的未完成審計緩衝區的最大數目。內核中的默認值爲64。若是緩衝區已滿,則內核引用經過-f選項設置的失敗標誌,以肯定採起哪一個動做
-e [0,1]
設置爲0禁用審計,或者設置爲1啓用審計。對於爲了故障檢修或其餘目的而臨時禁用審計會頗有用
-f [0,1,2]
設置用於通知內核如何處理關鍵錯誤(好比審計緩衝區已滿或者內核內存用完)的失敗標誌。有效值是0(沒有動做),1(用printk將消息記錄到/var/log/messages)和2(混亂)。默認值爲1,可是2更安全。
-r <rate>
以每秒鐘的消息條數爲單位的速率限制。若是設置爲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 -<flag> -i
要顯示每一個日誌的啓動和中止時間,能夠添加-t選項:
aureport -<flag> -i -t
要顯示等於或早於特定時間的事件,能夠添加-te選項,並在後面跟着結束日期和結束時間。用數字格式表示您所在地點的日期和時間,並以24小時制格式表示時間。例如,對於en_us.UTF-8這個地方,可以使用日期格式MM/DD/YY:
aureport -<flag> -i -te <end date> <end time>
要顯示等於或者晚於特定時間的事件,添加-ts選項,後面跟着開始日期和時間。採用與-te選項相同的日期和時間格式化規則。
aureport -<flag> -i -ts <start date> <start time>
要僅顯示失敗事件,則使用- -failure,注意這個選項前面有兩條虛線而不是一條:
aureport -<flag> -i --failed
要僅顯示成功事件,則使用- -success,注意這個選項前面有兩條虛線而不是一條:
aureport -<flag> -i --success
有些報表也能夠用- -summary選項以彙總格式生成;注意這個選項前面有兩條虛線做前綴:
aureport -<flag> -i --summary
要產生彙總報表而不是關於一個地區的報表,可以使用-r選項:
aureport -r -i
要產生來自一個日誌文件的報表而不是默認報表,則可用-if選項指定它:
aureport -<flag> -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 <command to trace>
(4) 等待直到進程完成。將顯示一條相似於下面這個消息:
Trace complete. You can locate the records with 'ausearch -i -p 10773'
(5) 重啓審計守護進程來從新啓用規則和觀察器:
service auditd restart
(6) 用ausearch顯示關於跟蹤的詳細信息。node