我们最近开始在我们的Ubuntu服务器上使用auditd。
我们给出的例子audit.rules文件有一个这样的规则:
-w /var/log/syslog -p wra -k logs
但是,当syslog写入文件时,没有任何内容被auditdlogging。 同样,如果我转到命令行并运行logger命令,系统日志文件将被写入而不会生成审计日志。 如果我通过使用编辑器直接更改文件或从命令行追加一行,它会被logging下来。
当然,我不希望在每次系统日志写入时都有一个审计日志,但是我有兴趣知道是什么原因导致这种情况发生,以及除syslog外还有其他什么情况,而这些情况可能在我不知情的情况下发生。
非常感谢你!
附加信息:
testingaudit.rules文件:
-D -b 8192 -f 1 -w /var/log/syslog -p wra -k logs
auditctl -l和augenrules --check输出augenrules --check :
# auditctl -l -w /var/log/syslog -p rwa -k logs # augenrules --check /sbin/augenrules: Rules have changed and should be updated
使用logging器:
# 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
使用回声和输出redirect:
# 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
我明白了这个行为背后的原因。
-p标志的auditctl手册页指出:
描述文件系统手表将触发的权限访问types。 r =读取,w =写入,x =执行,a =属性更改。 这些权限不是标准的文件权限,而是系统调用这种types的东西。 读取和写入系统调用从这个集合中被省略,因为他们会压倒日志。 但是,对于读取或写入,打开的标志被看作是什么权限被请求。
我当时不明白这是什么意思,但经过几个小时深入linux-audit邮件列表,我意识到这意味着如果你看一个文件写入,它不logging什么时候有一个系统调用写入文件。 它只是通过使用O_RDWR或O_WRONLY标志检查open系统调用来logging是否使用写入权限访问文件。
所以,当我使用logger命令时,实际上是要求我的Syslog守护进程为我写入文件。 系统日志守护进程始终将该文件打开进行写入,因此没有任何logging是有意义的。
如果我重新启动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
您可以通过在sudo auditctl -l的输出中查找规则来检查规则是否处于活动状态。
如果将auditd设置为使规则集不可变(例如,您的/etc/audit/audit.rules包含-e 2 ),则只有重新启动才会使新规则处于活动状态。
如果规则是可见的,如果你运行sudo ausearch -k logs ,你会得到什么 ? 另外,如果你运行sudo augenrules --check ,你会得到什么?
正如你所说,logging每个写入/ var / log / syslog(或/ var / log / messages)可能会有点吵,所以你可能会考虑排除root和/或无特权syslog组件的用户。 一旦工作。