c++ - 如何以编程方式获得 root 权限?

标签 c++ root elevated-privileges

我正在编写一些软件(在 C++ 中,用于 Linux/Mac OSX),它以非特权用户身份运行,但在某些时候需要 root 特权(以创建新的虚拟设备)。

以 root 身份运行此程序不是一种选择(主要是出于安全问题),我需要知道“真实”用户的身份 (uid)。

有没有办法模仿“sudo”命令行为(询问用户密码)来临时获得 root 权限并执行特定任务?如果是这样,我会使用哪些功能?

非常感谢您的帮助!

最佳答案

如果您每次都需要 root 权限,最好的办法是以 root 身份启动您的程序并使用 setuid 删除它们(在子进程中)和 setgid .这就是 apache 在需要绑定(bind)到受限端口 80 时所做的。

如果获得root权限是异常(exception)而不是规则并且程序交互运行,另一种方法是编写程序add_interface并执行

sudo add_interface args

让 sudo 为您处理身份验证。您可能想要使用图形前端而不是 sudo,例如 gksu、gksudo、kdesu 或 kdesudo。我不会尝试自己实现安全密码输入;这可能是一个棘手的问题,您可能会留下巨大的安全漏洞和功能问题(您支持指纹读取器吗?)。

另一种选择是polkit ,以前称为 PolicyKit。

关于c++ - 如何以编程方式获得 root 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2483755/

相关文章:

c++ - 如何减小C++标准库libstdc++.so文件大小

database - 如何使用 oracle-10g 在层次结构查询中获取根祖先?

c++ - 我如何区分用户是 root 还是用户是 sudo

c++ - 在 MacOSX 下用 C 启动特权应用程序

为提升的 Silverlight 应用程序启用 AllowElevatedTrustAppsInBrowser 的安全问题

C++输入重载陷入while循环

c++ - "if(pointer) delete ponter"即使指针未初始化也尝试删除

windows - 如何使批处理文件自行删除?

c++ - Edit Control 或 MessageBox() 中的表格字符串格式

linux - 如何在 Hudson 作业中以 root 身份执行命令行?