【发布时间】:2013-04-26 07:31:59
【问题描述】:
我正在通过 libkmod (https://github.com/profusion/kmod) 从我的应用程序中加载一个 Linux 内核模块,并且一切正常(因为模块在我想要的时候被加载和卸载),但为此我需要运行我的整个以 root 身份(或特权用户,例如 sudoers)进行编程。
我希望能够以普通用户身份加载应用程序,然后询问 root 用户的密码(用户在 sudoers 中)setuid(0); 只是为了加载模块然后恢复旧的 uid .
我的问题是:如何通过某种 UI 对话框(当我尝试通过 KDE 的控制面板更改某些内容时出现的那个)询问 root用户的密码?
问候
编辑:我不会接受像 system("kdesu/gksu my_app") 或 popen() 和家人这样的方法。我正在寻找一种调用密码提示的编程方式。我也不会接受特定于 DE 的答案(请参阅 kdesu 和 gksu)。我正在寻找适用于每个符合 XDG 的 DE 的东西。最后,不需要密码提示存在。我可以在 Qt 中创建一个简单的对话框并询问密码,然后用它来调用任何接受它的函数,比如setuid('password', 0)。
【问题讨论】:
-
-1 您的“不接受”标准表明拒绝理解合理的设计实践以及 unix 风格操作系统的安全性如何工作,特别是进程和安全上下文之间的关联。
-
我的“不接受”标准表明拒绝做我所要求的糟糕、粗俗和糟糕的方法。不多也不少。我会接受任何适合我需要的答案,或者可以解释为什么我所问的问题是不可能的答案。
-
您最好考虑一下使用密码实际上可以做什么。内核一点也不关心密码。相反,密码所做的只是(如果它检查的话)说服现有的 setuid 可执行文件(例如 login 或 sudo)以给定的潜在不同用户身份启动 shell 或其他请求的进程,例如超级用户。所以最终,你将不得不执行一些 setuid 程序来做你想做的事。自己获取用户密码不会改变这一点,而且这是不好的做法。
标签: c++ c linux permissions linux-kernel