繁体   English   中英

使用 Python 作为 root 用户更新 UNIX 帐户密码的安全方法?

[英]Secure way to update UNIX account password using Python as root user?

考虑一个 UNIX 帐户jdoe 我想使用以root身份运行的 python 脚本更新jdoe的密码。 目前,我正在使用:

cmd = 'echo "' + username + ":" + new_pass + '" | chpasswd '
os.system(cmd)

然而,这是一种不安全的方法。 如果有人输入new_pass作为pass"; rm -rf / # ,那将是灾难性的。

有没有安全可靠的方法来做到这一点?

我会修改它,以便输入的密码得到散列(sha512 是现代 Linux 系统的标准),然后将散列值传递给您的 cmd。

cmd = 'echo "' + username + ":" + new_pass + '" | chpasswd -e'
os.system(cmd)

注意chpasswd后面的-e

进一步充实上述建议:

import crypt
entered_password = 'pass"; rm -rf / #'
new_password = crypt.crypt(entered_password, '$6$' + 'salt1234')

如果您担心不受信任的输入,最好避免使用os.system ,因为这会调用外壳程序,并且通常情况下,您不希望外壳程序靠近不受信任的输入。 此外,您通常希望避免将机密放入命令行参数中,因为其他用户可以读取它们,尽管因为echo通常是内置的,这在这里并不是严格意义上的问题。

要安全地执行此操作,您可以使用subprocess.Popen代替,如下所示:

import subprocess

proc = subprocess.Popen(['chpasswd'], stdin=subprocess.PIPE)
proc.stdin.write(b"username:password")

请注意,如果您需要将其他参数传递给chpasswd ,您可以通过向数组添加参数来实现:

proc = subprocess.Popen(['chpasswd', '-c', 'SHA512'], stdin=subprocess.PIPE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM