היסטוריית גירסאות | ||
---|---|---|
גירסה 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 לכל השיטות המוגדרות כדי לפענח ולוודא כי אכן המשתמש קיים.
שיטות זיהוי המשתמשים העיקריות הן:
אימות זהותו של המשתמש ע”י סיסמא\טביעת אצבע\וכו' הוא תהליך שמנוהל ע”י מנגנון הנקרא PAM, או Pluggable Authentication Modules. זהו מנגנון רב שיכבתי שדואג לא רק לאימות המשתמש (Authentication) אלא גם לאישורו (Account): האם מותר לו להתחבר למערכת בכלל? האם מותר לו להתחבר מהמקור הנוכחי? האם הוא צריך להחליף סיסמא? ועוד. בנוסף, מנגנון זה מספק שרותים של החלפת סיסמאות (Password) והקמת השיחה (Session), תהליחך הכולל דברים כמו נתינת הרשאות למשתמשים מקומיים על משאבים מקומיים (גישה לכרטיס הקול או כונן ה-CD).
כמו שבודאי הבנתם, PAM הוא לא המנגנון הכי פשוט בעולם, אבל הוא גמיש מאין כמותו, ומהווה בסיס לכל תהליך אימות משתמשים במערכות לינוקס. עוד מידע על pam ניתן לקרוא ב-man או באתר הבית של הפרויקט
שרת Active Directory הוא בעצם שרת LDAP אשר משתמש ב-Kerberos בשביל אמות זיהוי של מחשבים ומשתמשים. אנחנו נשתמש ב-2 הממשקים האלה של Active Directory כדי לספק משתמשים ואימות זיהוי לשרתי לינוקס.
הבעיה מתחילה בעצם עם העובדה שמנגנון זיהוי המשתמשים אינו יכול להשתמש בשרת Active Directory במצבו הנוכחי, מכיוון שהוא אינו מספק את המידע ששרת לינוקס צריך (דברים כמו uid, gid, login shell או home directory). כדי לפתור בעיה זו ישנן 2 אפשרויות:
הערה: לגבי Services For Unix, יש לשים לב כי ביסודו, זהו שרות שאמור להוסיף שרותי NIS ל-Active Directory. מכיוון שאנו הולכים להשתמש ב-LDAP, אין צורך ברוב האפשרויות שהוא מספק. בעת ההתקנה, מספיק לבחור רק “Server for NIS” בכדי להמשיך עם מדריך זה
מכיוון שאימות המשתמשים יעשה בעזרת Kerberos יש לדאוג כי כתובת השרת אשר יזהה את המשתמשים תהיה Resolvable ע”י DNS או בעזרת /etc/hosts.
מדריך זה נכתב תוך שימוש ב- RHEL4, אבל אמור לעבוד על כל הפצה עם התאמות, ב-RHEL ידרשו ה-RPM-ים (והתלויות שלהם) הבאים לפחות:
אחרי שהתקנו את SFU (קיצור ל Service For Unix), ואיתחלנו מחדש את שרת ה-AD, נוכל להתחיל ולצור משתמשי Unix בשרת ה-AD. כדי להפוך משתמש רגיל למשתמש Unix, יש לערוך את המשתמש, ובלשונית של “Unix Attributes” יש לבחור את שם ה-Domain ולוודא כי כל הפרטים נכונים (shell, home dir וכו)
קינפוג מנגנון זיהוי המשתמשים נעשה ב-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 שיטות עיקריות:
בתור התחלה, יש לקנפג את תת-מערכת ה-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).
מדריך זה מבוסס על המדריך בקישור הבא ועבר התאמה ל-Red Hat.