Score:1

SSSD สามารถตรวจสอบสิทธิ์ผ่าน LDAP ด้วยการผูกนิรนามที่ไม่ระบุตัวตนใน ACLs และบังคับใช้ 'olcRequires: authc' ได้หรือไม่

ธง jp

ฉันจัดการ LAN ด้วยรายชื่อผู้ใช้ที่เข้าถึงบ้านที่ใช้ร่วมกัน NFS ในขณะที่ได้รับการตรวจสอบสิทธิ์ผ่าน NIS/YP (ไคลเอ็นต์และเซิร์ฟเวอร์ที่ใช้ CentOS/Fedora)

ฉันอยู่ในกระบวนการที่เจ็บปวดในการย้ายออกจาก NIS/YP (ซึ่งค่อยๆ ยุติลงอย่างช้าๆ แต่ไม่สามารถย้อนกลับได้ใน Red Hat และอื่นๆ ที่คล้ายคลึงกัน) ไปสู่สิ่งที่ดูเหมือนจะเป็นการแทนที่ส่วนการตรวจสอบสิทธิ์ที่ยากน้อยที่สุด SSSD (สำหรับ ไคลเอนต์) และ LDAP (สำหรับฐานข้อมูลผู้ใช้บนเซิร์ฟเวอร์)

หลังจากการทดลองใช้งานหลายครั้ง ฉันได้มาถึงสิ่งที่ดูเหมือนการตั้งค่าการทำงานที่ยอมรับได้ และเริ่มพิจารณาการรักษาความปลอดภัยที่เข้มงวดขึ้น แต่มีบางอย่างที่ทำให้ฉันหลีกเลี่ยงไม่ได้

ส่วนใหญ่ในทุกที่ ACL มาตรฐานสำหรับการสืบค้นฐานข้อมูล LDAP เพื่อตรวจสอบสิทธิ์ผู้ใช้ที่กำลังเข้าสู่ระบบจะเป็นลักษณะนี้:

olcAccess: {0}ถึง attrs=userPassword โดยเขียนเองโดยไม่ระบุตัวตนโดย * none
olcAccess: {1}to attrs=shadowLastChange เขียนเองโดย * อ่าน
olcAccess: {2}ถึง * โดย * อ่าน

และทุกอย่างทำงานได้โดยไม่มีปัญหา

เนื่องจากฉันไม่ต้องการให้ผู้ใช้แอบดูบันทึกของกันและกัน ฉันจึงแก้ไขบันทึกล่าสุดเป็น:

olcAccess: {2}ถึง * โดย * ไม่มี

จากนั้นฉันก็พบ 'olcRequires: authc' ที่ควรปิดใช้งานการเชื่อมโยงแบบไม่ระบุตัวตนกับ LDAP (ดูเหมือนว่าจะมีการปรับปรุงด้านความปลอดภัย ไม่ใช่หรือ) และเปิดใช้งาน และทุกอย่างดูเหมือนจะทำงานต่อไป

จากนั้นอีกครั้ง เมื่อดูที่ ACL แรก คุณเห็นว่าการรับรองความถูกต้องแบบไม่ระบุตัวตนกับรหัสผ่านผู้ใช้ยังคงได้รับอนุญาต (ซึ่งดูเหมือนซ้ำซ้อนหากกฎก่อนหน้านี้มีผลบังคับใช้) และฉันได้ลองลบออก:

olcAccess: {0}ถึง attrs=userPassword ด้วยตัวเอง =wx โดย * none

และไม่มีอะไรทำงานอีกต่อไป

เมื่ออ่านต่อไปฉันพบว่าสิ่งที่จับต้องได้คือ SSSD ต้องสามารถสืบค้นฐานข้อมูลได้น้อยที่สุดเพื่อดึงโครงสร้างที่เพียงพอเพื่อแปลงชื่อผู้ใช้เช่น 'foo' เป็นชื่อเฉพาะของ LDAP เป็น 'uid=foo,ou=People,dc =example,dc=com' ที่ LDAP จะสามารถประมวลผลได้

