הזדהות בלינוקס מול Active Directory

כתריאל טראום

katriel@penguin.org.il

היסטוריית גירסאות
גירסה 0.1 11-10-2007 כתריאל טראום
שלד

תקציר

מדריך זה מסביר כיצד לבצע הזדהות מבערכות מבוססות לינוקס מול שרתי Active Directory לצורך יישום הזדהות אחידה בארגון.

זכויות יוצרים ורשיון

כל הזכויות שמורות © 2007, כתריאל טראום, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL
Linux הוא סימן מסחרי רשום של Linus Torvalds.

הסרת אחריות

הכותב אינו נושא באחריות עבור שימוש ברעיונות, דוגמאות ומידע שבמדריך. השימוש הוא באחריות הקורא בלבד. המדריך עשוי להחיל טעויות ופרטים לא נכונים, שהשימוש בהם עשוי להיות מזיק למחשבך. למרות הסבירות הנמוכה, הכותב אינו לוקח כל אחריות

משוב

תגובות, תלונות, הערות והארות לכתובת: katriel@penguin.org.il.

מבוא

ספק מבוא למדריך , וכל דבר אחר שנראה מתאים באזור זה של המדריך. הסתכלות במדריכים אחרים עשויה לעזור.

קצת תאוריה

תהליך ההזדהות בלינוקס (וברוב מערכות יוניקס בכלל), נעשה ב-2 שלבים עיקריים:

  • זיהוי המשתמש, כלומר וידוא כי המשתמש אכן קיים
  • אימות זהות המשתמש ע”י סיסמא (או כל אמצעי אחר, עוד על כך בהמשך)

זיהוי משתמשים

זיהוי משתמשים במערכות לינוקס נעשה דרך מערכת ה-NSS, או Name Service Switch. זהו מנגנון ניתוב אשר מפנה בקשות ל”פענוח” מידע של דברים כמו משתמשים, סיסמאות וכתובות למודולים אשר מסוגלים לספק את המידע המתאים. אם נתרכז רגע במנגנון שנדון בו במדריך זה, זיהוי משתמשים, המודול הבסיסי מפנה את כל הבקשות דרך מודול שנקרא files לקבצים מקומיים, כלומר לקובץ /etc/passwd.
את מנגנון ה-NSS מתצרים דרך הקובץ /etc/nsswitch.conf

בעת בקשות הזדהות, כשלב ראשון מתבקשת המערכת לברר כי המשתמש אכן קיים. בקשת מערכת (system Call) אשר מבצעת ספריית ה-C (במקרה הזה glibc) פונה דרך ה-NSS לכל השיטות המוגדרות כדי לפענח ולוודא כי אכן המשתמש קיים.
שיטות זיהוי המשתמשים העיקריות הן:

  • file - קבצים מקומיים, כלומר /etc/{passwd,shadow,hosts} וכו
  • nis/nis+ - משתמש במנגנון NIS כדי לזהות משתמשים
  • db - שימוש בקבצי .db מקומיים (בד”כ berkley db)
  • ldap - שימוש בשרת LDAP כדי לזהות משתמשים

אימות זהות המשתמש

אימות זהותו של המשתמש ע”י סיסמא\טביעת אצבע\וכו' הוא תהליך שמנוהל ע”י מנגנון הנקרא PAM, או Pluggable Authentication Modules. זהו מנגנון רב שיכבתי שדואג לא רק לאימות המשתמש (Authentication) אלא גם לאישורו (Account): האם מותר לו להתחבר למערכת בכלל? האם מותר לו להתחבר מהמקור הנוכחי? האם הוא צריך להחליף סיסמא? ועוד. בנוסף, מנגנון זה מספק שרותים של החלפת סיסמאות (Password) והקמת השיחה (Session), תהליחך הכולל דברים כמו נתינת הרשאות למשתמשים מקומיים על משאבים מקומיים (גישה לכרטיס הקול או כונן ה-CD).

כמו שבודאי הבנתם, PAM הוא לא המנגנון הכי פשוט בעולם, אבל הוא גמיש מאין כמותו, ומהווה בסיס לכל תהליך אימות משתמשים במערכות לינוקס. עוד מידע על pam ניתן לקרוא ב-man או באתר הבית של הפרויקט

הכנות

בצד ה-Active Directory

