ฉันจัดการ 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 ถ้าไม่ คุณจะทำอย่างไรเพื่อเพิ่มความปลอดภัยให้แข็งแกร่งยิ่งขึ้น