【发布时间】:2009-12-17 21:34:41
【问题描述】:
我正在创建一个应该在 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 调用我的安装程序是(非常)最后的手段。
【问题讨论】:
-
那么,让我直截了当...您希望能够为任何用户提供不受限制的(root)访问权限?
-
我想通过允许用户输入密码来模拟 sudo。如果用户无法通过使用 sudo 获得权限,他们也不应该使用我的安装程序来获得权限。我只是想给他们一个新手友好的方式来使用 sudo。
标签: linux installation privileges pam