1

我正在创建一个应该在 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");

也就是说,他们都成功了。

作为最后的手段,我可​​能可以执行gksudokdesudo但我不想被这些程序束缚。要求用户调用我的安装程序sudo是(非常)最后的手段。

4

3 回答 3

9

您最好使用前端封装 RPM,该前端采用用户选项并调用 RPM 来完成艰苦的工作。这也为您提供了管理依赖项的基础设施,并与现有的包管理系统很好地配合。如果您需要在基于 .deb 的系统(Debian 或 Ubuntu)上运行,您可能还需要构建一个 .deb 并在前端放置一些机制来确定哪个包管理系统处于活动状态。

在 Linux 或 Unix 系统(或与此相关的任何多用户系统)上,授予随机用户访问 root 权限通常被视为不好的形式,因为它是一个重大的安全风险。~/bin但是,如果用户没有允许他们写入系统区域的 root 访问权限或 sudo 权限,您可以选择让用户将其安装在他们的主目录 ( ) 下。在这种情况下,如果他们想安装在 /usr/bin 中,您可以要求他们以 root 身份安装它,但如果他们没有 root 权限,则允许他们将其安装在他们的主目录下供自己使用。

于 2009-12-17T21:42:03.010 回答
2

对于图形安装程序,请坚持使用图形环境。如果可用,请使用 gksudo 或 kdesudo,否则会失败并显示错误对话框,提示它们需要 root。人们(尤其是新手)会下载您的安装程序并双击以从他们的桌面启动它,您需要一种图形方式来询问他们的密码。你不想在他们身上弹出一个终端。

鉴于此,即使它们是从终端运行的,也不要为它们执行 sudo。只需输出一个错误,说明您需要 root 并退出。如果用户已经在命令提示符下(就像我最有可能那样),我已经知道如何 sudo 或 su 自己进入 root 如果我想这样做。我向您保证,如果您尝试让经验丰富的用户 root 自己做,您很可能会惹恼他们。

如果您坚持自己在安装程序中执行 sudo,看在上帝的份上,请在删除之前的时间戳之前强制执行“sudo -K”。如果您不这样做,并且我最近使用了 sudo,您将在我不知情的情况下以 root 身份运行您的安装程序(因为我不希望发生这种情况)。'sudo -K' 将强制提示,然后我可以决定是否要以 root 身份继续。

于 2009-12-17T22:52:02.030 回答
-1

在这种情况下,最好的方法是su在您的程序中使用。重定向输入/输出,一切顺利!

于 2009-12-17T21:44:23.120 回答