web-dev-qa-db-ja.com

スクリプトによるrootパスワードの変更は失敗しますが、成功を報告します

CentOS7インストールでルートパスワードを変更するためのスクリプト/一連のコマンドを作成する必要があるプロジェクトがあります。

スクリプトを実行するユーザーはすでにrootであると想定できます。

現在、私は以下を使用しており、成功メッセージを受け取っています。

[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root)
Changing password for user root.
passwd: all authentication tokens updated successfully.

ただし、これによって実際にパスワードが変更されることはありません。さらに詳しく調べると(手動でパスワードを設定)、パスワードpasswordが辞書チェックに失敗しましたが、最後に成功を報告しています。

[root@localhost]# passwd
Changing password for user root.
New password:
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary Word
Retype new password:
passwd: all authentication tokens updated successfully.

考えられる解決策の1つは、/etc/shadowで提供される方法とソルトに基づいて、指定されたパスワードをハッシュすることですが、過度に複雑な解決策は避けたいと思います。 /etc/shadowの値が実際に変更されたかどうかを確認することもできますが、パスワードが既存のパスワードに設定されている場合は無視されます。これをサポートしたいと思います。

パスワードを実際に設定する前に、またはできればpasswdから完全な出力を取得する前に、パスワードを検証しようとする提案がありますか?

2
example6

passwd --stdinを使用する場合、パスワードを送信する必要があるのは1回だけです。だから正しいバージョンは

echo password | passwd --stdin

コードサンプルが正確である場合、(a)簡単な引用符が必要なときにスマート引用符があり、(b)パスワードが「password\npassword」のようなものに設定されている可能性があります(おそらくどちらかの側にスマート引用符があります)。

4
Paul Haldane

passwdコマンドで物事を機能させることは、伝統的にインタラクティブで自動化するのが面倒なので、印象的です。 (比較的苦痛のないgnu世代に賛成です。)しかし、自動化を行っている場合は、 chpasswd のように、より自動化に適したコマンドを使用してみませんか?

echo root:password | chpasswd

あなたが上でしていることをします。また、一度に50を実行する場合は、username:passwordの行をさらに送信するだけです。

0
chicks