记录每个 SUID 程序的每次调用?

Kim*_*Kim 12 linux security logs

我想要一个日志文件,其中包含每次用户运行任何 suid 程序时的条目,其中包含用户名、程序和传递给它的任何命令行参数。有没有标准的方法可以在 Linux 上实现这一点?

Gil*_*il' 7

您可以通过审计子系统记录特定可执行文件(setuid 与否)的所有调用。文档相当稀少;从auditctl 手册页本教程开始。最近的发行版提供了一个auditd包。安装它并确保auditd守护进程正在运行,然后执行

auditctl -A exit,always -F path=/path/to/executable -S execve
Run Code Online (Sandbox Code Playgroud)

并观察呼叫已登录/var/log/audit/audit.log(或您的发行版已设置的任何位置)。

  • @Kim:我认为您可以通过将 `-F path=...` 替换为 `-F euid=0 -F 'uid!=0'` 或类似的东西来记录非 root 用户对 setuid root 二进制文件的所有调用. 我在 [由`execve` 调用的 setxid 代码](http://lxr.linux.no/linux+v2.6.38/fs/exec.c#L1219) 中看不到钩子,也看不到特定的 setxid watch [审计子系统](http://lxr.linux.no/#linux+v2.6.38/kernel/auditsc.c)。或者,当然,您可以记录每个 `execve` 和 postprocess。 (2认同)