我正在编写一个小型内核驱动程序,该驱动程序可以充当蜜罐并监视对系统上特定文件执行的操作。首先,请开始讲I used the code in this repository,为了简单起见,我对其进行了一些修改,使其仅适用于一个系统调用:sys_open
。
现在,我需要收集有关进程和运行该系统调用的用户的信息,以打开该文件,但是我找不到任何方法。我以为可以使用文件描述符来确定哪个进程具有文件描述符,但是在与我的大学教授讨论之后,他告诉我文件描述符不是系统范围内唯一的,而只是整个系统范围内的。
总结一下,有没有一种方法可以给我隐式调用sys_open
的进程的PID?
[以内核代码运行时,有关当前正在运行的进程的信息存储在current
全局变量中(确切地说,它实际上是特定于平台的宏而不是全局变量)。如果您在syscall处理程序(或一个钩子)中,则struct task_struct
将是启动syscall的过程,您只需检查struct task_struct
以获取其PID。
要获取当前进程的UID,GID,EUID,EGID(等等),您可以使用current
中定义的一组宏。从current->pid
:
[有一些方便包装器,用于检索任务凭证的特定方面(在每种情况下,都只返回该值):
linux/cred.h