Linux(少なくともdebian)では、すべてのパスワードがハッシュされ、/etc/shadow
に保存されることを私は知っています。
ただし、libpam-cracklib
のおかげで、パスワードにいくつかのルールを追加できます。たとえば、/etc/pam.d/common-password
ではDifok
を設定できます。これは、古いパスワードと新しいパスワードの間で同じになる可能性のある文字数を示すパラメーターです。
しかし、Linuxは、新しいパスワードを入力すると、実際のパスワードを知らない(ハッシュがあるだけなので)古いパスワードとの類似性をどのように知ることができますか?
ありがとう!
PAMモジュールにパスワードの変更を依頼する(またはパスワードの変更に参加する)と、モジュールは、ユーザーから指定された新しいパスワードと古いパスワードの両方を取得できます。 Christopher が指摘するように、passwd
は、新しいパスワードだけでなく古いパスワードも要求します(root
として実行し、別のユーザーのパスワードを変更している場合を除く)。モジュールはその情報を使用して、現在のハッシュを逆にしたり、バリアントを列挙したりすることなく、両方のパスワードを比較できます。
関連するPAM関数には pam_sm_chauthtok
および pam_get_item
が含まれ、それらのドキュメント(およびそこで参照されている他のページ)は何が起こっているのかを理解するのに役立ちます。 libpam-cracklib
の- ソースコード でどのように行われるかを確認できます。