7

我知道 Netlink 是在 Linux 中通信内核和用户空间的现代且正确的方式。

我有一个需要配置的内核模块,所以我使用 Netlink 让它与用户空间应用程序对话。

一切都很神奇,但在我看来,任何用户都可以与我的模块交谈。我可以使用权限等锁定应用程序,但该项目是开源的,因此任何用户都可以轻松编译用户空间应用程序。因此,任何用户都可以配置我的内核。这对我来说并不好。

似乎我在这里遗漏了一些非常重要的东西,但我找到的 Netlink 文档都是关于如何让它运行,而不是它如何适应现实世界。

如何限制对模块的 Netlink 套接字的访问?如果这是不可能的,还有什么可以做的呢?

4

1 回答 1

5

掌心

来自 RFC 3549:

Netlink 存在于由内核和用户空间分隔的单个主机的可信环境中。Linux 功能确保只有具有 CAP_NET_ADMIN 功能的人(通常是 root 用户)才能打开套接字。

内核应该是告诉模块是否应该让用户继续进行的人,而不是 Netlink。明显地。

只需在内核空间中编码即可

/* If the current thread of execution doesn't have the proper privileges... */
if (!capable(CAP_NET_ADMIN)) { /* Or CAP_SYS_ADMIN or whatever */
    /* Throw this request away. */
    return -EPERM;

, 完毕。

感谢ipcloudstadokoro引导我朝着正确的方向前进。

于 2014-02-21T23:17:53.457 回答