web-dev-qa-db-ja.com

openldapサーバーで逆グループメンバーシップメンテナンスを設定するにはどうすればよいですか? (memberOf)

現在、LDAP認証をシステムに統合する作業をしています。LDAPグループに基づいてアクセスを制限したいと思います。これを行う唯一の方法は、検索フィルターを使用することです。そのため、私の唯一のオプションは、検索フィルターで「memberOf」属性を使用することであると考えています。 「memberOf」属性は、サーバー上の「groupOfNames」エントリに対して新しい「member」属性が作成されるときにいつでもサーバーが作成できる操作属性であると私は理解しています。私の主な目標は、「member」属性を既存の「groupOfNames」エントリに追加し、提供するDNに対応する「memberOf」属性を追加できるようにすることです。

これまでに達成したこと:

私はまだLDAP管理にかなり慣れていませんが、openldap admin's guideで見つけたものに基づいて、 Reverse Group Membership Maintence 別名 "memberof overlay"は、私が探している効果を正確に実現します。

私のサーバーは現在、「cn = config」スタイルのランタイム構成を使用するopenldap 2.4.15のパッケージインストール(ubuntuではslapd)を実行しています。私が見つけたほとんどの例は、静的構成の古い「slapd.conf」メソッドをまだ参照しており、構成を新しいディレクトリベースのモデルに適合させるために最善を尽くしています。

Memberofオーバ​​ーレイモジュールを有効にするために、次のエントリを追加しました。

OlcModuleLoadでモジュールを有効にする

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

データベースのオーバーレイを有効にして、データベースのデフォルト設定(groupOfNames、member、memberOfなど)を使用できるようにしました

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

私の現在の結果:

上記の構成を使用することにより、任意の数の「member」エントリを持つ新しい「groupOfNames」を追加し、関連するすべてのDNを「memberOf」属性で更新することができます。これは私が期待する行動の一部です。以下はmemberof overlayで達成されたはずであると信じていますが、私は次の方法をまだ知らないので、喜んでアドバイスを歓迎します。

  1. 「member」属性を既存の「groupOfNames」に追加し、対応する「memberOf」属性が自動的に作成されるようにします。
  2. 「member」属性を削除し、対応する「memberOf」属性を自動的に削除します。
18
emills

私は同じことで苦労してきました、openldapのドキュメントはミニマリストでほとんど役に立ちません。彼らが設定データベースに行ったとき(原則として悪い考えではありません)、すべてのオプションが変更されたので、人々が/etc/ldap/slapd.confから例を挙げているとき、それは最新のslapd設定(Ubuntuなど)では役に立ちません。

ようやくこれが機能しました。ここに概要があります...最初のLDIFファイル:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

2番目のLDIFファイル:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Ldapaddを使用してそれらを設定データベースに追加します(通常の設定と同じです)。

それはデータベースの既存のデータを自動的に更新しないであるため、slapcatを使用してすべてを一時ファイルにコピーし、各グループにアクセスしてグループを削除し、同じグループを再度追加する必要がありました。 (memberOf属性を強制的に正しく更新します)。空のデータベースで開始している場合、オブジェクトが追加されると属性が正しく更新されます。

また、"olcDatabase = {1} hdb"は非常に一般的ですが、設定と一致するとは限りません。必ずチェックしてください。

10
Telford Tendys

最近、ブログwww.jordaneunson.comでこのことについて書きました。関連する部分をコピーして貼り付けました。

LDAPサーバーの "slapd"サービスを停止し、slapd.confファイルを編集して、次の2行を追加する必要がありました。

moduleload memberof.la
overlay memberof

私はすでにvpnというgroupOfNamesを持っていたので、次の内容のLDIFファイルを作成する必要がありました。

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

これを私のLDAPデータベースに追加しました

slapadd -f file.ldif

この後、エラーをチェックするためにデバッグでLDAPサーバーを起動しました

slapd -d 99 -f /etc/ldap/slapd.conf 

「vpn」のグループメンバーシップがユーザーエントリにリストされていることを確認しました。

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

そしてバム!成功!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

それで私はslapdサービスを解雇し、それ以来多くの成功を収めました。新しいGUI管理ツールの場合、phpLDAPAdminを使用しており、memberOf属性がユーザーに割り当てられたり割り当て解除されたりしても問題はありません。

最後に注意すべきことは、「memberOf」属性は基本的なLDAP v3スキーマの一部ではないため、特に検索しない限り、ldapsearchを実行してもこの属性が明らかにならないことです。これが、上記の例でldapsearchパラメータの最後に宣言されている理由です。

お役に立てれば。

編集:Apache Directory Studioで問題をテストしました。上記のように属性メンバー値全体を入力する限り、A-OKで動作します。ただし、me​​mberOf属性はユーザーエントリに表示されません。これは、memberOf属性がLDAPv3スキーマの一部ではないためです。それが存在することを確認するには、コマンドラインツールldapsearchを使用します。

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 
11
Jordan Eunson