- - PR -
OpenLDAPのデータの追加・更新・削除について
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-07-24 18:15
度々すみません。be1300ccと申します。
データの追加・更新・削除について、エントリの追加のみはできるのですが、 changetypeでaddを指定した場合の追加・更新・削除ができません。 根本的に分からない点があるのですが、slapd.conのsuffixには現在、"dc=tec,dc=jp"と 指定しているのですが、あるデータを追加したい場合は、ここのsuffixにDNを追加してあげ ないといけないのでしょうか? 〜追加したかったデータ〜 dn: cn=MAN,ou=System Department,o=TEC.Corp.,c=JP objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: MAN このDNをsuffixに指定して、LDIFファイルにそのまま上記のデータを記述しても きちんと登録できませんでした。 (ldapadd -D "cn=MAN,ou=System Department,o=TEC.Corp.,c=JP" -w secret -f example.ldif) 書籍とOpenLDAPのサイトを頼りに行っているのですが、あまり詳しく書いていない為、 困っています。 LDIFファイルとslapd.confにどのように指定すれば、追加・更新・削除ができるので しょうか? ご享受お願いします。 〜現在の設定〜 【LDIFファイル(example.ldif)】 dn: dc=tec,dc=jp objectclass: dcObject objectclass: organization o: Example Company dc: tec dn: cn=Manager,dc=tec,dc=jp objectclass: organizationalRole cn :Manager dn: cn=MAN,ou=System Department,o=TEC.Corp.,c=JP objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: MAN 【slapd.conf】 # $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $ # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /usr/local/etc/openldap/schema/core.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /usr/local/var/slapd.pid argsfile /usr/local/var/slapd.args # Load dynamic backend modules: # modulepath /usr/local/libexec/openldap # moduleload back_bdb.la # moduleload back_ldap.la # moduleload back_ldbm.la # moduleload back_passwd.la # moduleload back_shell.la # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy is: # Allow read by all # # rootdn can always write! ####################################################################### # ldbm database definitions ####################################################################### database bdb suffix "dc=tec,dc=jp" "cn=MAN,ou=System Department,o=TEC.Corp.,c=JP" rootdn "cn=Manager,dc=tec,dc=jp" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd( and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /usr/local/var/openldap-data # Indices to maintain index objectClass |
|
投稿日時: 2003-07-25 11:31
be1300ccさん
suffixに登録するのはトップエントリなので、 この場合は"dc=tec,c=jp"のみになります。 また、ldapaddコマンドの-Dオプションは、LDAPサーバ内の エントリに権限があるユーザを指定します。ユーザはLDAPサーバに 登録されている必要があります。 今回の場合,まだ権限のあるユーザは登録されていないようなので,slapd.confの rootdnに指定したDNを使用します。 実行するコマンドは以下のようになると思います。 ldapadd -x -D "cn=Manager,dc=tec,dc=jp" -w secret -f example.ldif -xオプションは,パスワード指定のみ(他の認証を使用しない)のオプションです。 また,"dn: cn=MAN,ou=System Department,o=TEC.Corp.,c=JP"についてですが、 inetOrgPersonの必須属性はcn,snが必要だと思うので, 属性snも追加して実行してみてください。 最近LDAPを使っていないのでうろ覚えですが・・・(^^; |
|
投稿日時: 2003-07-25 15:51
tanaboさん、ご回答ありがとうございます。
2件目まではエントリできているのですが、どうしても3件目のエントリができません。 また、-xのオプションが効かない状態です。 また、更新に関しても、上手く処理されているのかが分かりません。 〜2件目のデータ〜 dn: cn=Manager,dc=tec,dc=jp changetype :modify add: postaladdress postaladdress: 1-2-3 objectclass: organizationalRole cn :Manager コマンド: [root@wintel bin]# ldapadd -D "cn=Manager,dc=tec,dc=jp" -w secret -f /usr/local/etc/openldap/example.ldif ldap_bind: Invalid credentials どこがおかしいのでしょうか? よろしくお願いします。 |
|
投稿日時: 2003-07-25 16:48
be1300ccさん
>〜2件目のデータ〜 >dn: cn=Manager,dc=tec,dc=jp >changetype :modify >add: postaladdress >postaladdress: 1-2-3 >objectclass: organizationalRole >cn :Manager Invalid credentialというエラーは, これはrootdnに記述したDNと同じですよね? このエントリを一旦削除した後に3件目のデータを追加してみてください。 それでもだめな場合は,slapdを slapd -d 255 (デバッグモード) と実行するとコンソール上にログが出ますので, そのログで原因が検出できるかもしれません。 |
|
投稿日時: 2003-07-25 17:29
be1300ccさん
LDAPにエントリを追加するには,以下の項目を守ってください。 1.必要なスキーマファイルがincludeされている。 2.suffixに記述するDNがトップエントリになる。 3.rootdnに記述するDNが管理者DNになる。 4.passwdに記述するものは管理者DNのパスワードである。 5.エントリの追加は,トップエントリを最初に入れ, その後は上の階層から順にエントリを追加する。 6.追加するDNの上位エントリが存在しなければならない。 もう一度be1300ccさんの最初の質問を読み返したところ,以下の点で 問題があります。 1."cn=MAN,ou=System Department,o=TEC.Corp.,c=JP"は, "dc=tec,c=jp"の配下エントリではない。 2.管理者DNの"cn=Manager,dc=tec,c=jp"が追加されている。 (管理者DNは登録する必要はありません) また,core.schemaにはオブジェクトクラスinetOrgPersonについて 記述されていないと思います。 実際に以下のslapd.confとLDIFファイルで試したところうまくいきました。 openldapのバージョンは2.1.4(古くてすみません),バックエンドはldbmです。 【slapd.conf】 # $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.23.2.2 2002/08/19 16:21:49 kurt Exp $ # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema # Define global ACLs to disable default read access. # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /usr/local/var/slapd.pid argsfile /usr/local/var/slapd.args # Load dynamic backend modules: # modulepath /usr/local/libexec/openldap # moduleload back_bdb.la # moduleload back_ldap.la # moduleload back_ldbm.la # moduleload back_passwd.la # moduleload back_shell.la # # Sample access control policy: # Allow read access of root DSE # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: #access to dn.base="" by * read #access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy is: # Allow read by all # # rootdn can always write! ##################################################################### ## # ldbm database definitions ##################################################################### ## database ldbm suffix "dc=tec,c=jp" rootdn "cn=Manager,dc=tec,c=jp" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd( and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw secret # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd/tools. Mode 700 recommended. directory /usr/local/var/openldap-data # Indices to maintain index objectClass eq 【LDIFファイル】 dn: dc=tec,c=jp objectclass: dcObject objectclass: organization o: Example Company dc: tec dn: ou=test1,dc=tec,c=jp objectclass: organizationalUnit ou: test1 dn: cn=MAN,ou=test1,dc=tec,c=JP objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson cn: MAN sn: man |
|
投稿日時: 2003-07-25 19:29
tanaboさん、非常に分かりやすいご回答、本当にありがとうございました。
非常に勉強になりました。 tanaboさんのアドバイスに注意しながら、作業を進めて行きたいと思います。 すみません、もう1点だけ質問させて頂きたいのですが、 現在slap.conf example.ldif を使用してデータ登録していますが、処理(更新・追加・削除)やデータによって複数のLDIFファイルを作成した場合、それぞれに合ったslap.confのsuffix にてDNを登録しておけば良いかと思いますが、suffixの記述の仕方は以下のようにすれば良い のでしょうか? suffix "dc=tec,c=jp" "cn=MAN,ou=System Department,o=TEC.Corp.,c=JP" 度々すみませんが、よろしくお願いします。 |
|
投稿日時: 2003-07-25 20:50
be1300ccさん
複数のLDIFを使用してデータ操作する場合においても, suffixはLDAPサーバの最も上位の階層を指定するだけですので LDIFファイルによって変更する必要はありません。 suffixの指定方法として,openldapでは以下の2つの方法があります。 ここではbe1300ccさんの例で説明します。 1.共通する"c=jp"をトップエントリとする。 この場合は"c=jp"という最上位エントリからのツリー構造ができる。 2."dc=tec,c=jp"と"o=TEC.Corp.,c=JP"のそれぞれをトップエントリとして 登録し,それぞれ別のデータベースで管理する。 この場合は"dc=tec,c=jp"と"o=TEC.Corp.,c=JP"の2つの最上位エントリができる。 通常は1の場合だと思いますが,openLDAPは1つのサーバで複数のデータベースを管理する 2の操作も行うことができます。私はやったことはありませんが・・・。 以下のURLを参考にされてはいかがでしょうか。 http://cvs.cacanet.org/fsc/ldap/0601/examples/two-db.html LDAPの操作は初めのうちは戸惑うことが多いですが, 理解してしまうと簡単ですので頑張ってください! |
|
投稿日時: 2003-07-29 09:36
tanaboさん
ご返信が大変遅くなりまして、申し訳ありません。 tanaboさんのご説明で、複数データの登録のやり方やOpenLDAPについて、段々とですが 理解できてきました。 ありがとうございます。 今一度、調べてもどうしても分かりませんので、2点質問させて頂きます。 1.データの削除について ここ数日でLDIFファイルやSlapd.confをいじってしまい、LDIFファイルの中身は最近 LDIFファイル上のみで設定したエントリーなのです。 しかし、実際にエントリーされているのは、LDIFファイルを一番最初に作成した時に 正常にエントリーされたエントリーでした。 その為、 /usr/local/bin/ldapdelete -D "cn=Manager,dc=tec,dc=jp" -w secret -v /usr/local/bin/ldapdelete -D "cn=Manager,dc=tec,dc=jp" -w secret と行ったのですが、結局データを削除できませんでした。 コマンドが間違っているのでしょうか? 2.大元のデータの削除について 上記のコマンドで削除出来なかった為、OpenLDAPとBerkleyDBをアンインストールし、 インストールし直したのですが、データがまだ残ったままでした。 その後、関連個所の /usr/local/var/openldap-dataの中身 /usr/local/etc/openldap/の中身 を削除し更に、アンインストールしインストールし直したのですがデータが残ったままでした。 データはどこのディレクトリの中を見て削除すればよいのでしょうか? 度々の質問で大変申し訳ございませんが、ご享受お願いします。 [ メッセージ編集済み 編集者: be1300cc 編集日時 2003-07-29 10:37 ] |
1|2|3
次のページへ»