簡體   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