私自身の JAAS LoginModule のガイドラインとして、PAM モジュールがどのように設計されているかを調べています。私が驚いたことの 1 つは、ハッシュ化されたパスワードにアクセスするために使用されるメソッドは、ハッシュ メソッド自体とほとんど直交しているにもかかわらず、このプロパティをうまく利用する PAM モジュールを見つけることができなかったことです。私が見落としていたセキュリティ上の問題が原因なのか、それとも単にまだ調査されていないものなのか?
私の言いたいことをもう少し説明するために、ハッシュ化されたパスワードにアクセスするための 3 つの異なる方法 (LDAP、SQL、プレーン ファイル) と 2 つのハッシュ方法 (MD5、SHA1) があるとします。現在、アクセス方法ごとに 1 つ以上の PAM モジュールがあり、それぞれがこれらのハッシュ方法を 1 つ以上実装しています。新しいハッシュ メソッド (BCrypt など) を追加するということは、新しいハッシュ タイプをサポートするために、これらすべてのアクセス メソッドを変更する必要があることを意味します。より良い設計は、ユーザー名を使用してハッシュ化されたパスワードを取得するだけのアクセス方法ごとに 1 つの PAM モジュールを用意し、ハッシュ検証を実行する PAM モジュールの別のセットを用意し、ハッシュ値をモジュール間で共有することです (パスワードは)です。データベースを使用してパスワードを保存し、MD5 を使用してパスワードを確認すると、構成は次のようになります。
password required pam_sql.so
password required pam_md5.so
この構成では、pam_sql はハッシュ化されたパスワードをデータベースから取得します (ユーザー名が存在しない場合は失敗します)。次に、pam_md5 はハッシュされたパスワードとテストするパスワードを比較し、一致しない場合は失敗します。Bcrypt を使用する別の構成では、pam_md5 を pam_bcrypt に置き換えるだけで済みます。pam_sql の開発者が新しいハッシュ メソッド用に更新するのを待つ必要はありません。