Bir ülke eklerken “küresel üstün bilgi yok”


14

Ben organizationalunittaze bir OpenLDAP (Ubuntu 12.04 üzerinde) içine böyle bir eklemek gerekir :

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

Bu yüzden yeni bir LDAP olduğundan, önce frülkeyi eklemem gerektiğini düşünüyorum ve bu dosyayı oluşturuyorum:

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

Şimdi bu komutla (bu sunucu için hiçbir etki alanım yok) almaya çalışın:

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

ancak OpenLDAP şu komutu reddeder:

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

İpucu var mı?

Yanıtlar:


21

Hata , yeni girişinizi nereye koyacağınızı bilmediği no global superior knowledgeanlamına gelir slapd. Bu genellikle uygun bir veritabanı tanımlamadığınız anlamına gelir. Daha yeni sistemlerle ( cn=configyerine kullananları slapd.conf), genellikle yeni bir veritabanı ekler veya mevcut bir veritabanı girişini ldapaddveya tuşlarını kullanarak değiştirirsiniz ldapmodify. Örneğin, Fedora 17 sistemimde varsayılan yükleme, barındırma için dc=my-domain,dc=comşöyle bir veritabanı kurar :

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

Kuruluşunuzu ( o=myorganization, c=fr) barındırmak için aşağıdaki LDIF dosyasını oluşturmam gerekir:

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

Ve sonra bu gibi değişiklikleri yüklerdim:

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

Bu olcAccess, yapılandırmada zaten bulunan aşağıdaki satırlar nedeniyle çalışır :

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

Bu , soket üzerinden roottemas ederek ağaca şifresiz erişim sağlar .slapdldapi:///cn=config

Daha sonra üst düzey girişimi yüklerdim:

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

Koşarak:

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

Bu veritabanına benzer bir ACL eklediğim için çalışır. c=frVeritabanı tutmak için tanımlandığından, buradan başlamak zorunda olmadığımı unutmayıno=myorganization,c=fr


Tamam, çok teşekkürler. Ancak cevabınızı doğru bir şekilde anlarsam, burada bu OpenLDAP veritabanının geçerli önekini değiştirirsiniz. Yeni bir tane eklemek istersem ne olur? (Yine de önerilerinizi test edeceğim, merak ediyorum)
— Anthony O.

1
Kullanım ldapaddyerine ldapmodifyve bir model olarak mevcut kaydı kullanın.
— larsks

Bu yanıt sorununuzu çözerse, sorunun sol üst tarafındaki onay kutusunu tıklayarak kabul edildi olarak işaretlemeniz çok nazik olur.
— larsks

Aslında bana çok yardımcı oldu, ama geçtiğim kesin komutlar değildi, bu yüzden kendi cevabımı yarattım. Cevabımı, olcAccessgerçekten kullandığım ldifs (özellikle hakkında ) ve komutlarla düzeltmek için düzenlemeye cesaret edemedim ... ama cevabımdaki kopyala / yapıştır ile düzenlemek isterseniz, kabul edilebilir olarak işaretleyebilirim mayını kaldır :)
— Anthony O.

(Ben ... Bu cevabım downvote için bir neden olmadığını düşünüyorum)
— Anthony O.

2

Larsks cevabı sayesinde , işte yaptığım şey.

İlk olarak Ubuntu 12.04 (dosya /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif) ile varsayılan yapılandırmanın bir özeti :

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

Bu yüzden aşağıdakileri yarattım 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

ve aşağıdaki komutla ldap'ım ekledi:

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

Şimdi organizasyon düğümünü aşağıdakilerle oluşturmak zorunda kaldım myorganization.ldif:

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

Ve son olarak aşağıdaki komutla ekleyin (birincisi nedeniyle çalışmadı Insufficient access (50)):

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

Şimdi kuruluş birimlerini ekleyebilirim:

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

Bu dn: olcDatabase={1}hdb,cn=configbenim için
— önemliydi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.