强制程序以Root身份启动并稍后删除

时间:2013-12-02 18:43:27

标签: c++ linux wxwidgets root

我希望程序以root身份启动,以便我可以执行更新然后删除权限。在Windows中,我只是向前用户使用清单,但我找不到在Linux中执行此操作的方法。我搜索了SO,我发现了很多问题,询问如何提升到root(这不是我想要的)。

一个很好的应用程序示例说明了我需要的是Synaptic Package Manager(在Debian OS中)。当您单击图标以启动它时,它会显示一个需要密码的对话框。然后你可以做任何事情。

如果不清楚,我需要gksudo myapp之类的内容,以便提示用户输入密码。 无论你提出哪种方案,最好添加如何删除norma用户的权限,以便我可以再次启动我的普通应用程序(更新完成后)

如果不清楚,请指出以便我澄清

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的想法是创建一个单独的可执行文件,它以root用户身份运行。您可以使用gksudokdesu以root权限从GUI可执行文件启动它,并使用某种IPC方法(管道,unix消息队列,共享内存)连接到它。您可以在根进程完成工作时更新GUI。只有工作进程以root身份运行,因此当它完成时,GUI应用程序将具有正常的用户权限。

示例:

// this has to be executed in another thread because system()
// will block the GUI thread until the command finishes
int code = system("gksudo command");
if(code == 0)
    // command returned 0
else
    // non zero exit status - handle the error

如果要使用命令的用户输入参数 - 请勿使用system()。攻击者可以执行类似system("ls; rm -rf /")之类的操作。更好的选择是exec()(做man 3 exec