OpenLDAP Proxy -- rwm-map vs map

  sonic0002        2018-02-02 20:36:02       9,493        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

โปรแกรมพร็อกซี OpenLDAP ใช้สำหรับเป็นตัวกลางในการรับส่งคำขอและการตอบสนอง ldap ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ เซิร์ฟเวอร์ต่างๆ อาจมีการแสดง/แอตทริบิวต์ที่แตกต่างกันเพื่อหมายถึงสิ่งเดียวกัน ตัวอย่างเช่น ในเซิร์ฟเวอร์ LDAP หนึ่ง firstName อาจแสดงโดย firstName แต่ในเซิร์ฟเวอร์อื่นอาจแสดงโดย givenName อย่างไรก็ตาม จากมุมมองของไคลเอ็นต์ ไคลเอ็นต์ต้องการรับเฉพาะ firstName เท่านั้น ไคลเอ็นต์ไม่สนใจแอตทริบิวต์ด้านหลัง

ในกรณีนี้ การแมปแอตทริบิวต์สามารถช่วยให้เห็นภาพเสมือนของข้อมูลด้านหลังได้ ในโพสต์อื่น OpenLDAP Proxy -- Tricks and tips เราได้แนะนำวิธีการทำงานของการแมปแอตทริบิวต์โดยใช้ overlay rwm วิธีนี้ทำงานได้ดีมากเมื่อเรามีเซิร์ฟเวอร์ LDAP ด้านหลังเพียงหนึ่งเดียวที่จะทำการพร็อกซี

อย่างไรก็ตาม ถ้าเราตั้งค่าเซิร์ฟเวอร์ LDAP สองตัวขึ้นไปสำหรับ backend database meta จะเกิดอะไรขึ้น เนื่องจาก rwm-map จะใช้การแมปแบบทั่วโลก แต่ไม่ใช่แบบตามเซิร์ฟเวอร์ การแมปแอตทริบิวต์อาจไม่ทำงานกับบางเซิร์ฟเวอร์ ซึ่งจะเป็นปัญหา มาดูกันว่าจะเกิดขึ้นได้อย่างไร

สมมติว่ามีการตั้งค่าเซิร์ฟเวอร์ LDAP สองตัวใน backend meta ของ OpenLDAP proxy และแอตทริบิวต์ในเซิร์ฟเวอร์ทั้งสองนี้คือ:

เซิร์ฟเวอร์ 1

firtsName: myFirstName
sn: myLastName

เซิร์ฟเวอร์ 2

givenName: myFirstName
lastName: myLastName

ใน OpenLDAP proxy givenName ถูกแมปไปยัง firstName

overlay rwm
rwm-map attribute firstName givenName

เมื่อเรียกใช้ ldapsearch เพื่อรับแอตทริบิวต์ firstName firstName จะถูกแมปไปยัง givenName ก่อน และ OpenLDAP proxy จะส่งแอตทริบิวต์ givenName ไปยังเซิร์ฟเวอร์ 1 แต่เห็นได้ชัดว่าเซิร์ฟเวอร์ 1 ไม่มีแอตทริบิวต์ givenName ดังนั้นจึงจะไม่ส่งคืนอะไรเลย ในเซิร์ฟเวอร์ 2 เนื่องจากมี givenName ค่าชื่อจะถูกส่งคืน พฤติกรรมนี้ไม่เป็นไปตามที่คาดหวัง เห็นได้ชัดว่าเราคาดหวังว่าทั้งสองเซิร์ฟเวอร์ควรส่งคืน firstName 

ดูเหมือนว่า rwm-map แก้ปัญหาไม่ได้ โชคดีที่ถ้าคุณอ่าน slapd-meta man page อย่างละเอียด คุณจะพบว่ามีตัวเลือก map ซึ่งสามารถทำการแมปแอตทริบิวต์ได้ที่ระดับเซิร์ฟเวอร์

map {attribute|objectclass} [<local name>|*] {<foreign name>|*}
  นี้  แมปคลาสออบเจ็กต์และแอตทริบิวต์เช่นเดียวกับใน LDAP backend

นั่นหมายความว่าคุณสามารถแมปชื่อแอตทริบิวต์ที่แตกต่างกันไปยังชื่อแอตทริบิวต์ในพื้นที่เดียวกันสำหรับเซิร์ฟเวอร์ต่างๆ สำหรับ firstName ถ้ามีการกำหนดค่าดังต่อไปนี้

uri  "server1"
suffixmassage "local" "target"
map attribute firstName firstName    #สามารถละเว้นได้เช่นกัน

uri "server2"
suffixmassage "local" "target"
map attribute firstName givenName

สำหรับเซิร์ฟเวอร์ 1 firstName จะถูกแมปไปยัง firstName และสำหรับเซิร์ฟเวอร์ 2 givenName จะถูกแมปไปยัง firstName และไคลเอ็นต์จะเห็นค่าที่ส่งคืนจากทั้งสองเซิร์ฟเวอร์เมื่อมีการร้องขอ ldapsearch นี่คือสิ่งที่คาดหวังไว้

ขอเตือนว่า backend ldap ไม่รองรับ map อีกต่อไป คุณควรใช้ rwm-map แทน วิธีนี้ใช้ได้ผลเนื่องจาก database ldap มีไว้สำหรับการพร็อกซีไปยังเซิร์ฟเวอร์ LDAP หนึ่งตัวเมื่อมีการร้องขอใดๆ

หวังว่าจะเป็นประโยชน์

MAP  OPENLDAP  OPENLDAP PROXY  LDAP  RWM-MAP 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

Frontend vs backend