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.