web-dev-qa-db-ja.com

OpenLDAP:削除されたユーザーはまだグループにリストされています

私は現在、コマンドラインからopenldapを実行しています。ユーザーJohnを追加してグループdevgroupを追加し、Johnをdevgroupグループに割り当てました。コマンドラインからユーザー(John)を削除したとき

ldapdelete -Y EXTERNAL -H ldapi:/// -D "cn=admin,dc=example,dc=local" 
"uid=john,dc=example,dc=local"

ユーザーは消えましたが、以前に割り当てられたグループメンバー(devgroup)にはいません。

ユーザーとグループに割り当てられたユーザーが関連付けられていないことに気付きました。基本的に、グループに存在しないユーザーを追加できます。これら2つをリンクする方法はありますか?

ありがとう!

2
hlzhlm

そのコマンドでユーザーを削除しているだけで、OUからすべてのエントリを削除しているわけではないと思います。 LDAPは、あなたが考えているような異種のオブジェクトとのリンクを維持しないことを理解しています。むしろ、最初にldapsearchを実行してオブジェクトのリストを作成し、次にldapdeleteまたはldapmodify

通常、最初にldapsearchから.ldifファイルに結果を書き込み、次にldapmodifyまたはldapdeleteを使用してそれらに作用します。ただし、このU&L Q&Aのタイトルのこの例に示すように、ldapsearchからの出力を解析し、それをldapmodifyにパイプすることができます: ldapdelete、OUのすべてのUIDを削除したいがOUを保持しますか?

$ ldapsearch -ZZ -W -D 'cn=Manager,dc=site,dc=fake' \
   -b 'ou=people,dc=site,dc=fake' -s one  dn | \
   grep dn: | cut -b 5- | ldapdelete -ZZ -W -D 'cn=Manager,dc=site,dc=fake'

同様のことをして、ユーザーがmemberUidであるすべてのグループを見つけ、そのリストをldapmodifyに渡してから、ldapdeleteを実行する必要があると思いますすべてのグループから削除されたら、コマンドを実行します。

ちなみに、グループからユーザーを削除するには:

dn: cn=Manager,dc=site,dc=fake
changetype: modify
delete: memberuid
memberuid: john

.ldifファイルに関しては、このページのタイトルの例: ライトウェイトディレクトリアクセスプロトコル(LDAP)を使用したユーザーの管理 は優れています。これらは、複数のオブジェクト間で操作を実行するために拡張できる.ldifスニペットを使用してすべての基本的な操作を実行する方法を示しています。

1
slm

すでにグループエントリとそのメンバーエントリを認識しているので、ハードリンケージのない個別のエントリです。

次の2つのオプションがあります。

  1. 独自のスクリプトを実装してメンバーエントリを削除し、そのDNをグループエントリの属性memberから削除します。
  2. OpenLDAPオーバーレイを使用して slapo-refintslapdに、メンバーエントリを削除した場合に、グループエントリからメンバー参照を削除させます。
0