ฉันเข้าใจว่า SSSD สามารถใช้ 'ผู้ใช้พร็อกซี' เพื่อทำสิ่งนั้นได้ ดังนั้นฉันจึงเพิ่มผู้ใช้ดังกล่าวในฐานข้อมูลของฉัน กำหนดค่า SSSD เพื่อใช้:

ldap_default_bind_dn = cn=autobind,dc=example,dc=com
ldap_default_authtok = รหัสผ่านลับมาก

และฉันคิดว่าฉันได้เพิ่ม ACL ที่จำเป็นเพื่อให้มันทำงานได้:

olcAccess: {0}to attrs=userPassword by self =wx by dn="cn=autobind,dc=example,dc=com" =x by * none
olcAccess: {1}ถึง attrs=shadowLastChange โดยเขียนเองโดย dn="cn=autobind,dc=example,dc=com" อ่านโดย * ไม่มี
olcAccess: {2}ถึง * โดย dn="cn=autobind,dc=example,dc=com" อ่านโดย * ไม่มี

ไม่จำเป็นต้องพูดว่ามันใช้งานไม่ได้ - ไม่เพียงแต่การเข้าสู่ระบบเท่านั้น ซึ่งอาจเป็นไปได้ว่า SSSD ได้รับการกำหนดค่าผิด แต่ตัวฐานข้อมูลเองกลับเกิดข้อผิดพลาด 49 (ข้อมูลประจำตัวไม่ถูกต้อง) ที่ส่งคืนไม่ได้แม้ผ่าน ldapsearch.

การเพิ่มใหม่ โดยการรับรองความถูกต้องที่ไม่ระบุชื่อ ทำให้มันใช้งานได้อีกครั้ง เห็นได้ชัดว่ามีบางอย่างที่ฉันไม่เข้าใจ

ฉันเข้าใจว่ามันดูเหมือนไม่ใช่เรื่องใหญ่ นอกเหนือจากคำว่า 'ไม่ระบุชื่อ' ที่ปรากฏใน ACL ของฉันซึ่งทำให้ฉันรำคาญมาก แต่ดูเหมือนจะไม่สามารถเข้าถึงสิ่งที่สำคัญได้

ดังนั้น คำถามของฉันคือ: เป็นการกำหนดค่าที่ปลอดภัยกว่าหรือไม่โดยที่การเข้าถึงแบบ 'ไม่ระบุชื่อ' ถูกลบออกอย่างสมบูรณ์ใน ACL สำหรับฐานข้อมูลผู้ใช้ LDAP ของฉัน และในที่สุดก็แทนที่ฟังก์ชันที่จำเป็นด้วยฟังก์ชันของผู้ใช้พร็อกซีเฉพาะสำหรับการใช้ SSSD ถ้าไม่ คุณจะทำอย่างไรเพื่อเพิ่มความปลอดภัยให้แข็งแกร่งยิ่งขึ้น

Score:1
ธง fr

หนึ่งที่การเข้าถึง 'ไม่ระบุชื่อ' ถูกลบออกโดยสิ้นเชิงใน ACL สำหรับฐานข้อมูลผู้ใช้ LDAP ของฉัน ในที่สุดก็แทนที่ฟังก์ชันที่จำเป็นด้วยฟังก์ชันของพร็อกซี

ในกรณีนี้ไม่มี คุณ สามารถ ไม่อนุญาตให้ดำเนินการอ่าน/ค้นหาทั้งหมดสำหรับการเชื่อมต่อที่ไม่ระบุชื่อและให้ SSSD ผูกกับบัญชีเครื่องก่อนที่จะทำการค้นหาผู้ใช้ (ฉันใช้ Kerberos สำหรับสิ่งนี้ SSSD จะเลือก /etc/krb5.keytab โดยอัตโนมัติ) แต่ลูกค้าที่ไม่ระบุชื่อยังคงต้องการ รับรองความถูกต้อง สิทธิขั้นต่ำ.

