检测Linux内核空间中的进程创建

时间:2015-04-17 20:23:40

标签: c process module linux-kernel

我正在编写一个监视正在运行的进程的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这样的机制: - /

1 个答案:

答案 0 :(得分:4)

实现SE Linux安全模块并使用在fork()的上下文中调用的.task_create之类的钩子,或者在进程中的各个点调用的一个或多个.bprm_ *钩子。打电话给execv()

见这里:

http://en.wikipedia.org/wiki/Linux_Security_Modules

在这里:

http://selinuxproject.org/page/NB_LSM

这里有一个例子:

http://lxr.free-electrons.com/source/security/selinux/hooks.c

您需要做的大多数事情只是在挂钩之外传递,您可以在调用fork()execv()时将其用作通知。

确保正确链接模块。