在查看 Syslog 文件時,是什麼阻止了 auditd 記錄 Syslog 的寫入?
我們最近開始在我們的一台 Ubuntu 伺服器上使用 auditd。
我們得到的範例 audit.rules 文件具有如下規則:
-w /var/log/syslog -p wra -k logs
但是,當 syslog 寫入文件時,auditd 不會記錄任何內容。同樣,如果我轉到命令行並執行
logger
命令,系統日誌文件將被寫入,而不會生成審核日誌。如果我通過使用編輯器直接更改文件或從命令行向其附加一行,它會被記錄下來。當然,我不希望每次寫入 syslog 時都需要審核日誌,但我很想知道是什麼導致了這種情況發生,以及除了 syslog 之外是否還有其他情況可能在我不知情的情況下發生這種情況。
非常感謝你!
附加資訊:
測試 audit.rules 文件:
-D -b 8192 -f 1 -w /var/log/syslog -p wra -k logs
auditctl -l
和的輸出augenrules --check
:# auditctl -l -w /var/log/syslog -p rwa -k logs # augenrules --check /sbin/augenrules: Rules have changed and should be updated
使用記錄器:
# logger "logger example" # ausearch -k logs ---- time->Fri Mar 10 14:35:20 2017 type=CONFIG_CHANGE msg=audit(1489156520.983:4463): auid=4294967295 ses=4294967295 op="add_rule" key="logs" list=4 res=1
使用回顯和輸出重定向:
# echo "echo example" >> /var/log/syslog # ausearch -k logs ---- time->Fri Mar 10 14:35:20 2017 type=CONFIG_CHANGE msg=audit(1489156520.983:4463): auid=4294967295 ses=4294967295 op="add_rule" key="logs" list=4 res=1 ---- time->Fri Mar 10 14:36:52 2017 type=PROCTITLE msg=audit(1489156612.334:4465): proctitle="bash" type=PATH msg=audit(1489156612.334:4465): item=1 name="/var/log/syslog" inode=417506 dev=08:01 mode=0100640 ouid=104 ogid=4 rdev=00:00 nametype=NORMAL type=PATH msg=audit(1489156612.334:4465): item=0 name="/var/log/" inode=411799 dev=08:01 mode=040775 ouid=0 ogid=108 rdev=00:00 nametype=PARENT type=CWD msg=audit(1489156612.334:4465): cwd="/etc/audit" type=SYSCALL msg=audit(1489156612.334:4465): arch=c000003e syscall=2 success=yes exit=3 a0=a93108 a1=441 a2=1b6 a3=7ffe24385b98 items=2 ppid=28462 pid=28463 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts18 ses=4294967295 comm="bash" exe="/bin/bash" key="logs"
/var/log/syslog 的尾部:
# tail -n 2 /var/log/syslog Mar 10 14:36:40 testserver root: logger example echo example
我已經理解了這種行為背後的原因。
該標誌的
auditctl
手冊頁指出:-p
描述文件系統監視將觸發的權限訪問類型。r=讀取,w=寫入,x=執行,a=屬性更改。這些權限不是標準的文件權限,而是可以做這種事情的系統呼叫。該集合中省略了讀取和寫入系統呼叫,因為它們會淹沒日誌。但是對於讀取或寫入,會查看打開標誌以查看請求的權限。
我當時不明白這是什麼意思,但是在深入研究 linux-audit 郵件列表幾個小時後,我意識到這意味著如果你查看一個文件進行寫入,它不會記錄何時有一個用於寫入文件的系統呼叫。它只是通過使用or標誌檢查
open
系統呼叫來記錄是否以寫權限訪問了文件。O_RDWR``O_WRONLY
因此,當我使用該
logger
命令時,我實際上是在要求我的 Syslog 守護程序為我寫入文件。syslog 守護程序始終打開該文件以進行寫入,因此沒有任何記錄是有道理的。如果我重新啟動 Syslog 守護程序,我會在我的審計日誌中看到類似的內容:
# ausearch -i -k logs ---- type=PROCTITLE msg=audit(10-03-2017 16:16:59.128:4613) : proctitle=/usr/sbin/rsyslogd -n type=PATH msg=audit(10-03-2017 16:16:59.128:4613) : item=1 name=/var/log/syslog inode=417506 dev=08:01 mode=file,640 ouid=syslog ogid=adm rdev=00:00 nametype=NORMAL type=PATH msg=audit(10-03-2017 16:16:59.128:4613) : item=0 name=/var/log/ inode=411799 dev=08:01 mode=dir,775 ouid=root ogid=syslog rdev=00:00 nametype=PARENT type=CWD msg=audit(10-03-2017 16:16:59.128:4613) : cwd=/ type=SYSCALL msg=audit(10-03-2017 16:16:59.128:4613) : arch=x86_64 syscall=open success=yes exit=6 a0=0x7f5848003fb0 a1=O_WRONLY|O_CREAT|O_NOCTTY|O_APPEND|O_CLOEXEC a2=0640 a3=0x7f5848000088 items=2 ppid=1 pid=10638 auid=unset uid=syslog gid=syslog euid=syslog suid=syslog fsuid=syslog egid=syslog sgid=syslog fsgid=syslog tty=(none) ses=unset comm=rs:main Q:Reg exe=/usr/sbin/rsyslogd key=logs