python 中已验证用户接受的 `su` 密码
Validated `su` password in python accepted by user
我想验证用户脚本输入的 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 and 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")
我想验证用户脚本输入的 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 and 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")