【问题标题】:How to verify a users password for root privledges in python如何在python中验证用户密码以获取root权限
【发布时间】:2014-01-22 13:35:33
【问题描述】:

我正在尝试编写一个 python 程序,该程序需要用户密码才能使用 subprocess 库运行一些外部命令。代码大致如下所示。

import subprocess

passwordInput = raw_input("What is your password: ")

subprocess.call('echo ' + passwordInput + ' | sudo -S pacman -Syy', shell=True)

这个程序可以正常工作,但是如果您输入了错误的密码,程序就会失败。我将如何添加某种防错功能来检测密码是否输入错误?

我在想也许可以将此代码包装在 while 循环中,然后使用 try-except 来测试密码,但是我不确定哪种 except 可以做到这一点。

非常感谢任何帮助。

【问题讨论】:

  • 为什么不在 sudoers 文件中添加该程序/用户组合并早点回家?
  • “回显密码”不会出现在 ps -ef 中吗?如果是,那就有点安全问题了。

标签: python linux passwords python-2.x


【解决方案1】:

放弃echo

import subprocess
subprocess.call(['sudo', '-S', 'pacman', '-Syy'])

sudo 程序会询问用户一定次数。你的 Python 程序不需要知道用户的密码。永远。

另一个问题是你使用shell=True,这意味着如果我的密码是$nakel0ver,因为我喜欢蛇,你的程序会将一个空密码传递给sudo

【讨论】:

  • 好吧,我将把这段代码移植到一个在第一次启动时运行的 GUI 前端,所以用户将无法在终端中输入,它将通过图形用户界面。
  • @josh: 然后用gksudo 什么的。
  • 是的,gksudo 是要走的路。
  • 整个程序不应该一直以root身份运行,否则我只会使用gksudo。我真的更希望有一些我在帖子中描述的代码,因为许多原因如果不解释程序的全部目的就很难解释。
  • 乔希:这是个错误。不要将密码存储在长时间运行的进程中,以便您可以运行 sudo。如有必要,以 root 身份运行守护程序并将命令转发给它。但我再说一遍,不要将用户的密码存储在您的进程中
猜你喜欢
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2022-09-30
  • 2014-03-28
  • 2012-07-15
相关资源
最近更新 更多