“ ไม่มีความรู้ที่เหนือกว่าระดับโลก” ในขณะที่เพิ่มประเทศ


14

ฉันต้องเพิ่มสิ่งorganizationalunitนี้ลงใน OpenLDAP ที่ติดตั้งใหม่ (บน Ubuntu 12.04):

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

คำใบ้ใด ๆ

คำตอบ:


20

ข้อผิดพลาด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ติดต่อslapdผ่านldapi:///ซ็อกเก็ตการเข้าถึง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


ตกลงขอบคุณมาก larsks แต่ถ้าฉันเข้าใจคำตอบของคุณถูกต้องที่นี่คุณแก้ไขคำนำหน้าปัจจุบันของฐานข้อมูลของ OpenLDAP นี้ ถ้าฉันต้องการเพิ่มอันใหม่ล่ะ (ฉันจะทดสอบคำแนะนำของคุณต่อไปฉันแค่อยากรู้อยากเห็น)
แอนโทนี่ O.

1
ใช้ldapaddแทนldapmodifyและใช้บันทึกที่มีอยู่เป็นแบบจำลอง
larsks

หากคำตอบนี้ทำให้ปัญหาของคุณเป็นไปได้มากที่คุณจะทำเครื่องหมายว่าเป็นที่ยอมรับโดยคลิกที่ช่องทำเครื่องหมายที่ด้านบนซ้ายของคำถาม
larsks

ที่จริงแล้วมันช่วยฉันได้มาก แต่มันไม่ใช่คำสั่งที่แน่นอนที่ฉันผ่านนั่นคือสาเหตุที่ฉันได้สร้างคำตอบของฉันเอง ฉันไม่กล้าแก้ไขคำตอบของคุณเพื่อแก้ไขด้วยolcAccessคำสั่งldif (โดยเฉพาะเกี่ยวกับ) & คำสั่งที่ฉันใช้จริง ๆ ... แต่ถ้าคุณต้องการแก้ไขด้วยการคัดลอก / วางจากคำตอบของฉันฉันสามารถทำเครื่องหมายยอมรับ & เอาออกของฉัน :)
Anthony O.

(ฉันคิดว่านี่ไม่ใช่เหตุผลที่จะลบคำตอบของฉัน ... )
Anthony O.

1

ขอบคุณคำตอบ larsksนี่คือสิ่งที่ฉันทำ

ก่อนอื่นนี่คือการแยกการตั้งค่าเริ่มต้นกับ 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

นี่dn: olcDatabase={1}hdb,cn=configเป็นกุญแจสำคัญสำหรับฉันขอบคุณ
miguelfg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.