ค้นหาเว็บไซต์

ซีรี่ส์ RHCSA: การตั้งค่าการรับรองความถูกต้องโดยใช้ LDAP ใน RHEL 7 - ตอนที่ 14


เราจะเริ่มบทความนี้โดยสรุปข้อมูลพื้นฐานบางประการของ LDAP (คืออะไร ใช้ที่ไหน และเพราะเหตุใด) และแสดงวิธีการตั้งค่าเซิร์ฟเวอร์ LDAP และกำหนดค่าไคลเอ็นต์ให้ตรวจสอบสิทธิ์โดยใช้ ระบบ Red Hat Enterprise Linux 7

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

ด้วยเหตุผลเดียวกัน คุณจะทราบว่าฉันได้ตัดสินใจที่จะละการอ้างอิงหลายรายการไปยังหน้า man ของเครื่องมือ LDAP เพื่อความกระชับ แต่คำอธิบายที่เกี่ยวข้องนั้นอยู่เพียงปลายนิ้วสัมผัส (man ldapadd สำหรับ ตัวอย่าง).

ที่กล่าวว่ามาเริ่มกันเลย

สภาพแวดล้อมการทดสอบของเรา

สภาพแวดล้อมการทดสอบของเราประกอบด้วยกล่อง RHEL 7 สองกล่อง:


Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

หากต้องการ คุณสามารถใช้เครื่องที่ติดตั้งไว้ในส่วนที่ 12: ทำการติดตั้ง RHEL 7 อัตโนมัติโดยใช้ Kickstart เป็นไคลเอ็นต์

LDAP คืออะไร?

LDAP ย่อมาจาก Lightweight Directory Access Protocol และประกอบด้วยชุดโปรโตคอลที่อนุญาตให้ไคลเอ็นต์เข้าถึงข้อมูลที่จัดเก็บไว้ในส่วนกลางผ่านเครือข่าย (เช่น ไดเร็กทอรีของเชลล์การเข้าสู่ระบบ เส้นทางที่แน่นอนไปยังโฮมไดเร็กตอรี่ และข้อมูลผู้ใช้ระบบทั่วไปอื่นๆ เป็นต้น) ที่ควรสามารถเข้าถึงได้จากที่ต่างๆ หรือสามารถเข้าถึงได้สำหรับผู้ใช้ปลายทางจำนวนมาก (อีกตัวอย่างหนึ่งคือไดเร็กทอรีของที่อยู่บ้านและหมายเลขโทรศัพท์ของพนักงานทุกคนใน บริษัท).

การเก็บรักษาข้อมูลดังกล่าว (และอื่นๆ) ไว้ในส่วนกลางทำให้ทุกคนที่ได้รับอนุญาตให้ใช้งานสามารถดูแลรักษาและเข้าถึงได้ง่ายขึ้น

ไดอะแกรมต่อไปนี้นำเสนอไดอะแกรมอย่างง่ายของ LDAP และอธิบายไว้ด้านล่างโดยละเอียดยิ่งขึ้น:

คำอธิบายแผนภาพด้านบนโดยละเอียด

  1. รายการในไดเร็กทอรี LDAP แสดงถึงหน่วยหรือข้อมูลเดียว และถูกระบุโดยไม่ซ้ำกันด้วยสิ่งที่เรียกว่า Distinguished Name
  2. แอตทริบิวต์ คือข้อมูลที่เกี่ยวข้องกับรายการ (เช่น ที่อยู่ หมายเลขโทรศัพท์ติดต่อที่มีอยู่ และที่อยู่อีเมล)
  3. แต่ละแอตทริบิวต์ได้รับการกำหนด ค่า อย่างน้อยหนึ่งรายการซึ่งประกอบด้วยรายการที่คั่นด้วยช่องว่าง ค่าที่ไม่ซ้ำกันต่อรายการเรียกว่า Relative Distinguished Name

ดังที่กล่าวไปแล้ว มาดำเนินการติดตั้งเซิร์ฟเวอร์และไคลเอนต์กันดีกว่า

