auditctl
是一个很棒的实用程序,用于监视许多事情,例如执行的系统调用。
理想情况下,我想知道实例化每个记录的系统调用的 CPU 或 POSIX 线程。在日志中,我看到:
type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)
我认为这些都不起作用,除非我错过了一些东西。有谁知道我想要的是否可能?谢谢。
答案1
通过管道传输您的审核线ausearch -i
至少可以从中获取最多的信息:
» echo "type=SYSCALL msg=audit(1561851079.335:286): arch=c000003e syscall=9 success=yes exit=140507297914880 a0=0 a1=1000 a2=3 a3=22 items=0 ppid=22818 pid=24283 auid=1005 uid=1005 gid=1005 euid=1005 suid=1005 fsuid=1005 egid=1005 sgid=1005 fsgid=1005 tty=pts0 ses=89 comm="my_benchmark" exe="my_benchmark" key=(null)" | ausearch -i
----
type=SYSCALL msg=audit(06/30/2019 01:31:19.335:286) : arch=x86_64 syscall=mmap success=yes exit=140507297914880 a0=0x0 a1=0x1000 a2=PROT_READ|PROT_WRITE a3=MAP_PRIVATE|MAP_ANONYMOUS items=0 ppid=22818 pid=24283 auid=unknown(1005) uid=unknown(1005) gid=dovenull euid=unknown(1005) suid=unknown(1005) fsuid=unknown(1005) egid=dovenull sgid=dovenull fsgid=dovenull tty=pts0 ses=89 comm=my_benchmark exe=my_benchmark key=(null)
AFAIK,线程 ID 仅记录内核生成的系统调用,然后放置在该pid
字段中。参考:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/app-audit_reference在下面pid
:
字段
pid
语义取决于该字段中值的来源。在从用户空间生成的字段中,该字段保存进程 ID。在内核生成的字段中,该字段保存线程ID。对于单线程进程,线程 ID 等于进程 ID。请注意,该线程 ID 的值与用户空间中使用的 pthread_t ID 的值不同。有关更多信息,请参见 gettid(2) 手册页。
我不知道如何审核用户生成的系统调用的线程 ID。