我们最近开始在我们的一台 Ubuntu 服务器上使用 auditd。
我们提供的示例 audit.rules 文件有这样的规则:
-w /var/log/syslog -p wra -k logs
但是,当 syslog 写入文件时,auditd 不会记录任何内容。同样,如果我转到命令行并运行该logger
命令,则会写入 syslog 文件而不生成审计日志。如果我直接使用编辑器更改文件或从命令行向文件添加一行,则会记录它。
当然,我不希望每次写入 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 "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
答案1
我了解了这种行为背后的原因。
该标志auditctl
的手册页-p
指出:
描述文件系统监视将触发的权限访问类型。r=读取、w=写入、x=执行、a=属性更改。这些权限不是标准文件权限,而是执行此类操作的系统调用类型。由于读取和写入系统调用会使日志不堪重负,因此从此集合中省略了读取和写入系统调用。但对于读取或写入,将查看打开标志以查看请求了什么权限。
我当时不明白这是什么意思,但在花了几个小时研究 linux-audit 邮件列表后,我意识到这意味着如果你监视一个文件的写入,当有写入文件的系统调用时它不会记录。它只是通过使用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
答案2
您可以首先在 的输出中查找该规则,以检查该规则当前是否处于活动状态sudo auditctl -l
。
如果将 auditd 设置为使规则集不可变(例如,您的 /etc/audit/audit.rules 包含-e 2
),那么只有重新启动才能使新规则生效。
如果规则是可见的,你是否明白任何事物如果你跑步sudo ausearch -k logs
?另外,如果你跑步你会得到什么sudo augenrules --check
?
正如您所说,将每次写入记录到 /var/log/syslog(或 /var/log/messages)可能会有点嘈杂,因此您可以考虑排除 root 和/或用于非特权 syslog 组件的任何用户。一旦它起作用。