ฉันจะกำหนดค่าการบำรุงรักษากลุ่มสมาชิกย้อนกลับบนเซิร์ฟเวอร์ openldap ได้อย่างไร (สมาชิกของ)


18

ขณะนี้ฉันกำลังทำงานเกี่ยวกับการรวมการตรวจสอบสิทธิ์ LDAP เข้ากับระบบและฉันต้องการ จำกัด การเข้าถึงตามกลุ่ม LDAP วิธีเดียวในการทำเช่นนี้คือผ่านตัวกรองการค้นหาดังนั้นฉันเชื่อว่าตัวเลือกเดียวของฉันคือการใช้แอตทริบิวต์ "memberOf" ในตัวกรองการค้นหาของฉัน เป็นความเข้าใจของฉันว่าแอตทริบิวต์ "memberOf" เป็นแอตทริบิวต์การดำเนินงานซึ่งสามารถสร้างโดยเซิร์ฟเวอร์สำหรับฉันทุกครั้งที่มีการสร้างแอตทริบิวต์ "สมาชิก" ใหม่สำหรับรายการ "groupOfNames" ใด ๆ บนเซิร์ฟเวอร์ เป้าหมายหลักของฉันคือสามารถเพิ่มแอตทริบิวต์ "member" ไปยังรายการ "groupOfNames" ที่มีอยู่และมีการเพิ่มแอตทริบิวต์ "memberOf" ที่ตรงกันลงใน DN I ที่ให้ไว้

สิ่งที่ฉันมีเพื่อให้บรรลุ:

ฉันยังใหม่กับการดูแลระบบ LDAP แต่จากสิ่งที่ฉันพบในคำแนะนำของผู้ดูแลระบบ openldap ดูเหมือนว่าReverse Group Membersence Maintence aka "memberof overlay" จะบรรลุผลตามที่ฉันต้องการ

เซิร์ฟเวอร์ของฉันกำลังเรียกใช้การติดตั้งแพคเกจ (slapd บน Ubuntu) ของ openldap 2.4.15 ซึ่งใช้การกำหนดค่าสไตล์รันไทม์ "cn = config" ตัวอย่างส่วนใหญ่ที่ฉันพบยังอ้างอิงถึงวิธี "slapd.conf" แบบเก่าของการกำหนดค่าแบบสแตติกและฉันพยายามอย่างดีที่สุดเพื่อปรับการกำหนดค่าให้เป็นรูปแบบที่ใช้ไดเรกทอรีใหม่

ฉันได้เพิ่มรายการต่อไปนี้เพื่อเปิดใช้งานโมดูซ้อนของ memberof:

เปิดใช้งานโมดูลด้วย olcModuleLoad

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

เปิดใช้งานการซ้อนทับสำหรับฐานข้อมูลและอนุญาตให้ใช้เป็นการตั้งค่าเริ่มต้น (groupOfNames, member, memberOf, ฯลฯ )

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

ผลลัพธ์ปัจจุบันของฉัน:

ด้วยการใช้การกำหนดค่าด้านบนฉันสามารถเพิ่ม "groupOfNames" ใหม่ด้วยจำนวนรายการ "สมาชิก" และมี DN ที่เกี่ยวข้องทั้งหมดที่อัปเดตด้วยแอตทริบิวต์ "memberOf" นี่เป็นส่วนหนึ่งของพฤติกรรมที่ฉันคาดหวัง ในขณะที่ฉันเชื่อว่าสิ่งต่อไปนี้ควรจะสำเร็จด้วยการซ้อนทับของสมาชิกฉันยังไม่ทราบวิธีการทำสิ่งต่อไปนี้และฉันยินดีต้อนรับคำแนะนำใด ๆ :

  1. เพิ่มแอตทริบิวต์ "member" ไปยัง EXISTING "groupOfNames" และมีแอตทริบิวต์ "memberOf" ที่เกี่ยวข้องถูกสร้างขึ้นโดยอัตโนมัติ
  2. ลบแอตทริบิวต์ "member" และให้แอตทริบิวต์ "memberOf" ที่สอดคล้องกันถูกลบโดยอัตโนมัติ

คำตอบ:


10

