Answers:
是的,这里有一个内核工具:审计子系统。该auditd
守护进程会进行记录,并命令auditctl
设置的日志记录规则。您可以通过过滤将所有呼叫记录到特定系统。如果要记录所有执行的命令及其参数,请记录execve
系统调用:
auditctl -a exit,always -S execve
要专门跟踪特定程序的调用,请在程序可执行文件上添加一个过滤器:
auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool
日志显示在中/var/log/audit.log
,或您的分发放置在任何地方。您需要是root用户才能控制审核子系统。
完成调查后,请使用同一命令行来-d
代替-a
删除日志记录规则,或者运行auditctl -D
以删除所有审计规则。
出于调试目的,用包装脚本替换程序可以使您更加灵活地记录诸如环境,有关父进程的信息等内容。
-F path=/ust/bin/rrdtool
呢?我什至不知道rrdtool
相关软件如何。
rrdtool
。如果要记录所有程序的调用,请删除该-F path=…
部分(当然,您会获得很多日志)。
auditctl
命令仅在重新启动后才有效?
auditctl
只有在重新启动后才能保持,但是无论如何,这是个好主意,我已经添加了有关删除它们而不重新启动答案的说明。
您可以使用snoopy。
Snoopy是一种更轻量级的解决方案,因为它不需要内核合作。所有需要的是动态加载程序(dl),该加载程序预装了snoopy库,该库的路径在中指定/etc/ld.so.preload
。
披露:我目前是史努比的维护者。
Linux内核“审核”子系统可以满足您的需求。
例如,如果您运行以下命令:
auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve
然后记录每个执行事件,并围绕该事件提供很多信息
例如,这是我跑步的结果 tail /var/log/audit/audit.log
exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64): cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67
可以看到一些有趣的值。例如,“ auid”为500,这是我的登录ID,即使“ uid”为零(“ cos我在之下运行” su
)。因此,即使用户可能已经切换了帐户,su
或者sudo
我们仍然可以追溯到其“审核ID”
现在,这些auditctl
命令将在重新启动后丢失。您可以将它们放入配置文件中(例如/etc/audit/rules.d/
,在CentOS 7 的目录中)。确切位置将取决于您的操作系统版本。该auditctl
手册将有助于在这里。
但是要当心……这将导致生成大量日志消息。确保磁盘上有足够的空间!
如有必要,可以将规则限制为特定用户或特定命令。
并且要当心;如果用户在执行命令中输入了密码(例如mysql --user=username --password=passwd
),则将其记录下来。
auditd
记录命令行参数以及程序是否运行?serverfault.com/questions/765179/…–