סדרת RHCSA: הגדרת הזדהות מבוססת LDAP ב-RHEL 7 – חלק 14

נתחיל מאמר זה על ידי עיקול כמה יסודות של LDAP (מה זה, איפה זה משמש ולמה) ונראה כיצד להגדיר שרת LDAP ולהגדיר לקוח לאמת נגדו באמצעות Red Hat Enterprise Linux 7 systems.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

כפי שנראה, ישנם כמה תרחישי יישום אפשריים נוספים, אך במדריך זה נתמקד באופן בלעדי באימות מבוסס 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 עומדת על פרוטוקול גישה לספרייה קלה ומורכבת מסט פרוטוקולים שמאפשרים ללקוח לגשת, דרך רשת, למידע שמאוחסן מרכזית (כמו ספריית קלטת כניסה, נתיבים מוחלטים לספריות בית, ומידע משתמש מערכתי טיפוסי אחר, לדוגמה) שצריך להיות נגיש ממקומות שונים או זמין למספר גדול של משתמשי סוף (דוגמה נוספת היא ספריית כתובות בית ומספרי טלפון של כל העובדים בחברה).

שמירת מידע כזה (ועוד) מרכזית משמע זה יכול להיות נתפס ונגיש יותר על ידי כל אחד שקיבל הרשאות להשתמש בו.

התרשים הבא מציע תרשים פשוט של LDAP, ומתואר להלן בפרטים נוספים:

LDAP Diagram

הסבר על התרשים לעיל בפרטים.

  1. רשומה בספריית LDAP מייצגת יחידה אחת של מידע ומזוהה באופן ייחודי על ידי מה שנקרא שם מצויין.
  2. מאפיין הוא חתיכת מידע הקשורה לרשומה (לדוגמה, כתובות, מספרי טלפון ליצירת קשר זמינים, וכתובות דוא"ל).
  3. לכל מאפיין מוקצים ערכים אחד או יותר המורכבים מרשימה מופרדת ברווחים. ערך שהוא ייחודי לכל רשומה נקרא שם מצויין יחסי.

אחרי שנאמר זאת, בואו נמשיך עם התקנות שרת ולקוח LDAP.

התקנת והגדרת שרת ולקוח 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 לא מפריע על ידי הפעלת ה־booleans הבאים באופן עמיק, גם בשרת וגם בלקוח:

# 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

כפי שמוצג בתמונה הבאה:

Set LDAP Admin Password

וצור קובץ LDIF (ldaprootpasswd.ldif) עם התוכן הבא:

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

כאשר:

  1. PASSWORD הוא המחרוזת המעוברת שהתקבלה קודם.
  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 Configuration

וייבא כמה הגדרות בסיסיות של LDAP מהמדרגה /etc/openldap/schema:

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

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
LDAP Domain Configuration

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
Add LDAP Domain Attributes and Values

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
LDAP User Configuration

באופן דומה, ניתן למחוק את רשומת המשתמש שנוצרה עתה:

# 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 Client Configuration

Summary

במאמר זה הסברנו כיצד להגדיר אימות בסיסי נגד שרת LDAP. כדי להגדיר נסיון נוסף להגדרת המתוארת במדריך הנוכחי, אנא הפנה לפרק 13 – הגדרת LDAP במדריך מנהל המערכת של RHEL 7, והתמקד בהגדרות האבטחה בשימוש ב־TLS.

אל תהסס להשאיר שאלות באמצעות טופס ההערות למטה.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/