שרת Active Directory הוא בעצם שרת LDAP אשר משתמש ב-Kerberos בשביל אמות זיהוי של מחשבים ומשתמשים. אנחנו נשתמש ב-2 הממשקים האלה של Active Directory כדי לספק משתמשים ואימות זיהוי לשרתי לינוקס.
הבעיה מתחילה בעצם עם העובדה שמנגנון זיהוי המשתמשים אינו יכול להשתמש בשרת Active Directory במצבו הנוכחי, מכיוון שהוא אינו מספק את המידע ששרת לינוקס צריך (דברים כמו uid, gid, login shell או home directory). כדי לפתור בעיה זו ישנן 2 אפשרויות:

  • שימוש ב-Services For Unix של Microsoft. זוהי תוכנה אשר מרחיבה את סכמת המידע של Active Directory להכיל מאפיינים כמו uid או login shell. זוהי חבילה הניתנת להורדה חינם מ-Microsoft.
  • בגירסא R2 של Windows 2003 הסכמה הורחבה כדי לתמוך במשתמשי Unix ללא צורך בתוספות.

הערה: לגבי Services For Unix, יש לשים לב כי ביסודו, זהו שרות שאמור להוסיף שרותי NIS ל-Active Directory. מכיוון שאנו הולכים להשתמש ב-LDAP, אין צורך ברוב האפשרויות שהוא מספק. בעת ההתקנה, מספיק לבחור רק “Server for NIS” בכדי להמשיך עם מדריך זה

בצד ה-Linux

מכיוון שאימות המשתמשים יעשה בעזרת Kerberos יש לדאוג כי כתובת השרת אשר יזהה את המשתמשים תהיה Resolvable ע”י DNS או בעזרת /etc/hosts.
מדריך זה נכתב תוך שימוש ב- RHEL4, אבל אמור לעבוד על כל הפצה עם התאמות, ב-RHEL ידרשו ה-RPM-ים (והתלויות שלהם) הבאים לפחות:

  • cyrus-sasl-gssapi
  • krb5-workstation
  • krb5-libs
  • pam_krb5
  • nss_ldap

קינפוג

Active Directory

אחרי שהתקנו את SFU (קיצור ל Service For Unix), ואיתחלנו מחדש את שרת ה-AD, נוכל להתחיל ולצור משתמשי Unix בשרת ה-AD. כדי להפוך משתמש רגיל למשתמש Unix, יש לערוך את המשתמש, ובלשונית של “Unix Attributes” יש לבחור את שם ה-Domain ולוודא כי כל הפרטים נכונים (shell, home dir וכו)

לינוקס

NSS

קינפוג מנגנון זיהוי המשתמשים נעשה ב-2 קבצים עיקריים: nsswitch.conf ו-ldap.conf תחת הספריה /etc. בשלב ראשון, כדי לגרום ל-nss לחפש משתמשים וסיסמאות ב-LDAP לערוך את הקובץ /etc/nsswitch.conf ולהוסיף לשורת חיפוש המשתמשים את המילה LDAP:

passwd:     files
shadow:     files
group:      files

הופך ל-

passwd:     files ldap
shadow:     files ldap
group:      files ldap

מכיוון ש-AD לא מאפשר לכל אחד לגשת ולשלוף ממנו נתונים כמו שמות משתמשים וסיסמאות, השלב הבא יהיה קינפוג משתמש אשר ישמש את מערכת ההפעלה להזדהות מול שרת ה-AD. ישנן 2 שיטות עיקריות:

  • ניתן להשתמש בשם משתמש כללי אשר יאפשר למערכת הפעלה לשלוף משתמשים. הבעיה עם שיטה זו היא ששם המשתמש והסיסמא נמצאים בקובץ שבד”כ יהיה קריא על ידי על משתמש במערכת.
  • יצירת משתמש ב-AD, וקישורו ל-Kerberos Principal אשר ישמש כמשתמש כלל מערכתי להזדהות מערכת ההפעלה מעל Kerberos מול שרת ה-AD. (נשמע קצת מסובך, אני יודע)

בתור התחלה, יש לקנפג את תת-מערכת ה-Kerberos להזדהות מול שרת ה-AD, לשם כך נערוך את הקובץ /etc/krb5.conf ונכניס בו את הפרמטרים הבאים לפחות:

