获取内核中套接字事件的通知



我需要为本地tcp-connections/Unix-domain-connections找到以最有效的方式启动连接的客户端进程。

我目前在驱动程序中为此实现了一个解决方案,它可以拦截接受和连接系统调用,匹配它们并找出客户端进程。

现在我尝试在没有自己的驱动程序的情况下实现相同的目标。

我尝试了不同的方法:

  • Linux 审计系统插件,用于拦截适当的系统调用并以类似的方式解析客户端。这种方法有3个问题:
    1. 每个截获的事件都从内核流向审计进程,再到其他一些中间进程,并且只流向我的插件。
    2. 审核
    3. 规则适用于所有插件和审核日志 - 我无法定义自己的一组过滤规则。 - 这可能会导致使用审计系统的机器效率极低。
    4. 它要求在计算机上安装审核(对于许多 Linux 发行版来说,这不是默认设置)。
  • 模仿netstat/lsof - 为了找到保存连接的进程,他们迭代整个procfs挂载 - 这是有道理的,因为在建立连接后,每个连接可以属于多个进程。 如果我想为每个连接建立这样做,这种方法非常无效。
  • 我想尝试一种 LSM(Linux 安全模块)解决方案 - 但我目前不熟悉它 - 他们的 LSM 是否可以为正在运行的应用程序传递内核事件以进行"决策"?

我很乐意听到建议和其他评论,这些建议和其他评论可以引导我为我最初的目标找到合理的解决方案。

找到了一个仅满足我对 Unix 域套接字需求的选项 - 如果在服务器端运行代码是可能的(就像我的情况一样),可以通过以下方式使用 getsockopt:

getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &len)

更多详情请见 http://welz.org.za/notes/on-peer-cred.html

最新更新