การติดตั้งและการกำหนดค่าเซิร์ฟเวอร์ LDAP และไคลเอนต์

ใน RHEL 7 LDAP จะถูกใช้งานโดย OpenLDAP ในการติดตั้งเซิร์ฟเวอร์และไคลเอนต์ ให้ใช้คำสั่งต่อไปนี้ ตามลำดับ:


yum update && yum install openldap openldap-clients openldap-servers
yum update && yum install openldap openldap-clients nss-pam-ldapd

เมื่อการติดตั้งเสร็จสมบูรณ์ มีบางอย่างที่เราพิจารณา ขั้นตอนต่อไปนี้ควรดำเนินการบนเซิร์ฟเวอร์เพียงอย่างเดียว เว้นแต่จะระบุไว้อย่างชัดเจน:

1. ตรวจสอบให้แน่ใจว่า SELinux ไม่ขัดขวางโดยการเปิดใช้งาน บูลีน ต่อไปนี้อย่างต่อเนื่อง ทั้งบนเซิร์ฟเวอร์และไคลเอนต์:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

โดยที่ allow_ypbind จำเป็นสำหรับการตรวจสอบสิทธิ์แบบ LDAP และบางแอปพลิเคชันอาจจำเป็นต้องใช้ authlogin_nsswitch_use_ldap

2. เปิดใช้งานและเริ่มบริการ:


systemctl enable slapd.service
systemctl start slapd.service

โปรดทราบว่าคุณสามารถปิดใช้งาน เริ่มใหม่ หรือหยุดบริการด้วย systemctl ได้เช่นกัน:


systemctl disable slapd.service
systemctl restart slapd.service
systemctl stop slapd.service

3. เนื่องจากบริการ slapd ทำงานในฐานะผู้ใช้ ldap (ซึ่งคุณสามารถตรวจสอบได้ด้วย ps -e -o pid,uname,comm | grep slapd ) ผู้ใช้ดังกล่าวควรเป็นเจ้าของไดเร็กทอรี /var/lib/ldap เพื่อให้เซิร์ฟเวอร์สามารถแก้ไขรายการที่สร้างโดยเครื่องมือการดูแลระบบที่สามารถเรียกใช้ในฐานะรูทเท่านั้น (เพิ่มเติมเกี่ยวกับสิ่งนี้ใน นาที).

ก่อนที่จะเปลี่ยนความเป็นเจ้าของไดเร็กทอรีนี้ซ้ำๆ ให้คัดลอกไฟล์การกำหนดค่าฐานข้อมูลตัวอย่างสำหรับ slapd ลงไป:


cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap

4. ตั้งค่าผู้ใช้ที่เป็นผู้ดูแลระบบ OpenLDAP และกำหนดรหัสผ่าน:


slappasswd

ดังที่แสดงในภาพถัดไป:

และสร้างไฟล์ LDIF (ldaprootpasswd.ldif) โดยมีเนื้อหาดังต่อไปนี้:


dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

ที่ไหน :

  1. รหัสผ่าน คือสตริงที่แฮชที่ได้รับมาก่อนหน้านี้
  2. cn=config ระบุตัวเลือกการกำหนดค่าส่วนกลาง
  3. olcDatabase ระบุชื่ออินสแตนซ์ฐานข้อมูลเฉพาะ และโดยทั่วไปจะพบได้ใน /etc/openldap/slapd.d/cn=config

จากการอ้างอิงถึงพื้นหลังทางทฤษฎีที่ให้ไว้ก่อนหน้านี้ ไฟล์ ldaprootpasswd.ldif จะเพิ่มรายการลงในไดเร็กทอรี LDAP ในรายการนั้น แต่ละบรรทัดแสดงถึงคุณลักษณะ: คู่ค่า (โดยที่ dn, changetype, add และ olcRootPW คือคุณลักษณะ และสตริงทางด้านขวาของแต่ละโคลอนเป็นค่าที่สอดคล้องกัน)

