<ก่อนหน้านี้ | Contents | ถัดไป>
1.7 การควบคุมการเข้าถึง
การจัดการประเภทการเข้าถึงที่ผู้ใช้ควรได้รับ (อ่าน เขียน ฯลฯ) เรียกว่า
การควบคุมการเข้าถึง. คำสั่งการกำหนดค่าที่เกี่ยวข้องเรียกว่ารายการควบคุมการเข้าถึงหรือ ACL
เมื่อเราติดตั้งแพ็คเกจ slapd ACL ต่าง ๆ ถูกตั้งค่าโดยอัตโนมัติ เราจะพิจารณาผลที่ตามมาที่สำคัญสองสามประการของค่าเริ่มต้นเหล่านั้น และในการทำเช่นนั้น เราจะได้รับแนวคิดว่า ACL ทำงานอย่างไรและกำหนดค่าอย่างไร
ในการรับ ACL ที่มีประสิทธิภาพสำหรับการสืบค้น LDAP เราต้องดูรายการ ACL ของฐานข้อมูลที่กำลังถูกสืบค้น เช่นเดียวกับรายการของอินสแตนซ์ฐานข้อมูลส่วนหน้าพิเศษ ACL ที่เป็นของกลุ่มหลังทำหน้าที่เป็นค่าเริ่มต้นในกรณีที่ค่าเดิมไม่ตรงกัน ฐานข้อมูลส่วนหน้าเป็นฐานข้อมูลที่สองที่ได้รับการพิจารณา และ ACL ที่จะใช้เป็นฐานข้อมูลแรกที่ตรงกัน ("คู่แรกชนะ") จากแหล่งที่มาของ ACL 2 แหล่งเหล่านี้ คำสั่งต่อไปนี้จะให้ ACL ของฐานข้อมูล mdb ตามลำดับ ("dc=example,dc=com") และของฐานข้อมูลส่วนหน้า:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}mdb)' olcAccess
dn: olcDatabase={1}mdb,cn=config
olcAccess: {0}to attrs=userPassword โดยเขียนเองโดยที่ไม่ระบุชื่อ auth โดย * none olcAccess: {1}to attrs=shadowLastChange โดยเขียนเองโดย * read
olcAccess: {2}เป็น * โดย * read
rootDN มีสิทธิ์เต็มรูปแบบในฐานข้อมูลเสมอ และไม่จำเป็นต้องรวมอยู่ใน ACL ใดๆ
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={-1}frontend)' olcAccess
dn: olcDatabase={-1}ส่วนหน้า,cn=config
olcAccess: {0}ถึง * โดย dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external
,cn=auth จัดการโดย * break
olcAccess: {1}to dn.exact="" โดย * read
olcAccess: {2}to dn.base="cn=Subschema" โดย * read
ACL สองรายการแรกมีความสำคัญอย่างยิ่ง:
olcAccess: {0}to attrs=userPassword โดยเขียนเองโดยที่ไม่ระบุชื่อ auth โดย * none olcAccess: {1}to attrs=shadowLastChange โดยเขียนเองโดย * read
นี้สามารถแสดงแตกต่างกันสำหรับการย่อยอาหารได้ง่ายขึ้น:
ไปที่ attrs=userPassword
โดยตัวเองเขียน
โดยการตรวจสอบที่ไม่ระบุชื่อโดย * none
to attrs=shadowLastChange โดยเขียนเอง
โดย * read
ACL เหล่านี้บังคับใช้สิ่งต่อไปนี้:
• การเข้าถึง 'รับรองความถูกต้อง' แบบไม่ระบุชื่อมีไว้สำหรับ รหัสผ่านผู้ใช้ แอตทริบิวต์เพื่อให้ผู้ใช้สามารถตรวจสอบหรือ ผูก. อาจเป็นการตอบโต้โดยสัญชาตญาณว่า 'การตรวจสอบสิทธิ์แบบไม่ระบุตัวตน' เป็นสิ่งจำเป็นแม้ว่าการเข้าถึง DIT แบบไม่ระบุชื่อจะเป็นแบบไม่พึงประสงค์ มิฉะนั้น นี่อาจเป็นปัญหาของไก่และไข่: ก่อนการตรวจสอบสิทธิ์ ผู้ใช้ทั้งหมดจะไม่ระบุชื่อ
•ความ โดยตัวเองเขียน ACL ให้สิทธิ์ในการเขียนถึง รหัสผ่านผู้ใช้ ให้กับผู้ใช้ที่รับรองความถูกต้องว่าเป็น dn ที่แอตทริบิวต์อาศัยอยู่ กล่าวอีกนัยหนึ่งผู้ใช้สามารถอัปเดต รหัสผ่านผู้ใช้ คุณลักษณะของรายการของตนเอง
•ความ รหัสผ่านผู้ใช้ ผู้ใช้รายอื่นไม่สามารถเข้าถึงแอตทริบิวต์ได้ ยกเว้น rootDN ซึ่งเข้าถึงได้เสมอและไม่จำเป็นต้องมีการกล่าวถึงอย่างชัดเจน
• เพื่อให้ผู้ใช้เปลี่ยนรหัสผ่านของตนเองได้โดยใช้ passwd หรือสาธารณูปโภคอื่น ๆ ของผู้ใช้เอง เงาLastChange แอตทริบิวต์จะต้องเขียนได้ ผู้ใช้ไดเร็กทอรีอื่น ๆ ทั้งหมดสามารถอ่านเนื้อหาของแอตทริบิวต์นี้ได้
สามารถค้นหา DIT นี้โดยไม่ระบุชื่อได้เนื่องจาก 'to * โดย * read' ใน ACL นี้ ซึ่งให้สิทธิ์การเข้าถึงแบบอ่านสำหรับทุกสิ่งอื่นๆ โดยทุกคน (รวมถึงแบบไม่ระบุตัวตน):
ถึง *
โดย * read
หากเป็นสิ่งที่ไม่ต้องการ คุณต้องเปลี่ยน ACL ในการบังคับการรับรองความถูกต้องระหว่างการร้องขอการผูก คุณสามารถอีกทางหนึ่ง (หรือร่วมกับ ACL ที่แก้ไข) ให้ใช้คำสั่ง 'olcRequire: authc'
ตามที่กล่าวไว้ก่อนหน้านี้ ไม่มีบัญชีผู้ดูแลระบบ ("rootDN") ที่สร้างขึ้นสำหรับฐานข้อมูล slapd-config อย่างไรก็ตาม มีข้อมูลประจำตัวของ SASL ที่ได้รับสิทธิ์เข้าถึงแบบเต็ม มันแสดงถึง superuser ของ localhost (root/ sudo) นี่คือ:
dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=ภายนอก,cn=auth
คำสั่งต่อไปนี้จะแสดง ACL ของฐานข้อมูล slapd-config:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={0}config)' olcAccess
dn: olcDatabase={0}config,cn=config
olcAccess: {0}ถึง * โดย dn.exact=gidNumber=0+uidNumber=0,cn=peercred, cn=external,cn=auth จัดการโดย * break
เนื่องจากนี่คือข้อมูลประจำตัวของ SASL เราจึงต้องใช้ SASL กลไก เมื่อเรียกใช้ยูทิลิตี LDAP ที่เป็นปัญหา และเราเห็นมาหลายครั้งแล้วในคู่มือนี้ เป็นกลไกภายนอก ดูคำสั่งก่อนหน้าสำหรับตัวอย่าง โปรดทราบว่า:
1. คุณต้องใช้ sudo ให้กลายเป็นเอกลักษณ์ของรูทเพื่อให้ ACL ตรงกัน
2. กลไกภายนอกทำงานผ่าน IPC (ซ็อกเก็ตโดเมน UNIX) ซึ่งหมายความว่าคุณต้องใช้ ลดาปี
รูปแบบ URI
วิธีรวบรัดในการรับ ACL ทั้งหมดมีดังนี้:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcAccess=*)' olcAccess olcSuffix
มีหลายสิ่งที่จะพูดในหัวข้อการควบคุมการเข้าถึง ดูหน้าคนสำหรับ slapd.access4.