当社のLDAPディレクトリは、Snow Leopard ServerのOpen Directoryセットアップに格納されています。 ldapsearch
ツールを使用して、.ldifファイルをエクスポートしてanother外部LDAPサーバーにインポートし、外部で認証しようとしています。基本的に、同じ資格情報を内部と外部で使用できるようにしようとしています。
私はldapsearch
を機能させ、 "Users" OU内のすべてのコンテンツと属性を提供し、必要な属性のみに絞り込むこともできます。
ldapsearch -xLLL -H ldap://server.domain.net /
-b "cn=users,dc=server,dc=domain,dc=net" objectClass /
uid uidNumber cn userPassword > directorycontents.ldif
これにより、リモートOpenLDAPサーバーにインポートできるユーザーとプロパティのリストが表示されます。
dn: uid=username1,cn=users,dc=server,dc=domain,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
uidNumber: 1000
uid: username1
userPassword:: (hashedpassword)
cn: username1
ただし、「コンテナー」ではなくOD「グループ」で同じクエリを実行すると、結果は次のようになります。
dn: cn=groupname,cn=groups,dc=server,dc=domain,dc=net
objectClass: posixGroup
objectClass: Apple-group
objectClass: extensibleObject
objectClass: top
gidNumber: 1032
cn: groupname
memberUid: username1
memberUid: username2
memberUid: username3
私が本当に欲しいのは、グループメンバーシップに基づいてフィルター処理された一番上の例のユーザーのリストですが、メンバーシップはユーザーアカウント側ではなくグループ側から設定されているようです。これをフィルタリングして、必要なものだけをエクスポートする方法があるはずですよね?
私はLDAPを使用していますが、特定のブランドのサーバーは使用していません。
私が最初に試みるのは、例のように属性を制限するのではなく、すべての属性を取得するユーザーの検索です。
ldapsearch -xLLL -H ldap://server.domain.net \
-b "cn=users,dc=server,dc=domain,dc=net" uid=username1 \* +
多くの場合、ユーザーには「memberOf」属性があり、ユーザーが属しているグループのグループ名またはグループDNがリストされ、グループの情報と同期されます。それがあれば、それがあなたが望むことをする最も簡単な方法です。
*
はすべてのユーザー属性(デフォルトの動作)を取得し、+
はすべての操作属性(特殊属性)を取得します。
ldapsearch -x \
-b "cn=<your group name>,ou=group,dc=<your org>,dc=com" \
-H ldaps://<ldap server>:<port>
これは非常にうまく機能します。
ユーザーオブジェクトを異なるコンテナーに配置して、グループを表すことを目指していますか?お気に入り:
dn: uid=username1,cn=users,cn=accounting,dc=server,dc=domain,dc=net
...
dn: uid=username2,cn=users,cn=engineering,dc=server,dc=domain,dc=net
...
もしそうなら、私はあなたがLDIFをマッサージするスクリプトを書かなければならないことになると思います。優れた Python-LDAP モジュールを試してください。
なぜあなたがそうしたいのか疑問に思います。複数のグループに属するユーザーがいると面倒になり、オープンディレクトリの規則に反します。すべてのユーザーオブジェクトとグループオブジェクトをOpenLDAPサーバーにコピーし、ユーザーオブジェクトがどのコンテナーに存在するかではなく、グループメンバーシップに基づいてクエリすることはできませんか?