【问题标题】:give a root privilege to a python GUI application to run a command in ubuntu授予 python GUI 应用程序 root 权限以在 ubuntu 中运行命令
【发布时间】:2016-11-23 07:57:31
【问题描述】:

现在,我有一个 python GUI 应用程序,它需要运行具有 sudo 权限的命令,如下所示:

import commands
iStat, askpassPath = commands.getstatusoutput("which ssh-askpass")
cmd = "export SUDO_ASKPASS=%s;sudo -A mkdir -p /usr/lib/test"%(askpassPath)
commands.getstatusoutput(cmd)

如果已经在 ubuntu 上安装了 ssh-askpass,这工作正常。但似乎有些 ubuntu 系统默认不安装它,而我无法为它们安装它。

所以,我需要知道是否有其他方法可以让我获得 sudo 权限。

提前致谢。

编辑:应用程序不应该以root权限启动。只有在运行时才需要获得root权限。

【问题讨论】:

  • 对我来说这是一个非常有趣的问题。我认为您应该在启动应用程序之前使用gksu / gksudo (How can I run an application with a GUI as admin) 作为前端应用程序以获得root 权限。在此之后,您应该执行一个根命令,然后您应该关闭权限。如果应用程序在没有 root 权限的情况下启动,您应该通知用户它。这就是我的看法。您可以在 wireshark 应用程序中看到类似的行为。
  • @first。这个解决方案不适合我,因为我们的应用程序是用于工作的,用户将无法以root权限运行它。另外,我不能给他们一个工具提示,因为其他功能不需要root权限,这会导致糟糕的用户体验。所以,我可以做的是在命令确实需要root权限时获得临时root权限来做某事.
  • ssh-askpass 只是一个显示对话窗口并将用户输入的密码写入标准输出的程序。我希望你可以做一些工具应用程序来完成这项工作并将其指定为SUDO_ASKPASS 程序sudo
  • @first。似乎有道理。我是否可以在ubuntu14.04和ubuntu16.04上用Qt编写一个工具应用程序。

标签: python linux user-interface ubuntu pyqt


【解决方案1】:

因为您是“我获得 sudo 特权的另一种方式”。您可以而且可能不应该以提升的权限运行应用程序。

我看到的一个选项是安装一个辅助二进制文件并将其与SUID-bit 一起存储。然后你可以调用这个二进制文件来执行你的操作。

如果您确实想以提升的权限运行,您可能需要查看consolehelper。甚至Qt wiki 也提到了这种方法。

为了给出更完整的答案,我将尝试列出您需要执行的步骤。这并不意味着是一套全面的说明。请参考文档。

基本上,试试

ln -s /usr/sbin/consolehelper /usr/bin/yourapp-root

然后配置 PAM(例如 /etc/pam.d/yourapp-root):

#%PAM-1.0
auth            include         config-util
account         include         config-util
session         include         config-util

然后是 /etc/security/console.apps/yourapp-root:

USER=root
PROGRAM=/usr/bin/yourapp

【讨论】:

  • 感谢您的帮助。有些人可以从我们的网站获取我们的“deb”格式的应用程序。所以我不能为他们做这些。并且从 ubuntu 软件中心安装应用程序也会弹出像我问题中的图片一样的对话框。所以我认为这是可行的。
猜你喜欢
  • 2012-04-29
  • 2013-01-29
  • 2021-04-13
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多