GROWIというWikiサーバーでActiveDirectoryとLDAP連携の設定をしていますが、先日、ようやくLDAP連携のテストに成功しました。
AD独特の指定方法があるので、公式サイトの情報だけだとちょっと連携させるのが大変です。そして、今回は、もっと深堀して、階層構成のグループに登録されたユーザーのフィルタ設定についての備忘録です。
現在、LdapからWindowsのLDAP連携検証をしているんですが、それぞれ、仕組みが近いようで、指定の仕方が違う部分があるので、意外と大変です。
そして、LDAPからActiveDirectoryのネストされたグループ検索をする場合に使用する演算子があります。Windowsの場合、グループの下にグループを入れて、その中にユーザーをメンバーにするという構成を使われることがあります。
例えば、、、
グループ1
|
グループ2
|
グループ3
そして、ユーザーはグループ3にいる場合、LDAPのサーチフィルタでグループ1を指定すると、ネストされたグループ3のユーザーが検索できないのです。
そこで、使えるのがLDAPからActiveDirectoryのネストされたグループ検索をする場合に使用する演算子です。
検索フィルタの構文(マイクロソフト開発者ネットワーク)
https://docs.microsoft.com/ja-jp/windows/win32/adsi/search-filter-syntax?redirectedfrom=MSDN
まず基本的に抑えておいた方がいいのがこの演算子です。まず基本的に抑えておいた方がいいのがこの演算子です。
『演算子』次の表に、頻繁に使用される検索フィルタ演算子を示します。
論理演算子 説明
= に等しい
~= おおよそ
<= 辞書学的には以下のもの
> = 言語学的にはより大きいか等しい
そして、 そして
| または
! NOT
続いて、LDAPによって実装された一致規則のOIDを示します。
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サーバーに設定してみます。ちなみに、GROWIは、Passportというシンプルな認証ミドルウェアを使用しています。あまり聞きなれないミドルウェアなので、これまた情報が少ないです。
では、まずGROWI側の設定です。
【GROWI設定】
●Server URL
ldap://<ADのIPアドレス、ホスト名>/OU=people,DC=test,DC=com
●Bind DN
CN=testuser,OU=people,DC=test,DC=com
●Bind DN Password
******
●Search Filter
(&(sAMAccountName={{username}})(memberOf:1.2.840.113556.1.4.1941:=CN=group1,OU=people,DC=test,DC=com))
●username
sAMAccountName
続いて、AD側の設定です。見てもらうとわかりますが、グループ1は所属なし、グループ2はグループ1に所属、グループ3はグループ2に所属という構成になっています。
まずはOUの中身です。グループを3つ作成。ユーザーは「testuser」を使います。
グループ1は所属ナシ。
グループ2は、グループ1に所属。
グループ3はグループ2に所属。
最初は、「testuser」はグループ1に所属させて確認。
見事に成功。続いて、グループ1から削除して、グループ2に所属させます。3はすでに確認したので、キャプチャーアップが面倒なので、省略。
続いて、「testuser」をグループ2へ変更。1からは削除しています。
画面いっしょですが、認証成功。
そして、最後にグループから削除。
認証失敗。
いい感じですね。次回は複数のグループを指定する方法を紹介しますね。