Users

chpasswd 和 openssl

  • October 14, 2015

我正在嘗試將 MD5 密碼傳遞給 chpasswd,但它似乎不起作用。

echo username:$(openssl passwd -1 -salt salt password)

然後我嘗試將其傳遞給以chpasswd更改密碼

echo 'username:$1$salt$aldkjflsfj' | /usr/sbin/chpasswd -e

但是,當我這樣做時,密碼更改似乎沒有生效——/etc/shadow已更新,但如果我嘗試使用密碼,它就不起作用。

這確實有效:

echo username:password | /usr/sbin/chpasswd

passwd也有效

更多資訊:

$ S=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1)
$ echo username:$(openssl passwd -1 -salt "$S" password)
username:$1$nPkvS$eKljAIRsFLXOffXti.ZtO/
$ echo 'username:$1$nPkvS$eKljAIRsFLXOffXti.ZtO/' | chpasswd -e
$  grep username /etc/shadow
username:$1$nPkvS$eKljAIRsFLXOffXti.ZtO/:16722:0:99999:7:::

必須引用參數,否則 shell 會驗證這些參數中的特殊字元

echo "username:"$(openssl passwd -1 -salt "$salt" "$password")

在這裡使用雙引號,shell 評估變數。

現在,該echo命令也必須被引用:

echo 'username:$1$salt$aldkjflsfj' | ...

此處使用單引號,因為 $ 符號是條目的一部分並且必須保留。


警告:我不建議這樣更改密碼。這些命令,以及因此的普通密碼,可以在列表中看到,ps例如topopenssl對於這種情況有一種機制,可以從文件中讀取密碼。

引用自:https://unix.stackexchange.com/questions/236190