![记录所有执行的命令,无论 shell 是什么?](https://linux22.com/image/220147/%E8%AE%B0%E5%BD%95%E6%89%80%E6%9C%89%E6%89%A7%E8%A1%8C%E7%9A%84%E5%91%BD%E4%BB%A4%EF%BC%8C%E6%97%A0%E8%AE%BA%20shell%20%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
假设用户运行以下命令:
zcat file.gz | grep something | gzip > grepped.gz
我正在寻找一个内核功能(也许是 BPF 过滤器?),它会记录所有的execve
s,将它们的 stdins/stdouts 链接在一起,并以类似的形式重建它,将其放入系统日志中。有没有办法在不与外壳交互的情况下做到这一点?
答案1
使用流程会计
包通常被命名为psacct
或acct
安装需要的包
sudo apt install acct
启动守护进程自动启用进程记帐
sudo systemctl enable --now acct.service
检查上次运行命令执行lastcomm
使用auditd
安装auditd守护进程
在启动时启用它
sudo systemctl enable auditd
添加以下规则
sudo auditctl -a always,exit -F arch=b64 -S execve -k search_comment
现在查看所有用户记录的消息
sudo ausearch -k search_comment
或通过特定UID搜索
sudo ausearch -k search_comment -ui 1000