web-dev-qa-db-ja.com

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

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

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

ヒントはありますか?

13
Anthony O.

larsks answer のおかげで、ここに私がやったことがある。

まず、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
_
1
Anthony O.

エラーno global superior knowledgeは、slapdが新しいエントリを配置する場所を認識していないことを意味します。これは通常、適切なデータベースを定義していないことを意味します。新しいシステム(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

これにより、rootldapi:///ソケットを介したslapdへの接続、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で始める必要はなかったことに注意してください。

20
larsks