ฉันดิ้นรนกับสิ่งเดียวกันเอกสารประกอบ openldap นั้นเรียบง่ายและแทบไม่มีประโยชน์เลย เมื่อพวกเขาไปที่ฐานข้อมูลการตั้งค่า (ไม่ใช่ความคิดที่ไม่ดีในหลักการ) ตัวเลือกทั้งหมดเปลี่ยนไปดังนั้นเมื่อผู้คนยกตัวอย่างจาก

ในที่สุดฉันก็ได้ทำงานนี้ นี่คือข้อมูลสรุป ... ไฟล์ LDIF แรก:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

ไฟล์ LDIF ที่สอง:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

เพิ่มลงในฐานข้อมูลการกำหนดค่าโดยใช้ ldapadd (เหมือนกับสิ่งปกติการตั้งค่า)

มันไม่ได้อัปเดตข้อมูลที่มีอยู่ในฐานข้อมูลโดยอัตโนมัติดังนั้นฉันจำเป็นต้องใช้ slapcat เพื่อคัดลอกทุกอย่างออกเป็นไฟล์ชั่วคราวและไปที่แต่ละกลุ่มลบกลุ่มและเพิ่มกลุ่มเดิมกลับเข้ามาอีกครั้ง (บังคับให้คุณสมบัติ memberOf อัปเดต ได้อย่างถูกต้อง) หากคุณเริ่มต้นด้วยฐานข้อมูลที่ว่างเปล่ามันจะอัปเดตแอตทริบิวต์อย่างถูกต้องเมื่อมีการเพิ่มวัตถุ

นอกจากนี้โปรดทราบว่า"olcDatabase = {1} hdb"เป็นเรื่องปกติมาก แต่ไม่รับประกันว่าจะตรงกับการตั้งค่าของคุณ ให้แน่ใจว่าได้ตรวจสอบอย่างนั้น


1
ไม่ใช่slapadd(ไปยังฐานข้อมูลที่หยุดทำงาน) เป็นวิธีที่ถูกต้องหรือไม่
mad_vs

11

ฉันเขียนเกี่ยวกับเรื่องนี้ในบล็อกของฉันเมื่อเร็ว ๆ นี้ www.jordaneunson.com ฉันคัดลอกและวางส่วนที่เกี่ยวข้องใน

สิ่งที่ฉันต้องทำคือหยุดบริการ "slapd" บนเซิร์ฟเวอร์ LDAP ของฉันและแก้ไขไฟล์ slapd.conf ของฉันและเพิ่มสองบรรทัดต่อไปนี้

moduleload memberof.la
overlay memberof

ฉันมี groupOfNames ชื่อ vpn อยู่แล้วดังนั้นฉันต้องสร้างไฟล์ LDIF ด้วยเนื้อหาต่อไปนี้:

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

และเพิ่มสิ่งนี้ลงในฐานข้อมูล ldap ของฉัน

slapadd -f file.ldif

หลังจากนี้ฉันยิงเซิร์ฟเวอร์ ldap ในการดีบักเพื่อตรวจสอบข้อผิดพลาด

slapd -d 99 -f /etc/ldap/slapd.conf 

และตรวจสอบเพื่อให้แน่ใจว่ารายชื่อสมาชิกกลุ่มของ“ vpn” ของฉันอยู่ในรายการผู้ใช้ของฉัน

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

และแบม! ความสำเร็จ!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

ดังนั้นฉันจึงยิงบริการ slapd สำรองและประสบความสำเร็จอย่างมากตั้งแต่นั้นมา สำหรับเครื่องมือการจัดการ GUI ใหม่ฉันใช้ phpLDAPAdmin และไม่มีปัญหากับการกำหนดแอตทริบิวต์ memberOf และไม่ได้กำหนดให้กับผู้ใช้ของฉัน

สิ่งสุดท้ายที่ควรทราบคือแอตทริบิวต์ "memberOf" ไม่ได้เป็นส่วนหนึ่งของ LDAP v3 schema พื้นฐานและการทำ ldapsearch จะไม่เปิดเผยแอตทริบิวต์นี้เว้นแต่ว่าได้ทำการสอบถามโดยเฉพาะ นั่นคือเหตุผลในตัวอย่างข้างต้นของฉันมันถูกประกาศในตอนท้ายของพารามิเตอร์ ldapsearch

