「openldap」の版間の差分
提供: 個人的記録
(→ユーザパスワード検証) |
(→参考ページ) |
||
103行目: | 103行目: | ||
:* https://stackoverflow.com/questions/16247552/easy-way-to-test-an-ldap-users-credentials | :* https://stackoverflow.com/questions/16247552/easy-way-to-test-an-ldap-users-credentials | ||
:* https://www.saka-en.com/java/java-ldap/ | :* https://www.saka-en.com/java/java-ldap/ | ||
+ | * sasl | ||
+ | :* https://gihyo.jp/admin/serial/01/ldap/0018 | ||
+ | :* https://atmarkit.itmedia.co.jp/ait/articles/0901/21/news123_3.html |
2022年10月23日 (日) 17:22時点における版
LDAPがよくわからないので openldap を入れていろいろ試した記録
環境
- hyper-v + rocky linux 9
インストール
- dnfでインストールを試みたが、openldap-servers パッケージが入っていない。
- どうやら plus リポジトリに入っているようなので以下のコマンドで plus リポジトリからインストールする。
dnf --enablerepo=plus install openldap-servers openldap openldap-clients
- openldap のサービスは slapd で登録されているので、 systemctl status slapd でサービスの状態を確認する。
- 管理ツリーにパスワードを登録する。
- そのままだと何もできないので管理ツリーにログインできるようにパスワードを登録する。
- 管理ツリーのパスワードは ldif ファイルに記述してopenldapにインポートする。
- ldifに平文でパスワードを書くと平文のまま登録されてしまうので、ハッシュ化するなら事前に行う必要がある。
- ハッシュ化したパスワードは以下のコマンドで生成できる。ただし、デフォルトではsha1でハッシュ化する。sha256を使うには別途モジュールが必要らしいが、今回はldapの学習用環境なのでそこまでしない
slappasswd
- 新規にldifファイルを作成し、下記のように編集する。
dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootDN olcRootDN: cn=config dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPw olcRootPW: <slappasswdで生成したパスワード文字列>
- 「olcDatabase={0}config,cn=config」に olcRootDN と olcRootPw の項目を追加するldifファイル。
- 作成済みの olcDatabase は 「/etc/openldap/slapd.d/cn\=config/」にファイルとして保存されている。
- インストールした環境でみたところ、以下のものが登録済み
- olcDatabase={-1}frontend.ldif
- olcDatabase={0}config.ldif
- olcDatabase={1}monitor.ldif
- olcDatabase={2}mdb.ldif
- 以下のコマンドを実行し、作成したldifファイルを反映する。
ldapadd -Y EXTERNAL -H ldapi:// -f <作成したldifファイル>
- apache directory studio なりのツールで cn=config に接続してみる。パスワードは slappasswd で設定したハッシュ化前のパスワードを使用する。接続できれば設定はできている。
- このままだと BindDN が cn=config でしかつなげないので都合が悪い。以下のようなldifファイルを作成して指定したldifで指定したDCで接続できるようにする。
dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=example,dc=com #ドメインの指定 dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=Manager,dc=example,dc=com #ログインIDの指定。cnで指定する。 dn: olcDatabase={2}mdb,cn=config changetype: modify add: olcRootPW olcRootPW: <パスワード>
ユーザパスワード検証
- ldapに登録したユーザパスワードは userPassword 属性に保存される。
- userPassword 属性に登録するパスワードはハッシュ化して保存することができる。
- システム設定でデフォルトでハッシュ化するように指定することもできる。
- 認証方式に simple を使う場合、パスワードはハッシュ化すべきだが simple 認証ではなく sasl を使用すべきだとは思う
- しかし、salsだとプレインなパスワードを一時保存しないといけないのでパスワードをハッシュ化できない。
コマンドライン
- ハッシュ化されたパスワードの検証はldapサーバ側でやってもらえる。
- コマンドで検証する場合は以下のようになる。(openldap-clientの場合)
ldapwhoami -vvv -h <ldapサーバ> -p <ポート番号> -D <エントリのDN> -x -w <平文のパスワード>
- SSHA、SHAで登録したパスワードはこれで検証できた。しかし、SSHA256やSHA256で登録したパスワードは検証できなかった。おそらくopenldapの問題でモジュールの追加が必要。
- パスワードの登録は Apache Directory Studio から実行。パスワード登録時に保存形式がSSHAやSSHA256と選択できたので、選択を切り替えて保存した。
- ldapsearch で見ると userPassword がそれっぽく変換されていたので変換は問題ないと思っている
java
- javax.naming.directory.InitialDirContext のコンストラクタで検証ができそう。認証情報が誤っていると例外をスローする。
参考ページ
- 環境構築
- sha256モジュールについて
- パスワード検証
- sasl