chpasswdとopenssl

chpasswdとopenssl

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:::

答え1

パラメータは引用する必要があります。それ以外の場合は、シェルが確認します。特殊文字次のパラメータのうち:

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

シェルに変数を評価させるには、ここで二重引用符を使用します。

これでechoコマンドも引用する必要があります。

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

$記号は項目の一部であり、保持する必要があるため、ここでは一重引用符を使用します。


警告する:パスワードをこのように変更することはお勧めできません。これらのコマンドは、プレーンテキストのパスワードと一緒にリストに表示されpsますtopopensslファイルからパスワードを読み取るこのような状況のメカニズムがあります。

関連情報