คุณอาจต้องการคำนึงถึงสิ่งนี้ในขณะที่เราดำเนินการต่อไป และโปรดทราบว่าเราใช้ชื่อสามัญ (cn=) เดียวกันตลอดส่วนที่เหลือของบทความนี้ โดยแต่ละขั้นตอนจะขึ้นอยู่กับชื่อก่อนหน้า .

5. ตอนนี้ ให้เพิ่มรายการ LDAP ที่เกี่ยวข้องโดยระบุ URI ที่อ้างอิงถึงเซิร์ฟเวอร์ ldap โดยที่อนุญาตเฉพาะช่องโปรโตคอล/โฮสต์/พอร์ตเท่านั้น


ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

ผลลัพธ์ควรคล้ายกับ:

และนำเข้าคำจำกัดความ LDAP พื้นฐานบางส่วนจากไดเร็กทอรี /etc/openldap/schema:


for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

6. ให้ LDAP ใช้โดเมนของคุณในฐานข้อมูล

สร้างไฟล์ LDIF อีกไฟล์หนึ่ง ซึ่งเราจะเรียกว่า ldapdomain.ldif โดยมีเนื้อหาดังต่อไปนี้ โดยแทนที่โดเมนของคุณ (ใน Domain Component dc=) และรหัสผ่านตามความเหมาะสม:


dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

จากนั้นให้โหลดดังนี้


ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. ถึงเวลาเพิ่มรายการลงในไดเรกทอรี LDAP ของเรา คุณลักษณะและค่าจะถูกคั่นด้วยโคลอน (:) ในไฟล์ต่อไปนี้ ซึ่งเราจะตั้งชื่อว่า baseldapdomain.ldif:


dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

เพิ่มรายการลงในไดเร็กทอรี LDAP:


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

8. สร้างผู้ใช้ LDAP ชื่อ ldapuser (adduser ldapuser) จากนั้นสร้างคำจำกัดความสำหรับกลุ่ม LDAP ใน ldapgroup.ldif.


adduser ldapuser
vi ldapgroup.ldif

เพิ่มเนื้อหาต่อไปนี้


dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

โดยที่ gidNumber คือ GID ใน /etc/group สำหรับ ldapuser) และโหลด:


ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. เพิ่มไฟล์ LDIF พร้อมคำจำกัดความสำหรับผู้ใช้ ldapuser (ldapuser.ldif):


dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

และโหลดมัน:


ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

ในทำนองเดียวกัน คุณสามารถลบรายการผู้ใช้ที่คุณเพิ่งสร้างขึ้นได้:


ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. อนุญาตการสื่อสารผ่านไฟร์วอลล์:


firewall-cmd --add-service=ldap

11. สุดท้ายแต่ไม่ท้ายสุด เปิดใช้งานไคลเอ็นต์เพื่อตรวจสอบสิทธิ์โดยใช้ LDAP

เพื่อช่วยเราในขั้นตอนสุดท้ายนี้ เราจะใช้ยูทิลิตี authconfig (อินเทอร์เฟซสำหรับกำหนดค่าทรัพยากรการตรวจสอบสิทธิ์ของระบบ)

เมื่อใช้คำสั่งต่อไปนี้ โฮมไดเร็กทอรีสำหรับผู้ใช้ที่ร้องขอจะถูกสร้างขึ้นหากไม่มีอยู่หลังจากการรับรองความถูกต้องกับเซิร์ฟเวอร์ LDAP สำเร็จ:


authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

สรุป

ในบทความนี้ เราได้อธิบายวิธีตั้งค่าการตรวจสอบสิทธิ์ขั้นพื้นฐานกับเซิร์ฟเวอร์ LDAP หากต้องการกำหนดค่าการตั้งค่าเพิ่มเติมที่อธิบายไว้ในคู่มือปัจจุบัน โปรดดูบทที่ 13 – การกำหนดค่า LDAP ในคู่มือผู้ดูแลระบบ RHEL 7 โดยให้ความสนใจเป็นพิเศษกับการตั้งค่าความปลอดภัยโดยใช้ TLS

อย่าลังเลที่จะฝากคำถามใด ๆ ที่คุณอาจมีโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง