我知道Netlink是在Linux中交stream内核和用户空间的现代和正确的方式。
我有一个需要configuration的内核模块,所以我使用Netlink与用户空间应用程序交谈。
一切都是奇迹,但在我看来,任何用户都可以跟我的模块交谈。 我可以使用权限等来locking应用程序,但项目是开源的,所以任何用户都可以轻松地编译用户空间应用程序。 Ergo, 任何用户都可以configuration我的内核 。 这不适合我。
看来我在这里丢失了一些非常重要的东西,但是我发现Netlink的文档是关于如何让它运行,而不是如何适应现实世界。
我怎样才能限制访问模块的Netlink套接字? 如果这是不可能的,还有什么可以做的呢?
捂脸
从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;
,完成。
感谢ipclouds和tadokoro引导我朝着正确的方向发展。