国を追加する際の「グローバルな優れた知識なし」


13

organizationalunit新しくインストールしたOpenLDAP(Ubuntu 12.04)に次のようなものを追加する必要があります。

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization, c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

新しいLDAPなので、最初にfr国を追加する必要があると思います。そのファイルを作成します。

dn: c=fr
c: fr
objectClass: top
objectClass: country

今、私はそのコマンドでそれをインポートしようとします(そのサーバーのドメインがありません):

ldapadd -x -D cn=admin,dc=nodomain -W -f country_fr.ldif

しかし、OpenLDAPはそのコマンドを次のように拒否します。

adding new entry "c=fr"
ldap_add: Server is unwilling to perform (53)
    additional info: no global superior knowledge

ヒントはありますか?

回答:


20

エラーno global superior knowledgeslapd、新しいエントリを配置する場所がわからないことを意味します。これは通常、適切なデータベースを定義していないことを意味します。新しいシステム(のcn=config代わりにを使用するシステムslapd.conf)では、通常、最初に新しいデータベースを追加するか、ldapaddまたはを使用して既存のデータベースエントリを変更しますldapmodify。たとえば、私のFedora 17システムでは、デフォルトのインストールで次のようなデータベースがホスト用にセットアップされますdc=my-domain,dc=com

dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
creatorsName: cn=config
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

組織(o=myorganization, c=fr)をホストするには、次のLDIFファイルを作成する必要があります。

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization, c=fr
-
replace: olcRootDN
olcRootDN: cn=Manager,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write 
  by dn.base="cn=Manager,o=myorganization,c=fr" write
  by * none

次に、これらの変更を次のようにロードします。

ldapmodify -Y EXTERNAL -H ldapi:/// -f mychanges.ldif

これは、次のolcAccess行が構成にすでに存在しているため機能します。

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * 
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * none

この助成金はroot、連絡をslapdldapi:///にソケット、パスワードなしのアクセスcn=configツリー。

次に、最上位のエントリを読み込みます。

dn: o=myorganization, c=fr
objectclass: organization
o: myorganization

実行すると:

ldapadd -Y EXTERNAL -H ldapi:/// -f myobject.ldif

これは、このデータベースに同様のACLを追加したため機能します。c=frデータベースが保持するように定義されているため、ここから始める必要はなかったことに注意してください。o=myorganization,c=fr


OK、たくさんのラークに感謝します。しかし、私があなたの答えを正しく理解している場合、ここでこのOpenLDAPのデータベースの現在のプレフィックスを変更します。新しいものを追加したい場合はどうなりますか?(私はとにかくあなたの推薦をテストします、私はただ興味があります)
Anthony O.

1
ldapadd代わりにldapmodify使用し、既存のレコードをモデルとして使用します。
larsk、2013年

この回答で問題が解決した場合は、質問の左上にあるチェックボックスをクリックして、それを承認済みとしてマークしてください。
larsks 2013年

実際には、それは私に多くの助けとなりましたが、それは私が渡した正確なコマンドではなかったので、私は自分の返信を作成しました。私はolcAccess実際に使用したldifs(特にについて)とコマンドで修正するために返信をあえて編集しませんでした...しかし、返信からコピー/貼り付けで編集したい場合は、受け入れ可能としてマークすることができます&鉱山を削除します:)
Anthony O.

(これが私の回答に反対票を投じる理由ではないと思います...)
Anthony O.

1

ラスクの回答のおかげで、ここに私がやったことがあります。

まず、Ubuntu 12.04(ファイル/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif)でのデフォルト構成の抜粋を示します。

dn: olcDatabase={1}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=nodomain
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymou
 s auth by dn="cn=admin,dc=nodomain" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by self write by dn="cn=admin,dc=nodomain" write by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=nodomain

だから私は以下を作成しましたchange_suffix.ldif

dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: o=myorganization,c=fr
-
replace: olcRootDN
olcRootDN: cn=admin,o=myorganization,c=fr
-
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,o=myorganization,c=fr" write by * none
olcAccess: {2}to * by self write by dn="cn=admin,o=myorganization,c=fr" write by * read

次のコマンドでそれを私のLDAPに追加しました:

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f change_suffix.ldif

ここで、以下を使用して組織ノードを作成する必要がありましたmyorganization.ldif

dn: o=myorganization,c=fr
objectclass: organization
o: myorganization

そして最後に次のコマンドで追加します(最初のコマンドはのために機能しませんでしたInsufficient access (50)):

ldapadd -x -D cn=admin,o=myorganization,c=fr -W -f myorganization.ldif

ここで、組織単位を追加できます。

dn: ou=GROUPS, o=myorganization,c=fr
ou: GROUPS
objectClass: top
objectClass: organizationalunit

dn: ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYAPP
objectClass: top
objectClass: organizationalunit

dn: ou=MYREGION, ou=MYAPP, ou=GROUPS, o=myorganization,c=fr
ou: MYREGION
objectClass: top
objectClass: organizationalunit

これdn: olcDatabase={1}hdb,cn=configは私にとって鍵でした、ありがとう
miguelfg 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.