【问题标题】:How to validate correct password when using Python to launch shell script as sudo使用 Python 以 sudo 启动 shell 脚本时如何验证正确的密码
【发布时间】:2023-03-07 13:32:01
【问题描述】:

通过在stackoverflow上找到的大量搜索和使用sn-ps,我能够创建以下代码,允许我使用Python GUI启动shell脚本作为sudo并通过GUI输入密码,然后不等待 shell 返回,允许在 shell 脚本运行时更新进度条。

    build_script = ["Sudo -S sh dummyfile.sh"]
    sudo_password = 'password'
    sp = subprocess.Popen(build_script, shell=True, stdin=subprocess.PIPE, universal_newlines=True)
    sp.stdin.write(sudo_password+'\n')
    sp.stdin.flush()

如果密码第一次输入正确,则该工具运行正常。但是,如果密码输入错误,那么输入正确就会失败,需要关闭GUI再重新打开。

如何验证密码是否被以下人员接受:

    sp.stdin.write(sudo_password+'\n')

这样我就可以将错误返回给用户。

我明白我的尝试存在安全风险。我愿意接受可以让我:

  1. 验证密码是否正确
  2. 使用用户输入密码以 Sudo 身份启动 sh 文件
  3. 在 sh 脚本运行时继续运行 python(不要等待)

它需要与 Python 2.7 兼容,但我也在努力让它在未来在 Python 3 中运行。

感谢您的帮助!

【问题讨论】:

    标签: python-3.x python-2.7 shell subprocess sudo


    【解决方案1】:

    所以我无法在运行代码块中进行检查,所以我创建了一个新代码块来在运行脚本之前评估密码。

    Sudo -S cd 提升然后运行 ​​cd 什么都不做。无论如何,错误都会返回“密码:”,但如果密码错误,它会返回更多关于错误和错误尝试次数的信息。

        # Check password
        sudo_password = 'password'
        var = subprocess.Popen(["Sudo -S cd"], shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
        out, error = var.communicate(input=sudo_password+'\n')
    
        if error == "Password:":
            pass
        else:
            self.label_return['text'] = "Local Admin Password Incorrect"
            return
    
        # Launch bash script
        sp = subprocess.Popen(dummyscript.sh, shell=True, stdin=subprocess.PIPE, universal_newlines=True)
        sp.stdin.write(sudo_password+'\n')
        sp.stdin.flush()
    

    if error == "Password:" 有点乱,但到目前为止是一致的。

    【讨论】:

    • 所以这在 Python 3 中始终如一,但在 Python 2 中却没有。有时在 Python 2 中返回“密码:”,有时无论成功还是失败都不会返回任何内容。
    • Python 2 正在从终端 python myscript.py 启动。当我第一次打开终端并启动脚本时。任何后续时间都不会。这告诉我我正在打开的 shell 会话没有被关闭。 var.kill() 不这样做。
    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 2011-12-28
    • 1970-01-01
    • 2018-06-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多