ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

ADへLDAP連携し階層構造のセキュリティグループを再帰的に検索する

以前、Linuxで構築したWikiサービスのGrowiで、ADの認証設定を検証しました。以前、Linuxで構築したWikiサービスのGrowiで、ADの認証設定を検証しました。

 

そして、GrowiではLdap認証の機能があるのですが、LDAPからWindowsLDAP連携は、それぞれ、仕組みが近いようで、指定の仕方が違う部分があるので、認証が通るようになるまでに意外と大変です。

 

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

 

Windowsの場合、グループの下にグループを入れて、その中にユーザーをメンバーにするという構成を使われることがあります。

 

例えば、、、
グループ1

グループ2

グループ3

 

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

 

そこで、使えるのがLDAPからActiveDirectoryのネストされたグループ検索をする場合に使用する演算子です。


★参考元はこちら

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

https://msdn.microsoft.com/ja-jp/library/aa746475(v=vs.85).aspx

 

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


演算子

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


論理演算子

説明論理演算子 説明

= に等しい

~= おおよそ

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

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

そして、 そして

| または

! NOT

 

続いて、LDAPによって実装された一致規則のOIDを示します。

一致ルールOID 文字列識別子(Ntldap.hから) 説明

1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND 属性のすべてのビットが値と一致する場合にのみ一致が検出されます。このルールは、ビット単位のAND演算子と同等です。1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR 属性からのビットが値と一致する場合、一致が見つかります。このルールは、ビット単位のOR演算子と同等です。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)

 

これを指定することで階層化されたグループのユーザーをサーチ可能になります。指定の対象のグループだけ設定するのは簡単なのですが、このようにグループが複雑になっている場合は、ちょっと設定が大変だったりします。