我希望程序以root身份启动,以便我可以执行更新然后删除权限。在Windows中,我只是向前用户使用清单,但我找不到在Linux中执行此操作的方法。我搜索了SO,我发现了很多问题,询问如何提升到root(这不是我想要的)。
一个很好的应用程序示例说明了我需要的是Synaptic Package Manager(在Debian OS中)。当您单击图标以启动它时,它会显示一个需要密码的对话框。然后你可以做任何事情。
如果不清楚,我需要gksudo myapp
之类的内容,以便提示用户输入密码。
无论你提出哪种方案,最好添加如何删除norma用户的权限,以便我可以再次启动我的普通应用程序(更新完成后)
如果不清楚,请指出以便我澄清
答案 0 :(得分:1)
我能想到的最简单的想法是创建一个单独的可执行文件,它以root用户身份运行。您可以使用gksudo
或kdesu
以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
)