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


18

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

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

私はまだLDAP管理にかなり慣れていませんが、openldap管理者ガイドに記載されている内容に基づいて、リバースグループメンバーシップメンテナンス(別名「memberof overlay」)がまさに探している効果を達成するようです。

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

memberof overlayモジュールを有効にするために、次のエントリを追加しました。

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

私の現在の結果:

上記の構成を使用することにより、任意の数の「メンバー」エントリを持つ新しい「groupOfNames」を追加し、「memberOf」属性で関連するすべてのDNを更新することができます。これは私が期待する動作の一部です。memberof overlayを使用して次のことを実行する必要がありますが、次の方法はまだわかりません。アドバイスを歓迎します。

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

回答:


10

私は同じことに苦労してきましたが、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」は非常に一般的ですが、セットアップとの一致は保証されていません。必ず確認してください。


1
ではないslapadd、それを行うための正しい方法は、(停止データベース上に)?
mad_vs

11

これについては最近、ブログ(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 

1
モジュールをロードしてオーバーレイを追加することは、残念ながら私がやったことです。問題は、新しいgroupOfNamesエントリに「memberOf」属性が追加されないということではなく、単に「member」属性を既存のグループに追加するだけでは追加されないということです。現在、Apache Directory Studioを使用してLDAPを参照および構成し、参照時にmemberOfエントリが表示されるようにします。それらが隠されているということではありません。
emills

1
groupOfNamesでメンバー属性をどのように作成しますか?DN全体を使用していますか?たとえば、「uid = user、ou = People、dc = corp、dc = org」、または単にユーザー名を入力していますか?逆マッピングを機能させるには、DN全体を使用して、memberOfが逆マップの配置場所を認識できるようにする必要があります。
ジョーダンウンソン

1
編集:上記のように属性メンバーの値を全体として入力する限り、Apache Directory Studioで問題をテストしました。ただし、me​​mberOf属性はユーザーエントリに表示されません。これは、memberOf属性がLDAPv3スキーマの一部ではないためです。そこにあることを確認するには、コマンドラインツールldapsearchを使用します。<code> ldapsearch -h ldap -x -b "dc = shop、dc = lan" '(uid = jordan)' memberOf </ code>
ジョーダン・ウンソン2009年

1
メンバーエントリでDNを使用しています。既に説明したように、既存のグループにメンバー属性を追加したときではなく、新しいgroupOfNamesが追加された場合にのみ追加されるため、表示されます。
emills 2009年

1
<quote>追加されるだけで(したがって表示されます)</ quote>すみませんが、この記述は間違っています。memberOf属性は、特にクエリしない限り表示されません。上記のldapsearchコマンドの出力を投稿してください。ユーザーを、memberOf属性持つ必要があるが持たないユーザーに変更します。
ジョーダンウンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.