หวังว่านี่จะช่วยได้

แก้ไข: ฉันเพิ่งทดสอบปัญหาของคุณกับ Apache Directory Studio: ตราบใดที่ฉันป้อนค่าสมาชิกคุณลักษณะโดยรวมตามที่กล่าวถึงข้างต้นมันใช้งานได้ A-OK อย่างไรก็ตามคุณลักษณะ memberOf ไม่ปรากฏในรายการผู้ใช้ นี่เป็นเพราะแอตทริบิวต์ memberOf ไม่ได้เป็นส่วนหนึ่งของ LDAPv3 schema หากต้องการตรวจสอบว่ามีอยู่ให้ใช้เครื่องมือบรรทัดคำสั่ง ldapsearch:

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

1
การโหลดโมดูลและการเพิ่มการซ้อนทับเป็นสิ่งที่ฉันทำอย่างน่าเสียดาย ตามที่ฉันได้กล่าวถึงปัญหาไม่ใช่ว่าแอตทริบิวต์ "memberOf" จะไม่ถูกเพิ่มสำหรับรายการ groupOfNames ใหม่มันไม่ได้ถูกเพิ่มเมื่อฉันเพิ่มแอตทริบิวต์ "member" ไปยังกลุ่มที่มีอยู่ ขณะนี้ฉันใช้ Apache Directory Studio เพื่อเรียกดูและกำหนดค่า LDAP ของฉันดังนั้นมันจึงแสดงรายการ memberOf เมื่อฉันเรียกดู มันไม่ใช่เรื่องของการถูกซ่อน
emills

1
คุณสร้างแอตทริบิวต์สมาชิกใน groupOfNames อย่างไร ใช้ DN ทั้งหมดหรือไม่ เช่น: "uid = user, ou = People, dc = corp, dc = org" หรือคุณแค่กรอกชื่อผู้ใช้ของพวกเขา? เพื่อให้การทำแผนที่ย้อนกลับทำงานคุณจำเป็นต้องใช้ DN ทั้งหมดเพื่อให้ memberOf รู้ตำแหน่งที่จะวางแผนที่ย้อนกลับ
Jordan Eunson

1
แก้ไข: ฉันเพิ่งทดสอบปัญหาของคุณกับ Apache Directory Studio ตราบใดที่ฉันป้อนค่าสมาชิกคุณลักษณะโดยรวมตามที่กล่าวถึงข้างต้นก็ใช้งานได้ A-OK อย่างไรก็ตามคุณลักษณะ memberOf ไม่ปรากฏในรายการผู้ใช้ นี่เป็นเพราะแอตทริบิวต์ memberOf ไม่ได้เป็นส่วนหนึ่งของ LDAPv3 schema เพื่อตรวจสอบว่ามีใช้เครื่องมือบรรทัดคำสั่ง ldapsearch <code> ldapsearch -h ldap -x -b "dc = ร้านค้า, dc = lan" '(uid = jordan)' memberOf </code>
Jordan Eunson

1
ฉันกำลังใช้ DN ในรายการสมาชิก ไม่ใช่เรื่องของการไม่เห็นมันตามที่ฉันได้กล่าวไปแล้วพวกเขาจะได้รับการเพิ่มเท่านั้น (และสามารถมองเห็นได้) ด้วยการเพิ่ม groupOfNames ใหม่เมื่อไม่ได้เพิ่มแอตทริบิวต์สมาชิกให้กับกลุ่มที่มีอยู่
emills

1
<quote> พวกเขาได้รับการเพิ่มเท่านั้น (และมองเห็นได้) </quote> ฉันขอโทษ แต่ข้อความนี้ไม่ถูกต้อง แอ็ตทริบิวต์ memberOf ไม่สามารถมองเห็นได้เว้นแต่คุณจะสอบถามเฉพาะ คุณช่วยกรุณาโพสต์ผลลัพธ์ของคำสั่ง ldapsearch ตามรายการด้านบน เปลี่ยนผู้ใช้เป็นผู้ที่ควรมีคุณสมบัติ memberOf แต่ไม่มี
Jordan Eunson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.