Linux

在查看 Syslog 文件時,是什麼阻止了 auditd 記錄 Syslog 的寫入?

  • March 10, 2017

我們最近開始在我們的一台 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

引用自:https://serverfault.com/questions/837472