一.audit介紹 audit是linux系統中用于記錄使用者底層調用情況的系統,如記錄使用者執行的open,exit等系統調用. 并會将記錄寫到日志檔案中. audit可以通過使用auditctl指令來添加或删除audit規則.設定針對某個使用者進行記錄,或針對某個 程序的進行記錄. audit主要包含2個指令: auditd audit服務程序 auditctl audit規則設定工具 二.audit的安裝 1.rpm包安裝 GTES10,10.5,11版本預設都已安裝audit包,可以直接使用. 2.源碼安裝 audit可以從源碼安裝. 源碼下載下傳位址: http://people.redhat.com/sgrubb/audit/ 安裝方法: # tar zxf audit-1.6.2.tgz # cd audit-1.6.2 # aclocal && autoconf && autoheader && automake # ./configure --sbindir=/sbin --mandir=/usr/share/man --libdir=/lib # make # make install 三.audit相關工具介紹 1.auditd介紹 auditd是audit系統的使用者空間程式.主要作用是将audit記錄資訊寫到磁盤上. audit在啟動時會讀取2個配置檔案: /etc/audit/auditd.conf audit配置檔案 /etc/audit/audit.rules audit規則檔案 audit安裝後,會生成這2個檔案. auditd使用方法: auditd [ -f ] -f auditd在前台運作,調試時使用. 2.auditctl介紹 auditctl用于對kernel中的audit進行控制,可以用來擷取audit狀态和增删audit規則. 指令使用方法: auditctl [options] -b <backlog> 設定audit緩沖大小(預設為64).若緩沖占滿了,則kernel會發出一個失敗标記. -e [0|1] 啟用/禁用audit稽核. -f [0..2] 設定失敗标記的等級,有0,1,2三個值,0是不輸出日志,1為輸出printk日志,2為最進階,會大量輸出 日志資訊.這個選項用于設定audit獲得錯誤的等級. 錯誤标記的觸發條件有:傳送錯誤到使用者空間 audit 程序,未處理事務超出範圍,超出核心記憶體範圍,超出速率範圍.預設值為1.在安全環境下可以 設定為2. -h 幫助 -i 從檔案讀取audit規則時,忽略錯誤. -l 顯示所有規則. -k <key> 為一條audit規則設定一個關鍵字.關鍵字可以是31個位元組長的字元串.用于過濾audit記錄. -m text 向audit系統發送一個資訊.隻限root使用者使用. -r <rate> 設定每秒的資訊速率.如果實際資訊數量超過這個速率,則将産生一個失敗标記. -R <file> 從一個檔案讀取規則.每行隻有一條規則.規則檔案的所屬使用者必須是root,并且其他使用者沒有 讀取權限.檔案裡可以使用以#開頭的注釋行. -s 輸出狀态資訊. -a <l,a> 将規則添加到一個清單的結尾.l表示清單,a表示這個規則的動作. 下面是可用的清單名稱: task 添加一條規則到每一個任務清單.這個規則清單隻在一個任務建立的時候使用 (當父程序調用fork(),clone()時). entry 添加一條規則到系統調用entry清單. exit 添加一條規則到系統調用exit表. user 添加一條到使用者資訊過濾表.在資訊被傳送到audit程序前,kernel使用這個清單在 使用者空間過濾事件資訊,可以使用的字段有: uid,auid,gid,pid. exclude 添加一條規則到事件類型排除表.這個表用于過濾掉不希望顯示的資訊. 如:不希望顯示任何avc的資訊,則在此清單中添加上它. 下面介紹在規則中可以使用的動作(a): never 不産生audit記錄. always 配置設定一個audit上下文,将它添加到系統調用開始時,并在系統調用退出時,寫出 一條記錄資訊. -A <l,a> 添加一條規則到清單的開頭. -d <l,a> 從清單中删除一條規則. -D 删除所有規則. -S [Syscall name or number|all] 可以使用系統調用名稱或數字.也可以使用all.也可以在一條規則中指定多個系統調用,以提升效率. -F [n=v | n!=v | n<v | n>v | n<=v | n>=v] 建立規則字段: 名稱,操作,參數.一個指令行可以有64個字段,每個字段必須以-F開頭.每個字段将會 觸發一個audit記錄.有=,!=,<,>,<=,>=運算符可以使用. 可以使用的字段有: a0, a1, a2, a3 4個數字參數用于表示系統調用.不可以使用字元串. arch 系統調用的cpu架構.可以使用'uname -m'獲得這個值.若不清楚機器的架構, 但需要使用32位系統調用表,而機器也支援32位,則仍可使用32位的系統調用表. auid 使用者登入的id. b32 cpu架構.64位系統可以使用b64. devmajor 裝置的主号碼 devminor 裝置的從号碼 egid 組id euid 使用者id exit 系統調用的傳回值 fsgid 檔案系統組id fsuid 檔案系統使用者id gid 組id inode Indoe号 key 設定過濾關鍵字 msgtype 用于比對資訊類型碼.僅用于排除過濾表中. obj_user 資源的SElinux的使用者 obj_role 資源的SElinux的角色 obj_type 資源的SElinux的類型 obj_lev_low 資源的SElinux的低層 obj_lev_high 資源的SElinux的高層 path 被監視的檔案的全路徑.僅用于exit表. pers 作業系統的編碼 pid 程序id ppid 程序的父id subj_user 程式的SElinux的使用者 subj_role 程式的SElinux的角色 subj_type 程式的SElinux的類型 subj_sen 程式的SElinux的敏感度 subj_clr 程式的SElinux的清除率 sgid sgid位 success 如果傳回值>=0,則為true或yes,否則為false/no. 編寫規則時,使用1代表true/yes,使用0代表false/no. suid suid位 uid 使用者id -w <path> 在指定路徑插入一個記錄器,不可以是最上層目錄,這是kernel所禁止的.并且不可以使用 通配符.記錄器會記錄inode内部的操作過程.如果在一個目錄中放置一個記錄器,會記錄到 各種檔案事件.但是,那隻是修改了中繼資料.這可能會丢失一小部分事件.如果需要監視目錄 中的所有檔案,建議為每個檔案放置一個記錄器.記錄器不同于audit規則,對性能沒有影響. -W <path> 從指定路徑中移出一個記錄器. 四.audit示例 # ps -ef | grep audit 若系統尚未啟動audit,手動啟動audit. # auditd 現在添加audit規則: 先檢視audit運作狀态 # auditctl -s AUDIT_STATUS: enabled=1 flag=1 pid=1585 rate_limit=0 backlog_limit=256 lost=0 backlog=0 檢視已有的audit規則 # auditctl -l No rules 添加一條audit規則,記錄maj使用者的所用open系統調用 # auditctl -a entry,always -S open -F uid=500 在另一個終端以maj使用者登入,登入後執行一個ls指令即可. 删除這條audit規則 # auditctl -d entry,always -S open -F uid=500 檢視audit日志,裡面有下面類似内容: type=SYSCALL msg=audit(1192418517.442:12): arch=40000003 syscall=5 success=yes exit=3 a0=3fc3b7 a1=0 a2=ffffffff a3=0 items=1 pid=31832 auid=4294967295 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 comm="ls" exe="/bin/ls" type=CWD msg=audit(1192418517.442:12): cwd="/home/maj" type=PATH msg=audit(1192418517.442:12): name="/etc/ld.so.cache" flags=101 inode=4674033 dev=03:05 mode=0100644 ouid=0 ogid=500 rdev=00:00 |