强制程序以Root身份启动,然后将其删除
Force Program to Start As Root and Drop it later
我希望程序以root身份启动,这样我就可以执行更新,然后删除权限。在Windows中,我只是使用manifest来提示用户,但在Linux中我找不到这样做的方法。我搜索了SO,发现了很多问题,问如何提升到root(这不是我想要的)。
一个很好的应用程序示例说明了我需要的是Synaptic Package manager(在Debian操作系统中)。当您单击图标启动它时,它会显示一个需要密码的对话框。那么你可以做任何事。
如果这还不清楚,我需要像gksudo myapp
这样的东西,这样它就会提示用户一个密码。无论你提出哪种方案,都将很好地添加如何将特权降到普通用户,这样我就可以再次启动我的普通应用程序(更新完成后)
如果不清楚,请指出,以便我澄清
我能想到的最简单的想法是制作一个单独的可执行文件,作为根用户工作。您可以使用gksudo
或kdesu
从具有根权限的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
)
相关文章:
- C++读取大文件并将其保存到字符串中,然后删除特定的随机单词
- 如何在C++中将类的实例完全重新分配给同一类的另一个实例(然后删除原始对象)?
- 如何检查单向链表的每个 3 个元素,然后删除其中一些元素?
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
- 截取屏幕截图,分析它,然后删除它
- 如何修改数组,从中删除空格,然后将其存储在新数组中
- 显示然后删除链接列表C
- 当我递增指针然后将其删除时,为什么我的程序会崩溃
- 删除后C 指针,然后给出值
- 删除指针的成员数组,然后重新分配它
- STD :: MAP-如何查找或添加,然后可以在一次搜索中删除项目
- 使用fstream在文件中覆盖一些文本,然后删除文件的其余部分
- 在2D向量中找到一个元素,然后将其删除
- std::vector 删除重复项,然后删除另一个向量中的相同索引
- 从文本文件中读取的代码,删除停止语,然后应用大小写折叠
- 复制阵列,然后删除原始阵列
- 我不能删除双向链表中的最小数字,然后删除下一个
- vector包含类对象,每个类对象包含3个字符串.我如何找到特定的字符串,然后删除整个元素
- 修改二进制查找查找然后删除
- 需要删除动态结构内容,然后删除结构本身