[Linux] 使用 auditctl 監控檔案的建立、存取與刪除
最近在找一個問題,Linux 上有檔案莫名其妙被砍掉了,
不過因為這問題不容易發生,所以也還不太容易找到…
找了一下,Linux 上面有 auditctl 可以用來記錄檔案的動作,
因此如果之後檔案有被刪掉,理論上可以從 audit log 裡面找出來原兇是誰…
auditctl 比較簡單的用法是直接用 -w 指定要監控的路徑,
例如我想要監控目錄 /test 下的所有活動:
用 -l 選項則可以秀出目前已經監控的路徑(其實是列出所有的規則):
執行結果如下:
當你對檔案做了一些動作之後,就可以用 ausearch 來觀察 audit log:
執行結果如下~
就可以看出來 /bin/bash 有處理過 test1.txt,
而 vi 的動作就比較複雜,會產生一些暫存檔如 .test2.txt.swp, .test2.txt.swx 等等~
如果想要比較人性化的輸出的話,可以加上 -i 的選項,如 ausearch -i -f /test
當監測完畢時,用 auditctl -D 就可以刪除掉所有的規則囉~
附註:這些 audit 檔案預設是存在 /var/log/audit 目錄下面:
如果需要修改一些設定像是紀錄檔的個數與大小的話,可以修改 /etc/audit/auditd.conf,
像 num_logs 代表檔案個數,max_log_file 是檔案大小(MB):
# This file controls the configuration of the audit daemon
#
log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 20
num_logs = 50
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file = 10
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
##tcp_listen_port =
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
xxx