[libdefaults]
 default_realm = EXAMPLE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com:88
  admin_server = kerberos.example.com:749
  default_domain = example.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

למי שאינו מכיר את פרוטוקול ה-Kerberos, מספיק לדעת שהוא עובד בשיטה של מתן “כרטיסי הזדהות” (Tickets) למשתמש אשר מזהה אותו מול השרת. מכיוון שכרטיס זה הוא כרטיס בעל זמן קצוב, נצטרך גם לצור cronjob אשר יחדש אותו בכל כמה שעות. כדי לייצא את המשתמש כ-Kerberos Principal, מצטרך קודם כל להוסיף את הסקריפט הבא לשרת ה-AD:

@echo off

:: %1 is the username
:: %2 is the realm

REM change the '*' character to the real password in case you want to loop this.
REM else you will be prompted for the password.

ktpass -princ nssldap/%1@%2 -mapuser %1@%2 -pass * -out %1.keytab

סקריפט זה יבצע עבורנו את הייצוא והקישור של המשתמש ל-Kerberos Principal. את הסקריפט יש להריץ אחרי שיצרנו משתמש, לדוגמא” krb_server1” באופן הבא:

krbmap.bat krb_server1 EXAMPLE.COM

פעולה זו תייצר לנו קובץ שנקרא krb_server1.keytab. את קובץ זה יש להעביר ולשמור כ /etc/krb5.keytab בשרת server1. אותו מפתח הוא בעצם ה”זהות” של השרת server1 בעת התחברות לשרתי ה-AD. כדי לוודא כי המפתח תקין, נשתמש בכלי ktutil כדי לקרוא ולהדפיס אותו:

# ktutil
ktutil:  rkt krb_server1.keytab
ktutil:  list
slot KVNO Principal
---- ---- ---------------------------------------
   1    3 nssldap/krb_server1@EXAMPLE.COM
ktutil:  q

מוקדם יותר בפרק זה, ציינתי כי נצטרך לכתוב Cron job אשר יחדש את המפתח שמעניק שרת ה-AD לשרת שלנו, מכיון שמפתח זה הוא זמני. השרת משתמש ב keytab אשר מזהה אותו בכדי לבקש מפתח אשר יזהה אותו משרת ה-AD. לפני הוספת ה-Cron job, נכתוב סקריפט קצר אשר יבצע את עבודה החידוש עבורנו. את סקריפט זה נצטרך גם להוסיף לתהליך עליית המערכת, כדי שהמפתח יווצר לפני שהמשתמש הראשון מנסה להתחבר למערכת, ולפני שה-Cron job (שיתוזמן בכל 8 שעות) ירוץ:

/usr/kerberos/bin/kinit -k nssldap/krbcron_$HOSTNAME -c /tmp/krb5cc_0

כדי להריץ את הסקריפט בכל 8 שעות, נוסיף את השורה הבאה ל-contab של-root:

* */8 * * /usr/sbin/krb5cron

= הקובץ ldap.conf = שלב אחרון של קינפוג מערכת זיהוי המשתמשים, נצטרך להגיד לתת מערכת ה-NSS מהיכן לשלוף את המשתמשים מעל LDAP, וכיצד למפות את המידע המתקבל למידע שמייצג משתמשים בלינוקס.
במערכות Red Hat הקובץ הוא /etc/ldap.conf, אשר מכיל את אפשרויות התצורה גם ל-NSS וגם ל-PAM (למרות שבמקרה זה, PAM לא ישתמש ב-LDAP, אלא ב-Kerberos). הערכים הבסיסיים שאותץתם יש להכניס הם שם השרת שאליו נתחבר והבסיס לחיפוש המשתמשים:

URI     ldap://10.0.0.1
BASE    dc=example,dc=com

בעיות

חלק זה יכיל בעיות ושאלות נפוצות שקשורות לנושא המדריך. הוא ערוך בפורמט של שו”ת (FAQ).

  • שאלה מספר 1
    • תשובה מספר 1
  • שאלה מספר 2
    • תשובה מספר 2

מידע נוסף

מדריך זה מבוסס על המדריך בקישור הבא ועבר התאמה ל-Red Hat.

מדריכים/הזדהות_בלינוקס_מול_active_directory.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0