强制程序以Root身份启动,然后将其删除

Force Program to Start As Root and Drop it later

本文关键字:然后 删除 启动 身份 程序 Root      更新时间:2023-10-16

我希望程序以root身份启动,这样我就可以执行更新,然后删除权限。在Windows中,我只是使用manifest来提示用户,但在Linux中我找不到这样做的方法。我搜索了SO,发现了很多问题,问如何提升到root(这不是我想要的)。

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

如果这还不清楚,我需要像gksudo myapp这样的东西,这样它就会提示用户一个密码。无论你提出哪种方案,都将很好地添加如何将特权降到普通用户,这样我就可以再次启动我的普通应用程序(更新完成后)

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

我能想到的最简单的想法是制作一个单独的可执行文件,作为根用户工作。您可以使用gksudokdesu从具有根权限的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