我正在创建一个应该在Linux上运行的图形安装程序.安装应包括将文件复制到某些地方/usr
.目前,安装程序是用Python编写的.
当我需要复制文件时,如何升级安装程序的权限?我查看了PolicyKit但是
a)PolicyKit似乎没有通用的"安装文件"action-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
是一个(非常)最后的手段.
你可能最好用一个前端包装RPM来获取用户选项并调用RPM来完成艰苦的工作.这也为您提供了管理依赖关系的基础架构,并与现有的包管理系统很好地配合.如果您需要在基于.deb的系统(Debian或Ubuntu)上运行,您可能还需要构建一个.deb并在前端放置一些机制来确定哪个包管理系统处于活动状态.
授予随机用户对root权限的访问权限在Linux或Unix系统(或任何多用户系统)上通常被视为不良形式,因为这是一个重大的安全风险.但是,~/bin
如果用户没有root访问权限或sudo权限允许用户写入系统区域,则可以选择让用户将其安装在主目录()下.在这种情况下,如果他们想要安装在/ usr/bin中,则可以要求他们以root身份安装它,但如果他们没有root权限,则允许他们将其安装在他们的主目录下供自己使用.