记录所有执行的命令,无论 shell 是什么?

记录所有执行的命令,无论 shell 是什么?

假设用户运行以下命令:

zcat file.gz | grep something | gzip > grepped.gz

我正在寻找一个内核功能(也许是 BPF 过滤器?),它会记录所有的execves,将它们的 stdins/stdouts 链接在一起,并以类似的形式重建它,将其放入系统日志中。有没有办法在不与外壳交互的情况下做到这一点?

答案1

使用流程会计

包通常被命名为psacctacct

安装需要的包

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

相关内容