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

המיתוס: התוסף הוא הנתיב הנתמך

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

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

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

מה התוסף קשר יחד

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

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

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

במה וו הסקריפט באמת בוטח

הוו מוגדר עם auth-user-pass-verify ומנגנון מסירה: משתני סביבה או קובץ זמני. בצורת הסביבה OpenVPN דורש script-security 3, הרמה המתועדת שמתירה חשיפת סיסמה לסקריפטים. הרמה הזו היא החלשה מכוונת של ברירת המחדל, ויש להתייחס אליה כאל הרשאה עם הצדקה מצורפת.

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

ls -l /usr/local/sbin/radius-auth.sh
stat -c '%U %a' /usr/local/sbin/radius-auth.sh

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

קודי יציאה קובעים אם תיכשל בפתוח

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

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

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

מה אתה מוותר עליו כשהתעודה נעלמת

פריסות רבות בצורה הזו מכבות לגמרי בדיקת תעודת לקוח, ומשאירות שם משתמש וסיסמה ככל תביעת הלקוח. מה שנעלם עם ההגדרה הזו הוא זהות מבוססת תעודה. הערוץ נשאר מוצפן, אבל הדבר היחיד שמשם את הלקוח הוא פסק הדין של RADIUS. כל דבר במורד הזרם שהתבסס קודם על נושא התעודה חייב כעת להתבסס על שם המשתמש.

השאר את הגנת ערוץ הבקרה במקומה כדי שעמית לא מאומת לא יוכל לבדוק או להציף את לחיצת היד, והשתמש ב-username-as-common-name כשהתצורה לכל משתמש תלויה בשם המשותף. שערים מנוהלים פותרים זאת לעתים קרובות אחרת, ומסיימים אימות תעודה בשער שמדבר EAP-TLS עם RADIUS, ובמקרה כזה אף אחת מהוראות השרת האלה לא חלה. העתק את המודל שהפלטפורמה שלך מתעדת, לא את זה של מוצר שכן. ההוראות החשובות שונות מספיק עד שערבובן יוצר תצורה שמנותחת ואז לא מאמתת אף אחד.

מאמרים קשורים