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

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

שלושה דגלי סוד, שלושה התנהגויות

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

FlagWhere it livesWorks unattended
0 savedConnection profileYes, if the store is readable
1 agent-ownedSecret agent or keyringOnly if that agent is available
2 not-savedNowhereNo

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

החליטו לפי מתי החיבור מתחיל

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

זו כל ההחלטה. כל השאר הוא וריאציה שלה.

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

מה מחזיק המפתחות נותן ומה לא

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

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

אבחון בלי לשפוך סודות

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

הימנעו מ --show-secrets בקריאות ובצ'אט. ברגע שהוא מודבק, זהו אישור גישה בתמלול.

אחסון אינו ביטול

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

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

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