ldappasswd で使用されるパスワード保護スキーム (ハッシュ関数など) を定義するにはどうすればよいでしょうか?

ldappasswd で使用されるパスワード保護スキーム (ハッシュ関数など) を定義するにはどうすればよいでしょうか?

私はOpenLDAP 2.6を使用しています。オブジェクトのパスワードを設定すると、

ldappasswd -x -D <dn of root user> -W -S <dn of object whose pwd shall be set>

すると、パスワードのハッシュの一部が属性に格納されますuserPassword

どのようなハッシュ関数をldappasswd使用していますか? ハッシュ関数をどのように設定しますか? 見たところ、デフォルトで SHA1 になっているようですが、これはもはや安全ではありません。

答え1

ldappasswd はどのようなハッシュ関数を使用しますか?

技術的には何もありません。LDAP拡張操作「パスワードの変更」を呼び出すだけで、LDAPサーバ適切と思われるハッシュ関数を使用します (そして、適切と思われる場所にハッシュを保存します。必ずしも userPassword に保存する必要はありません)。

したがって、「パスワード変更」exop で使用されるハッシュはサーバー側で設定されます。OpenLDAP の場合、これはハッシュolcPasswordHashと同様に、デフォルトで「SSHA」(ソルトおよび反復 SHA-1) に設定されるパラメータです$1$。より強力なものが必要な場合は、{CRYPT}システムの crypt() 関数が提供するハッシュ アルゴリズム (つまり、/etc/shadow と同じ – OS が libxcrypt を使用している場合は bcrypt または yescrypt、そうでない場合は同じ種類のソルト付き SHA) を使用するか、または {ARGON2}追加の slapd-argon2 モジュールがインストールされている場合 (OpenLDAP の一部ですが、「contrib」ツリーにあります)。

slapd.conf cn=設定
デフォルト (反復/ソルト付き SHA-1):
password-hash {SSHA}
デフォルト:
olcPasswordHash: {SSHA}
libxcrypt が使用されている場合、yescrypt を使用したシステム crypt():
password-hash {CRYPT}
password-crypt-salt-format $y$%.16s
(テストは行われていませんが、動作すると思います)
yescrypt を使用したシステム crypt():
olcPasswordHash: {CRYPT}
olcPasswordCryptSaltFormat: $y$.16s
slapd モジュールが利用可能な場合は Argon2:
moduleload argon2
password-hash {ARGON2}
slapd モジュールが利用可能な場合は Argon2:
olcModuleLoad: argon2
olcPasswordHash: {ARGON2}

関連情報