我想验证由用户脚本输入的root密码,该脚本用于安装需要root的驱动程序。
如果我尝试将该安装程序作为sudo
或superuser privilege
运行,则会显示以下错误:
ERROR: installer must be run as root
我在脚本的开头借助
getpass()
方法接受密码,并且在密码执行期间会使用该密码,因此不想让用户等待那么长时间。我找到了what-is-the-best-way-for-checking-if-the-user-of-a-script-has-root-like-privileg和how-to-verify-a-users-password-for-root-privledges-in-python,但这将检查sudo密码的有效性,而不是
root
。我想检查密码是否对root登录有效。
如何使用python验证
user entered the password
对root
是正确的?除了我的知识是我需要考虑的问题之外,我还必须通过执行
su
操作来检查root密码的有效性。我们不能以root用户身份运行整个脚本,因为安装脚本将以普通用户身份运行某些测试之后。
最佳答案
在以某种方式阅读了很多东西之后,我发现我们可以通过Python脚本来验证root密码。以下是我的身份验证方法。
import subprocess
import getpass
FAIL = 'Password: \r\nsu: Authentication failure'
def validate_pass(passwd):
ret = 0
try:
cmd = '{ sleep 1; echo "%s"; } | script -q -c "su -l root -c ls /root" /dev/null' % passwd
ret = subprocess.check_output(cmd, shell=True)
return ret
except:
return 1
passwd = getpass.getpass(prompt='Password: ', stream=None)
res = validate_pass(passwd).strip()
if FAIL == res:
print(res)
print ("Invalid paasword")
else:
print(res)
print ("Valid paasword")