【问题标题】:Linux acquire root permissions through a password popupLinux 通过密码弹窗获取 root 权限
【发布时间】:2015-08-26 07:45:24
【问题描述】:

我正在编写一个需要执行磁盘安装的 python/Qt 应用程序。因此它需要root权限。有什么方法可以让脚本使用密码弹出窗口获取 root 权限,就像 gparted 一样? 我知道我可以在脚本中检测它是否已使用 sudo 运行,类似这样的东西(例如在 bash 中):

if [[ $(id -u) -ne 0 ]];

但是在此之后,我如何在运行时询问密码并获得root权限?

谢谢。

【问题讨论】:

    标签: python linux passwords superuser


    【解决方案1】:

    像这样:

    >>> import os
    >>> os.system("gksudo software-center")
    

    弹出 sudo 然后执行感兴趣的命令(此处为 Ubuntu 软件中心)。

    您可以使用任何子进程或其他调用 shell 命令的方式来编辑它。

    编辑:匿名投票者:gksudo 是这里的完美回应吗?您希望有人需要 root 访问权限,但他可能没有以 root 访问权限运行脚本。 gksudo 只是一个获取 root 权限以执行命令的接口,特别是对于 GUI,正是所要求的。

    请发表评论。

    【讨论】:

    • 谢谢。在我的 python 应用程序中,我使用了“gksudo whoami”,它无害但会弹出提示。有没有办法在不运行特定 shell 命令的情况下请求 sudo 权限?其次,我想在弹出的窗口中添加我自己的文本。例如,gparted 会弹出一个窗口,上面写着“需要身份验证......等等等等”。如何简单地检查 sudo 权限以弹出自定义身份验证窗口?
    • 它看起来像一个标准化的系统身份验证弹出窗口,因为它的侧面有一个图标(用于 gnome 密钥环),它结合了密钥环图像和应用程序图标的叠加图像(在本例中为 gparted )。但我不知道如何获得这种弹出窗口。
    • 我很感兴趣,但我不确定您为什么要重新发明轮子?由于 Unix 处理脚本的方式,您可能需要使用您感兴趣的消息实现绑定到 QMessageBox/QDialog 的 Rootwrap,例如: if event.accepted(): do some_task。要在纯 Python 中执行此操作,请尝试以下操作:ask.openstack.org/en/question/60893/… 然而,这正是 gksudo 存在的原因:从 sudo 不可用的脚本执行根任务。
    • 谢谢。 “为什么”是因为如果我执行“gksudo whoami”,弹出窗口会显示“该程序 whoami 正在请求 root 权限”。然而,我的父程序实际上需要 root 权限。这只会造成混乱,这就是为什么我想在弹出窗口中自定义消息或拥有自己的弹出窗口。
    • 您可以将脚本重命名为您的程序名称。然后,您不必担心。我仍然不明白为什么您需要特殊权限。或者,您可以传递消息标志来编写您自己的消息。例如,尝试:“gksudo whoami --message cool”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2021-07-12
    相关资源
    最近更新 更多