2009-12-17 35 views
1

我正在创建一个应该在Linux上运行的图形安装程序。安装应该包括将文件复制到/usr中的某些地方。目前安装程序是用Python编写的。以编程方式在Linux上升级特权

当我需要复制文件时,如何升级安装程序的权限?我看着PolicyKit

  • 一)似乎没有成为一个通用的“安装文件”动作id为PolicyKit的
  • 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调用我的安装程序是(非常)最后的手段。

+2

所以,让我直接得到这个...你想能够给任何用户无限制(根)访问权限? – davethegr8 2009-12-17 21:39:22

+1

我想通过允许用户输入密码来模拟sudo。如果用户无法通过使用sudo获得权限,则他们也不能使用我的安装程序执行此操作。我只是想给他们一个noob友好的方式来使用sudo。 – jonr 2009-12-17 21:59:43

回答

9

您可能会更好地将RPM包装在一个带有用户选项并调用RPM来完成艰苦工作的前端。这也为您提供了用于管理依赖关系的基础架构,并与现有的包管理系统完美搭配。如果您需要运行基于.deb的系统(Debian或Ubuntu),您可能还需要构建一个.deb并在前端放置一些机制来确定哪个软件包管理系统处于活动状态。

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

+0

+1:同意100%。 – jldupont 2009-12-17 21:43:19

-1

在这种情况下,最好的方法是在程序中使用su。重定向输入/输出,你很好去!

+0

您能否在“输入/输出”中提供更多信息? – 2010-06-30 09:18:23

2

对于图形安装程序,请坚持使用图形环境。如果可用,请使用gksudo或kdesudo,否则将失败,并显示错误对话框,说明它们需要root用户。人们(特别是新手)将下载您的安装程序并双击以从桌面启动它,并且您需要图形方式来询问他们的密码。你不想打开他们的终端。

鉴于此,即使他们从终端运行,也不要为他们做sudo。只是输出一个错误,说你需要root并退出。如果用户已经在命令提示符下(就像我最可能的那样),如果我想这样做,我已经知道如何sudo或将自己变为root。我向你保证,如果你试图让一个有经验的用户root成为他们自己可以做的事情,你很可能会弄出一些羽毛。

如果您在安装程序中亲自做了一个sudo,为了上帝的缘故,请在删除之前的时间戳之前强制使用'sudo -K'。如果你不这样做,而且我最近做了sudo,那么你会在我不知情的情况下以root身份运行你的安装程序(因为我不期望发生这种情况)。 'sudo -K'会强制提示我可以决定是否要以root身份进行操作。

相关问题