如何跟踪我的用户在 Linux 上创建的可执行文件?

Pie*_*pin 11 linux process monitoring

使用 Linux,我想跟踪以我的名义执行的可执行文件,包括整个命令行(实际上,每个 exec*() 都以我自己的用户身份完成)。我不控制的程序应该是为了处理任务,执行我传入的程序,但我想确保它这样做,以及它使用哪些选项。我无法控制的程序是偷偷摸摸的,并且似乎根据它应该为任务执行的程序的名称来改变行为,所以我不能传递一个 shell 脚本来记录信息并调用真实的程序。

是否有可能通知我在 Linux 系统上以我的用户身份执行的所有 exec*() 操作,包括完整的命令行?缺少ps循环运行,即。我宁愿直接在我工作的系统上执行此操作,不需要 root 访问权限,但如果需要,我可以生成一个具有 root 访问权限的系统,安装程序并在那里进行调查。

使用 Ubuntu 12.4 LTS。

Bra*_*ley 10

您需要配置auditd以记录execve事件。RHEL5 上的示例:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]#
Run Code Online (Sandbox Code Playgroud)

我忽略了拱形警告,这似乎无关紧要,但您可以根据需要使用-F arch=b64-F arch=b32设置它。

上面的结果是:

[root@ditirlns01 ~]# ls /tmp/whatever
ls: /tmp/whatever: No such file or directory
[root@ditirlns01 ~]# grep whatever /var/log/audit/audit.log
type=EXECVE msg=audit(1386797915.232:5527206): argc=3 a0="ls" a1="--color=tty" a2="/tmp/whatever"
type=EXECVE msg=audit(1386797927.133:5527241): argc=3 a0="grep" a1="whatever" a2="/var/log/audit/audit.log"
[root@ditirlns01 ~]#
Run Code Online (Sandbox Code Playgroud)

这显然又快又脏,但这是你如何做的基础。您究竟需要做什么可能在很大程度上取决于您想要做什么。您可以在auditctl命令中使用各种过滤器来减少审计流,但我不知道任何这些信息,所以我不知道要包含什么。如果您需要更具体的内容,我建议您查看手册页或对此答案发表评论,我会对其进行更多更新。

希望这有助于将您推向正确的方向。

编辑:

由于您的问题涉及查看特定用户,因此我可以向您展示:

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F euid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch
Run Code Online (Sandbox Code Playgroud)

与上述相同,但只有execve使用 的有效用户 ID 运行的人才16777216会被记录。如果您需要指定用户的loginuid值(他们最初以谁的身份登录系统),那么您可以使用以下过滤条件auid

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216
WARNING - 32/64 bit syscall mismatch, you should specify an arch
Run Code Online (Sandbox Code Playgroud)

AUID/loginuid 过滤器将很有用,例如,如果用户将执行 asusudoto root。在这种情况下,会有很多东西以 root 身份运行,但您只关心由相关用户启动的东西。auditctl还允许您堆叠过滤器,以便您可以同时过滤euidauid

[root@ditirlns01 ~]# auditctl -a always,entry -S execve -F auid=16777216 -F euid=0
WARNING - 32/64 bit syscall mismatch, you should specify an arch
[root@ditirlns01 ~]# ls /tmp/nashly -ltar
ls: /tmp/nashly: No such file or directory
[root@ditirlns01 ~]# grep nashly /var/log/audit/audit.log
type=EXECVE msg=audit(1386798635.199:5529285): argc=4 a0="ls" a1="--color=tty" a2="/tmp/nashly" a3="-ltar"
type=EXECVE msg=audit(1386798646.048:5529286): argc=3 a0="grep" a1="nashly" a2="/var/log/audit/audit.log"
Run Code Online (Sandbox Code Playgroud)