“Tidak ada pengetahuan unggul global” sambil menambahkan sebuah negara

13

Saya harus menambahkan yang organizationalunitseperti ini ke OpenLDAP yang baru diinstal (di Ubuntu 12.04):

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

Jadi karena ini LDAP baru, saya pikir saya harus menambahkan frnegara terlebih dahulu , dan saya membuat file itu:

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

Sekarang saya mencoba mengimpornya dengan perintah itu (saya tidak punya domain untuk server itu):

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

tetapi OpenLDAP menolak perintah itu dengan:

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

Ada petunjuk?

Anthony O.
sumber

Jawaban:

20

Kesalahan no global superior knowledgeberarti bahwa slapdtidak tahu di mana harus meletakkan entri baru Anda. Ini biasanya berarti bahwa Anda belum mendefinisikan database yang sesuai. Dengan sistem yang lebih baru (yang menggunakan cn=configbukan slapd.conf), Anda biasanya akan menambahkan database baru atau memodifikasi entri database yang ada menggunakan ldapaddatau ldapmodify. Misalnya, pada sistem Fedora 17 saya, instalasi default menyiapkan database seperti ini untuk hosting 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

Untuk meng-host organisasi Anda ( o=myorganization, c=fr), saya perlu membuat file LDIF berikut:

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

Dan saya akan memuat modifikasi ini seperti ini:

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

Ini berfungsi karena olcAccessbaris - baris berikut sudah ada dalam konfigurasi:

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

Ini memberikan root, menghubungi slapdmelalui ldapi:///soket, akses bebas kata sandi ke cn=configpohon.

Saya kemudian akan memuat entri tingkat atas saya:

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

Dengan menjalankan:

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

Ini berfungsi karena saya telah menambahkan ACL serupa ke database ini. Perhatikan bahwa saya tidak perlu memulai dengan di c=frsini, karena basis data didefinisikan untuk menampungo=myorganization,c=fr

larsks
sumber
OK, terima kasih banyak larsks. Tetapi jika saya memahami jawaban Anda dengan benar, di sini Anda memodifikasi awalan terkini dari database OpenLDAP ini. Bagaimana jika saya ingin menambahkan yang baru? (Saya akan tetap menguji rekomendasi Anda, saya hanya ingin tahu)
Anthony O.
1
Gunakan ldapaddalih-alih ldapmodify, dan gunakan catatan yang ada sebagai model.
larsks
Jika jawaban ini menyurutkan masalah Anda, sebaiknya Anda menandainya sebagai diterima dengan mengeklik kotak centang di bagian kiri atas pertanyaan.
larsks
Sebenarnya, itu banyak membantu saya, tetapi itu bukan perintah yang tepat saya lewati, itu sebabnya saya membuat balasan saya sendiri. Saya tidak berani mengedit balasan Anda untuk memperbaikinya dengan ldif (khususnya tentang olcAccess) & perintah yang saya gunakan ... tetapi jika Anda ingin mengeditnya dengan salin / tempel dari balasan saya, saya dapat menandainya diterima & hapus milikku :)
Anthony O.
(Saya pikir ini bukan alasan untuk membatalkan jawaban saya ...)
Anthony O.
1

Berkat jawaban larsks , inilah yang saya lakukan.

Pertama di sini adalah ekstrak dari konfigurasi default dengan Ubuntu 12.04 (file /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

Jadi saya membuat yang berikut ini 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

dan menambahkannya ke ldap saya dengan perintah berikut:

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

Sekarang saya harus membuat simpul organisasi dengan yang berikut myorganization.ldif:

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

Dan akhirnya tambahkan dengan perintah berikut (yang pertama tidak berhasil karena Insufficient access (50)):

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

Sekarang saya bisa menambahkan unit organisasi:

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
Anthony O.
sumber
Ini dn: olcDatabase={1}hdb,cn=configadalah kunci bagi saya, terima kasih
miguelfg