LDAP Managerを使ってみた！ 5. LDAP→AD反映編

[前回](https://qiita.com/ahra_/items/2920657adb52b5e6f089)の続きです。
## LDAP ManagerのLDAP→AD関連プラグイン
以下の4つが存在します。この記事ではすべてのプラグインについて検証します。
1. LDAP→AD反映
LDAPサーバからADにユーザ情報を連携するプラグイン。抽出フィルタを用いた連携ユーザの絞り込み、連携する属性のマッピング、リバースマッピングなどが可能。
2. ADパスワード同期
AD側で変更したパスワードをLDAP側に連携するアプリケーション。
3. ADグループメンテナンス
指定した条件を満たすLDAPユーザをメンバとしたグループをADに追加・更新・削除できるプラグイン。
4. LDAPグループ→ADグループ反映
LDAPサーバのグループ情報をADに反映するプラグイン。

## LDAP→AD反映
※既にADを構築した環境で検証しています。
### 事前準備
プラグインをインストールします。
![pic (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ea7b70f7-bf6e-a38a-6b14-8b1ac23b2394.png)
LDAP Manager コンソール 「環境設定」 > 「基本設定」 > 「ディレクトリ管理」より、ADを追加します。
ADを追加する場合、「ホスト名」の指定形式はFQDNである必要があるため、事前にFQDNから名前解決できるようにしておきます。
![pic (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/14abea6b-39d0-f9c8-73e8-8df2bea2c62a.png)
次に、「環境設定」 > 「ディレクトリ属性設定」より、追加したADで使用する属性を追加します。
ここでは、`top`、`container`、`user`および`group`オブジェクトクラスの属性、`sAMAccountName`、`sn`、`userPassword`属性と、`次回パスワード変更`などのアカウントオプション制御用の特別な属性も追加します。
![pic (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d91b2af0-7c99-cc06-4a46-af7efb68db2f.png)
### 設定
LDAP Managerコンソール「環境設定」 > 「LDAP -> AD反映1」を選択して設定画面を開きます。
抽出元のディレクトリにメタディレクトリサーバを指定し、`person`オブジェクトクラスのエントリを抽出対象とします。
反映先のAD、エントリ/コンテナ用の識別属性を指定し、ホームディレクトリを作成する設定にします。
![pic (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/40bd26da-3f3a-99b7-64ef-e316a516d8b6.png)
ADパスワード同期の設定は一旦スキップします。
![pic (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/a7b74983-22a2-4a8a-a978-7bb98ebaa87d.png)
マッピングは以下の通りとしました。
`KerberosAES256暗号化をサポート`に`TRUE`をマッピングしているため、アカウントの追加・更新時にADの同設定が有効となります。
リバースマッピングにより、反映後に反映元LDAPサーバの`telephoneNumber`属性に`123456`という値が格納されるようにしました。
`homedrive`には`D:`～`Z:`までのドライブレター、`homeDirectory`には「基本設定」 > 「ディレクトリの追加」 > 「ユーザDN」で指定したアカウントで接続できるUNCパスを記述します。
![pic (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/fe877a20-f033-5e72-c67b-bc40d21d49ea.png)
### 確認
LDAP Managerコンソール「手動実行」より「LDAP -> AD反映1」を実行します。
![pic (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/dfbee8f4-7ed6-c052-eee0-069994f1becd.png)
するとこのように、AD側にユーザが追加されます。
![pic (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/577540a2-3eff-9a7a-6e5a-44e8a2cb2432.png)
![pic (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/1e62a6d9-9aeb-ff78-30b9-21b295529845.png)
設定の通り、「このアカウントでKerberos AES 256 ビット暗号化をサポートする」にチェックが入っていることがわかります。
![pic (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e3677dbb-4f73-1874-d1f6-31566e237c7d.png)
LDAPサーバ側にも、設定どおり`telephoneNumber`属性が`123456`という値で追加され、またパスワード照合属性`userPassword;lang-ad1`も追加されています。
![pic (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/1b845758-bbb5-8a49-aa53-6214db6b77bf.png)
ホームディレクトリも作成されています。
![pic (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7cf27451-fb7b-6202-219a-a0e0b2534f47.png)
次に、リモート実行を試します。管理者ユーザメンテナンスの連携プラグインに`LDAPTOAD1`を設定して保存します。
![pic (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f07cc36a-2d43-f4ad-836d-fd73519d664d.png)
ユーザ情報を編集します。
![pic (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ad4a62ac-d9e1-c7e7-d2ef-256799b6c32a.png)
そうすると、「管理者ユーザメンテナンス」プラグインの実行後、「LDAP -> AD反映1」がリモート実行され、編集したユーザ情報がADに連携されます。
![pic (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/00202a47-9da8-649d-9f4d-1176a5769e85.png)
![pic (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/99aa08da-81c0-aeda-5d41-66ef7301def2.png)
![pic (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/0938d598-e23d-ae89-38aa-9e38eb7d05a5.png)
ユーザを削除します。（管理者ユーザメンテナンスの削除方法は「無効」）
![pic (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/740852c2-5ee3-1ed5-75ef-1a73b38c6e45.png)
AD側のアカウントも「無効」となりました。
![pic (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/497da95d-d58b-3231-01bb-74844cdc294a.png)
復帰を行います。
![pic (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e833caba-7935-aa3c-0df4-4c9b33957d58.png)
ADでも復帰処理が行われます。
![pic (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f2da7baa-9e48-031f-5c8d-fb48ceb0673a.png)
上記では両方が「無効」の削除処理でしたが、LDAP側のみを/AD側のみを「無効」とし、もう片方を「削除」とするような使い方もできます。
![pic (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/09d2d9b9-65e3-79fb-27e2-0ffc0c7e88b3.png)
![pic (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/0d1bceea-8e54-3b38-a888-410ac208a0b9.png)
## ADパスワード同期
### インストール・設定
ドメインコントローラにVisual C++ 2015-2022再頒布可能パッケージ、ADパスワード同期フックモジュール、パスワード同期（連携処理 & 設定ツール）をインストールします。
![pic (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/2e102eec-2caa-3eb3-8652-64d4e2deb9a6.png)
![pic (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/97d6bb90-1e75-3028-88a1-b013ddee6052.png)
![pic (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7c5242f4-95e5-7e9c-9385-855b87cc6857.png)
`C:\Program Files\EXGEN\ADPasswdSyncHook\ADPasswdSyncHookRegAdd.exe`を実行し、サーバを再起動します。
![pic (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/2e435c61-7096-6349-39f2-f715412bd754.png)
![pic (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f6347177-3a5e-974a-84eb-ebe172e3c870.png)
また、`LMADPasswdSyncService.exe`でサービスへの登録を行います。
![pic (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/787fb228-7f01-57ca-8a4a-286045b1df14.png)
最後に、`ADPasswdSyncHookCfg.exe`を起動し、パスワード同期フックモジュールの設定を行います。
LDAP Manager管理対象のユーザエントリは`description`属性に`LM`という値を持つように設定しているので、それに準拠。パスワード同期識別属性名には任意のADのユーザエントリの属性を設定します。
![pic (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/8e33a47f-8af3-adc7-4409-ebca512feff7.png)
設定できたらサービスを起動します。
LDAP Manager本体側では、まず「LDAP -> AD反映1」の「ADパスワード同期設定」にて、「ADパスワード同期を使用する」にチェックを入れ、パスワード同期識別属性名にパスワード同期フックモジュールで設定した属性を、パスワード情報属性名には[1. LDAPサーバ構築編](https://qiita.com/ahra_/items/9209c29b01dd9b51d7f6)で追加した`exgPasswdInfo`属性を設定します。
![pic (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e600575e-c5af-cc94-7139-fdf2347918f0.png)
「環境設定」 > 「ADパスワード同期」の設定を行います。
「ADログオン名格納属性名」では、LDAP -> AD反映にて`cn`=`sAMAccountName`となるように設定しているので、こちらでも同様に設定します。
マッピング情報として、種類「パスワード」で`userPassword`にマッピングします。
![pic (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/0c3da50c-7b25-9f23-5293-cb937aa9f05a.png)
### 確認
ユーザのパスワードを変更します。
![pic (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/098c2735-2008-8522-cc7c-c88da6d587fe.png)
![pic (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/61a24cc8-50ce-bab3-9104-50343571a1c9.png)
結果、ADで変更したパスワードがLDAPサーバ側にも反映されます。
![pic (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/51c15a6f-68e3-1f1a-b69a-1d27411565ce.png)
## ADグループメンテナンス
### 設定
LDAP Managerコンソール 「環境設定」 > 「ADグループメンテナンス1」から設定します。
各識別属性の設定と、ADの`cn=Builtin`および`cn=Users`配下のグループに対する操作に関する設定、空のグループの削除の設定等を行います。
![pic36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7c198492-e92a-cce4-b4ec-40b94353e2d4.png)
次に、ADグループ情報「追加」より、ADグループ情報の設定を行います。
ここでは、LDAP属性`description`の値を名前とするグローバルなセキュリティグループを定義しました。
![pic (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/53cb5fba-64a6-c369-d1da-a0a0077bb146.png)
グループ説明の設定はスキップします。
![pic (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b1065816-9d0f-730b-36e7-1face1c9660a.png)
メンバ条件は`(&(cn=*)(objectclass=person))`とします。
![pic (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/c7b33d94-c947-a48e-c9e3-a31486814b42.png)
親グループに`Domain Admins`を指定しました。（このグループネストの設定は「LDAPグループ → ADグループ反映」も使用する場合は設定しないでください）
![pic (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ad710121-cd3c-8c01-c3d7-b5e491b9ee9a.png)
組織ツリーは未定義のため、スキップします。
![pic (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/45d7d329-ad87-9dc1-8281-e19bd46d75b6.png)
### 確認
「ADグループメンテナンス1」を手動実行します。
正常に実行できると、AD側にuser1、user2をメンバーとして持つ`LM`というグループが作成されます。
![pic (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/805b2ff9-6716-f65b-4775-7fe47e6ed730.png)
![pic (43).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ddccaabe-dac6-6feb-1fec-a73ec436d2d4.png)
親グループが`Domain Admins`となっています。
![pic (44).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d1b6d928-0391-92ee-df64-085588927c7c.png)
## LDAPグループ → ADグループ反映
### 設定
「環境設定」 > 「LDAPグループ -> ADグループ反映1」を選択します。
対象のLDAPサーバ、抽出フィルタ、メンバ属性についての設定と、AD側でグループを格納するコンテナ、各種識別名、グループの設定を行います。
![pic (45).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/c2450060-cf31-d723-3dad-e64db22b99fb.png)
マッピングは下記の通りとしました。
![pic (46).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/90feffbe-0344-42ef-e780-132b24c2b9b3.png)
現在のLDAP側のグループは下記の通りとなっており、「子グループの子グループ」はメンバを持ちません。
![pic (47).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d00a93b1-f995-af51-f6c0-edc248f848c2.png)
この状態で「LDAPグループ -> ADグループ反映1」を手動実行します。
するとこのように、「グループ1」と「子グループ」のみが残存します。
![pic (48).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d8109060-a4da-1c14-5482-a816a3628a8b.png)
処理としては、グループの追加処理 → メンバの判定 → メンバの存在しないグループの削除となっています。
![pic (49).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/0425abc8-a7e8-923e-6b0c-e5f08e2baf75.png)
グループを「削除しない」設定で連携し、「子グループ」の詳細を確認すると、メンバとして「子グループの子グループ」を持っていることがわかります。
![pic (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/030eaf7f-4e73-25b3-3a02-38394ea24d8f.png)
「削除する」設定では、「子グループの子グループ」が削除されてしまうため、メンバを持たないグループとなります。
![pic (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/cdb8c0d4-a2bf-6b26-eb58-75aa1b7790be.png)
しかし、「子グループ」がメンバを喪失してもメンバを持たないグループの削除処理は既に完了しているため、「子グループ」は残置されます。
## まとめ
LDAPからADに連携する各プラグインについて検証しました。
今回は検証していませんが、各プラグインでは組織ツリーの設定による格納先コンテナの制御などが可能です。
[次の記事](https://qiita.com/ahra_/items/bac396bf61b4318df01d)では、ADからLDAPに連携する各プラグイン・ツールを検証します。