新しくインストールした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
ヒントはありますか?
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
_
エラー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
これにより、root
、ldapi:///
ソケットを介した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
で始める必要はなかったことに注意してください。