我试图弄清楚当用户Permission denied
在尝试访问文件后收到通知时如何记录/跟踪。我读过添加规则可以/etc/audit/audit.rules
实现此目的。
我见过的唯一建议似乎没有按预期工作。或者,至少,它没有达到我想要的效果。它很可能按照它所写的方式工作。规则是
-a always,exit -F arch=b64 -S open -F success!=0
实际上,上面链接的建议不包括 arch 选项。我必须补充一点。
当尾随时,/var/log/audit/audit.log
我看到了所说的一切success=yes
。这包括当我单击窗口并更改焦点或输入组合键以在窗口功能之间进行更改时。我没有看到与Permission denied
包含success=no
条目相关的任何内容或与我尝试打开的特定文件有关的任何内容,但我知道我没有该文件的权限。
我只能明确地说,当我 grep for success=no
in时/var/log/audit/audit.log
,什么也没有返回。
规则应该是什么?或者更好的是,这实际上可能吗?上面的解决方案不正确吗?
答案1
我一直在使用工具,发现如果我使用success!=1
thenaudit.log
将显示指示success=no
.这对我来说似乎违反直觉,因为非零退出代码通常表示某种失败,但!=1
也可以是任何内容,包括其他失败退出代码以及成功 ( 0
)。但有趣的是,这些并没有出现。
另一个问题是它没有指示哪个文件访问失败。相反,它仅列出返回失败退出代码时运行的命令。就我而言,我正在跑步cat /etc/shadow
。所以,与其看到
type=SYSCALL msg=audit(1438754257.463:11451): arch=c000003e syscall=2 success=no exit=-13 a0=7ffea511f35f a1=0 a2=1ffffffffffe0000 a3=0 items=1 ppid=1650 pid=5489 auid=1000 uid=1000 gid=100 euid=1000 suid=1000 fsuid=1000 egid=100 sgid=100 fsgid=100 tty=pts0 ses=1 comm="cat" exe="/usr/bin/cat" key="access"
type=CWD msg=audit(1438754257.463:11451): cwd="/home/msnyder"
type=PATH msg=audit(1438754257.463:11451): item=0 name="/etc/shadow" inode=1131047 dev=00:20 mode=0100640 ouid=0 ogid=15 rdev=00:00 nametype=NORMAL
我只会看到
type=SYSCALL msg=audit(1438752096.223:4952): arch=c000003e syscall=2 success=yes exit=3 a0=7f77d575c057 a1=80000 a2=1 a3=22 items=1 ppid=1650 pid=4873 auid=1000 uid=1000 gid=100 euid=1000 suid=1000 fsuid=1000 egid=100 sgid=100 fsgid=100 tty=pts0 ses=1 comm="cat" exe="/usr/bin/cat" key=(null)
type=CWD msg=audit(1438752096.223:4952): cwd="/home/msnyder"
然后我查看了audit.rules
联机帮助页。尤里卡!答案一直就在那里:
-a always,exit -F arch=b64 -S open,openat -F exit=-EACCES -F key=access
-a always,exit -F arch=b64 -S open,openat -F exit=-EPERM -F key=access
这两个规则结合起来解决了问题。它不仅会记录失败的文件访问,还会记录尝试访问的文件。这会产生上面的前三个日志条目,其中包括文件名。