web-dev-qa-db-ja.com

Linuxはどのようにして古いパスワードと新しいパスワードを比較できますか?

Linux(少なくともdebian)では、すべてのパスワードがハッシュされ、/etc/shadowに保存されることを私は知っています。

ただし、libpam-cracklibのおかげで、パスワードにいくつかのルールを追加できます。たとえば、/etc/pam.d/common-passwordではDifokを設定できます。これは、古いパスワードと新しいパスワードの間で同じになる可能性のある文字数を示すパラメーターです。

しかし、Linuxは、新しいパスワードを入力すると、実際のパスワードを知らない(ハッシュがあるだけなので)古いパスワードとの類似性をどのように知ることができますか?

ありがとう!

4
Peni

PAMモジュールにパスワードの変更を依頼する(またはパスワードの変更に参加する)と、モジュールは、ユーザーから指定された新しいパスワードと古いパスワードの両方を取得できます。 Christopher が指摘するように、passwdは、新しいパスワードだけでなく古いパスワードも要求します(rootとして実行し、別のユーザーのパスワードを変更している場合を除く)。モジュールはその情報を使用して、現在のハッシュを逆にしたり、バリアントを列挙したりすることなく、両方のパスワードを比較できます。

関連するPAM関数には pam_sm_chauthtok および pam_get_item が含まれ、それらのドキュメント(およびそこで参照されている他のページ)は何が起こっているのかを理解するのに役立ちます。 libpam-cracklibの-​​ ソースコード でどのように行われるかを確認できます。

3
Stephen Kitt