โดยเฉพาะอย่างยิ่ง, โดยการรับรองความถูกต้องที่ไม่ระบุชื่อ เป็นสิ่งจำเป็นใน ACL ของ OpenLDAP สำหรับการผูก "แบบง่าย" เริ่มต้นในการทำงาน เนื่องจากการเชื่อมต่อที่ดำเนินการผูกนั้นยังคงอยู่ในสถานะนิรนามจนกว่าการผูกจะสำเร็จ

ดังนั้น หากคุณกำหนดบัญชี "พร็อกซี" แสดงว่าคุณเปลี่ยนปัญหาเล็กน้อย แต่ไม่ได้เปลี่ยนจริง ๆ - การเชื่อมต่อที่ไม่ระบุชื่อยังคงต้องการสิทธิ์ 'รับรองความถูกต้อง' เพื่อที่จะ ผูกเป็นบัญชีผู้รับมอบฉันทะ. หรืออีกนัยหนึ่ง หากคุณต้องการให้ไคลเอนต์ได้รับการตรวจสอบสิทธิ์แล้วจึงจะตรวจสอบสิทธิ์ได้ แล้วไคลเอนต์จะตรวจสอบสิทธิ์ในฐานะบัญชีพร็อกซีได้อย่างไรตั้งแต่แรก


นอกจากนี้ฉันมักจะไม่ใช้ olcRequires: authc ทั่วโลกด้วยเหตุผลที่ขัดขวางการอ่านรายการ rootDSE (null DN) ซึ่งเป็นวิธีที่ไคลเอนต์ค้นพบ กลไกการรับรองความถูกต้องคืออะไร พร้อมใช้งานบนเซิร์ฟเวอร์ รวมถึงดูว่า StartTLS พร้อมใช้งานหรือไม่ (หากไม่ได้ใช้พอร์ต 636) ด้วยการป้องกันไม่ให้การเชื่อมต่อที่ไม่ระบุชื่ออ่านแอตทริบิวต์บน DN ว่าง คุณมีแนวโน้มที่จะทำลายการรับรองความถูกต้องของ SASL (เช่น Kerberos/GSSAPI) และจำกัดตัวเองให้ใช้รหัสผ่าน 'การผูกแบบง่าย' เท่านั้น

Francesco avatar
jp flag
ขอบคุณมาก สิ่งที่คุณบอกตรงกับที่คนอื่นๆ คุยกัน [ที่นี่](https://stackoverflow.com/questions/61521692/ldap-anonymous-auth) แต่ฉันต้องการให้แน่ใจว่าการดึง SSSD เข้ามาในคำถามจะไม่เปลี่ยนคำตอบ . คุณคิดว่าจะไม่มีการชุบแข็งอีกต่อไปในการตั้งค่าดังกล่าวหรือไม่?
user1686 avatar
fr flag
การปฏิเสธการดำเนินการผ่าน olcAccess ควรจะเพียงพอแล้ว (แต่หากคุณดำเนินการผ่าน ACL 'ส่วนหน้า' อย่าลืมให้สิทธิ์การอ่านแบบไม่ระบุชื่อแก่ rootDSE เช่น `dn.exact=""`) การใส่ ACL ที่จำกัดไว้ด้านบนอาจเป็นประโยชน์ เพื่อป้องกันการเปิดมากเกินไปโดยไม่ตั้งใจผ่าน ACL ในภายหลัง: `to * by anonymous auth by * none break` จะหยุดการประมวลผล ACL เพิ่มเติมทั้งหมดสำหรับ anonymous (ดังนั้น เฉพาะ 'auth ' ให้สิทธิ์) แต่จะล้ม (แหก) กฎหลักของคุณสำหรับคนอื่นๆ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา