我正在创建一个应该在 Linux 上运行的图形安装程序。安装应该包括将文件复制到/usr
. 目前安装程序是用 Python 编写的。
当我需要复制文件时,如何提升安装程序的权限?我查看了PolicyKit但
- a) PolicyKit 似乎没有通用的“安装文件”操作 ID
- b) 在我可以使用的操作 ID 中,我认为它们不是跨发行版的标准
我还查看了 PAM,我有使用 libpam 的代码,但我似乎无能为力。在对我的用户进行身份验证(通过提供用户名和密码)后,我没有对/usr
. 我尝试os.setuid(0)
在身份验证后更改我的用户,但我从操作系统收到错误消息。
此外,奇怪的是,我提供什么服务似乎并不重要pam_start
。只要用户名和密码正确,我就可以传递任何我想要的东西。我看我有/etc/pam.d/sudo
。下面的代码经过简化,密码正确存储在一个pam_conversation
对象中,我确实传递了一个句柄对象。
pam_start("my_user", "my_pass", "sudo_garbage_12345");
效果一样好
pam_start("my_user", "my_pass", "sudo");
也就是说,他们都成功了。
作为最后的手段,我可能可以执行gksudo
,kdesudo
但我不想被这些程序束缚。要求用户调用我的安装程序sudo
是(非常)最后的手段。