[英]Detect process creation in Linux kernel space
我正在编写一个监视正在运行的进程的Linux模块,并且我希望在创建新进程时得到通知。
我一直在研究,我了解到可以读取/ proc / some-id来获取进程信息,但是inotify不会向/ proc报告更改,因为它是虚拟fs。 它只在读取时提供信息。
这是我的调查结果,以防有人也试图解决类似的问题:
1. pnotify(流程通知)
链接: http : //lwn.net/Articles/153187/这是我最接近我想要做的,但它是在2005年发布的,似乎没有进入Linux发行版。 我们的想法是让innotify旁边有一个pnotify,并为流程监控提供类似的支持。
2.过程连接器
这个解决方案实际上是用户空间。 它使用PF_NETLINK与内核进行任何新创建的进程通信。
3.扫描task_struct
与2类似,但此解决方案使用内核扫描内核中的任务列表以查找新进程
for_each_task(task)
proc信息被写入char设备。 用户空间应用程序将通过读取char设备来轮询新信息。
TBH,我的希望仍然是linux有一些像Windows的PsSetCreateProcessNotifyRoutine这样的机制: - /
实现SE Linux安全模块并使用在fork()
的上下文中调用的诸如.task_create之类的钩子,或者在调用execv()
的过程中在各个点调用的一个或多个.bprm_ *钩子。 。
看这里:
http://en.wikipedia.org/wiki/Linux_Security_Modules
和这里:
http://selinuxproject.org/page/NB_LSM
这里有一个例子:
http://lxr.free-electrons.com/source/security/selinux/hooks.c
你需要做的大部分只是一个传递,在钩子之外,你可以在execv()
fork()
或execv()
时用作通知。
确保正确链接模块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.