memberof:1.2.840.113556.1.4.1941 ADで階層化されたグループのユーザーをLDAPサーチする

自宅の検証でWikiサーバーを構築しているんですが、この機能の一つでLDAP認証ができます。ということで、仮想マシンとしてWikiサーバとWindows Server 2016を構築し、LDAP連携テストをしています。


そして、LdapからWindowsLDAP連携検証をしている中で、それぞれ、仕組みが近いようで、指定の仕方が違う部分があるので、設定が意外と大変です。


そして、LDAPからActiveDirectoryのネストされたグループ検索をする場合に使用する演算子があるそうなので、共有します。

 


Active Directory環境では、セキュリティグループのメンバーにセキュリティグループを入れるというネスト(入れ子)構造がよく利用されますが、実際の現場でもグループの下にグループ、その下にグループという構成があったりします。これ意外と複雑ですよね。


例えば、、、

グループ1
 |
グループ2
 |
グループ3


そして、ユーザーはグループ3にいる場合、LDAPのサーチフィルタでグループ1を指定すると、ネストされたグループ3のユーザーが検索できないのです。今回したいのが、Wikiサーバーでグループフィルターをしたいのですが、ここで、グループ1を指定して、その下のグループのユーザーもサーチできるようにしたいのです。


そこで、使えるのがLDAPからActiveDirectoryのネストされたグループ検索をする場合に使用する演算子です。以下はマイクロソフトのサイトです。

 

検索フィルタの構文(マイクロソフト開発者ネットワーク)検索フィルタの構文(マイクロソフト開発者ネットワーク)

 

まず基本的に抑えておいた方がいいのがこの演算子です。

 

演算子

次の表に、頻繁に使用される検索フィルタ演算子を示します。


論理演算子

説明論理演算子 説明

= に等しい

~= おおよそ

<= 辞書学的には以下のもの

> = 言語学的にはより大きいか等しい

そして、 そして

| または

! NOT

 

続いて、LDAPによって実装された一致規則のOIDをサイトから抜粋します。ネストされたグループでユーザーを検索するActiveDirectory独特の演算子がこちらです。


1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN このルールは、DNに適用されるフィルタに限定されています。これは特別な「拡張」マッチ演算子であり、オブジェクト内の祖先のチェーンをマッチするまでルートまで移動します。

 

「memberof:1.2.840.113556.1.4.1941」の部分が重要です。

 

(memberof:1.2.840.113556.1.4.1941:= cn = Group1、OU = groupsOU、DC = x)

 

これを指定することで階層化されたグループのユーザーをサーチ可能になります。実際にWikiサーバーに設定したころうまく動作しました。認証も奥が深いですね。