如何记录在 Linux 上执行的所有命令,包括它们的命令行参数(参数)?
例如,如果有人运行:
rm -rf /tmp/foo
我会看到类似这样的日志条目:
2016-01-01 18:00:00 user=bob command='rm -rf /tmp/foo'
不仅如此:
2016-01-01 18:00:00 user=bob command='rm'
我只找到了auditd
不记录命令行参数(参数)的用途。有没有办法正确配置auditd
来记录这个?看起来 FreeBSD 有一个argv
制定政策的方式,但这似乎并不存在于 Debian 衍生产品中。
答案1
答案2
Auditd 真的很棒 :) 通过适当的配置,您可以根据需要查看所有这些事件(我将从我的一台服务器中给出一个示例)因此,正如您所看到的,在我的 ausearch 输出中,您可以看到调用了 /bin/rm 以及被删除的文件(我已将实际路径更改为 /tmp/X* - 并且如您所见,它接受所有参数 a1 到 a8)。如果这是您想要的,我可以为您提供一些我的配置以及我用来配置 auditd 的一些指南。
time->Thu May 28 11:35:01 2015
type=PATH msg=audit(1432812901.638:4583880): item=1 name=(null) inode=57348 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=PATH msg=audit(1432812901.638:4583880): item=0 name="/bin/rm" inode=8252 dev=08:02 mode=0100755 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1432812901.638:4583880): cwd="XXX"
type=EXECVE msg=audit(1432812901.638:4583880): argc=9 a0="rm" a1="-r" a2="/tmp/*" a3="/tmp/XX" a4="/tmp/XXX" a5="/tmp/XXXX" a6="/tmp/XXXXX" a7="/tmp/XXXXXXX" a8="/tmp/XXXXXXX"
type=SYSCALL msg=audit(1432812901.638:4583880): arch=c000003e syscall=59 success=yes exit=0 a0=1d27830 a1=1d27e20 a2=1d26870 a3=7fff70cfb2d0 items=2 ppid=10230 pid=10231 auid=1105 uid=1105 gid=1005 euid=1105 suid=1105 fsuid=1105 egid=1005 sgid=1005 fsgid=1005 tty=(none) ses=35220 comm="rm" exe="/bin/rm" key=(null)