סודות לא חוקיים הם בעיית מיכל, לא כלל סיסמה
ייתכן שפרטי ההתחברות שנדחו מעולם לא הגיעו לשער. השוו תחילה את מיכל הקלט, את שלב האימות ואת החשבון עצמו.
הודעת סודות לא חוקיים מולידה בדרך כלל מסקנה אחת: ה-VPN לא אוהב סימני פיסוק. המסקנה הזו בדרך כלל שגויה, כי ההודעה מגיעה לרוב מעיבוד מקומי לפני ששער כלשהו הסתכל על החשבון. שני עיצובים מוסרים את אותה סיסמה, שדה גרפי וקובץ פרטי התחברות, והם נכשלים במקומות שונים. השוו את המיכלים לפני שאתם מפשטים סיסמה שהייתה תקינה לאורך כל הדרך.
השגיאה מגיעה לפני השער
אימות מקומי, מאגר סודות נעול, סוכן חסר וקובץ פרטי התחברות פגום כולם מייצרים כשלים שהמשתמש חווה כדחייה אחת. אף אחד מהם אינו כולל את שרת האימות. הדחייה של השער עצמו היא אירוע נפרד, והיא מגיעה בדרך כלל עם הודעה אחרת ותזמון אחר. היא מתרחשת אחרי שהמנהרה קיימת ופרטי ההתחברות נשלחו.
לכן השאלה הראשונה אינה אילו תווים חוקיים אלא היכן נעצר הניסיון. לקוח שמעולם לא פתח חיבור לא נדחה על ידי איש. רשמו את השלב שראיתם, כי כל צעד בהמשך תלוי בסיווג הזה.
ההבחנה משנה גם מי מתקן. בעיית מיכל שייכת להתקן ולבעליו, ואילו דחיית חשבון שייכת למי שמפעיל את מערך האימות.
השוו את המיכלים, לא את התווים
שדה סיסמה גרפי, רשומה בצרור מפתחות, קובץ פרטי התחברות בשתי שורות וסוד של אוטומציה נושאים כל אחד את אותו ערך במעטפה אחרת. למעטפה יש כללים משלה, והכללים האלה הם שבדרך כלל נשברים. הערך עצמו נדיר שהוא הבעיה; העברת הערך היא הבעיה. הפרידו בין שני הרעיונות והאבחון יתקצר.
| Where the value stops | What you see | What you check | Who owns the fix |
|---|---|---|---|
| GUI field or managed profile | A validation message before any connection opens | The selected authentication mode and whether the field holds the secret or the username | The device owner or the profile author |
| Keychain or secret agent | A prompt that keeps reappearing, or an agent error | Whether the agent is unlocked and holds an entry for this profile | The user who owns the keychain |
| Two-line credential file | A prompt for a password that was already supplied | Line count, line order and whether a trailing newline is present | Whoever generated the file |
| Shell argument or environment | Works interactively but fails in automation | Whether the shell expanded, trimmed or logged the value | Whoever wrote the automation |
אפשרויות הלקוח של OpenVPN 2.6 בקהילה מתארות את הקובץ בשתי השורות עבור auth-user-pass, כולל ההתנהגות כששורת הסיסמה חסרה: הלקוח ישאל במקומה. הפרט הבודד הזה מסביר סוג שלם של דיווחים בסגנון הוא מבקש סיסמה שכבר מסרתי. הוא גם אומר לכם ששורה שנייה ריקה היא מצב בעל משמעות ולא בחירת עיצוב תמימה.
מרכאות הן שוב שכבה נפרדת: מרכאות בתוך קובץ פרטי התחברות רגיל נשמרות כנתונים, בעוד שמעטפת הפקודה מסירה אותן לפני שהתוכנית רואה משהו. אותו תו תמים במקום אחד ומבני במקום אחר. טבלה לא יכולה לומר לכם באיזה מיכל הלקוח שלכם השתמש, ולכן קראו את התצורה של הלקוח עצמו לפני שאתם בוחרים שורה.
גם שבירות שורה הן מבניות. קובץ עם שדות מופרדים בשורות אינו יכול לשאת ערך שמכיל שבירת שורה, וזו מגבלה של התבנית ולא פסק דין על חוזק הסיסמה. השתמשו במנגנון המסירה שהפריסה תומכת בו, במקום לקצר את הסוד כדי שיתאים לקובץ מאולתר.
בנו את קובץ פרטי ההתחברות בלי נזק מהמעטפת
המסלול המקומי הבטוח ביותר מרחיק את הסוד מהיסטוריית המעטפת ומהודעת הארגומנטים של התהליך. קראו את שני השדות באופן אינטראקטיבי, ואז כתבו את שתי השורות שהלקוח מצפה להן. כל השאר יכול להישאר בקובץ תצורה שקל לסקור.
read -r VPN_USER
read -rs VPN_PASS
printf '%s\n%s\n' "$VPN_USER" "$VPN_PASS" > /etc/openvpn/client/creds
chmod 600 /etc/openvpn/client/creds
openvpn --config /etc/openvpn/client/office.conf --auth-user-pass /etc/openvpn/client/creds
שתי הפקודות הראשונות קוראות את שם המשתמש ואחר כך את הסיסמה בלי להציג אותה, השלישית כותבת את שתי השורות, הרביעית מגבילה את הקובץ, והאחרונה מפעילה את הלקוח עם אותו קובץ. שימו לב ש-read -r משמר קווי נטייה לאחור, וזה בדיוק סוג הפרט שהופך סיסמה שעובדת לכזו שנכשלת כשהוא מושמט.
הימנעו מבניית הקובץ עם משתנה ללא מרכאות או עם מסמך here מלא בהרחבות מעטפת. שניהם יכולים לשנות תווים לפני שהם מגיעים לקובץ, והכשל שנוצר נראה כמו דחייה של ה-VPN כי הסיסמה בדיסק באמת שונה מהסיסמה שאתם מכירים. אם אתם חושדים בכך, השוו את אורך הקובץ בבייטים לערך הצפוי, בלי להדפיס את הסוד עצמו. פער של בייט אחד או שניים הוא הסימן של תקלת מרכאות.
קראו את השלב מהשגיאה הראשונה
שמרו את ההודעה הספציפית הראשונה מניסיון אחד, ואז סווגו אותה. שגיאת אימות מקומי, מפתח פרטי חסר, סוכן סודות לא זמין וכשל אימות בשער הם ארבעה תוצאות שונות עם ארבעה בעלים שונים. רק אחד מהם נוגע בחשבון.
אם השער באמת דוחה פרטי התחברות שנמסרו כראוי, בדקו את החשבון, את מערך האימות ואת כל אתגר נדרש עם מנהל המערכת. כשל אימות כללי אינו נוקב בתו אסור.
השיבו את הערך המאושר דרך המנגנון הנכון, במקום לצמצם אותו לאותיות וספרות. מדיניות הסיסמה שייכת למפעיל, ופתרון עוקף שמנצח אותה בשקט אינו תיקון. הוא גם מסתיר את הפגם האמיתי מהאדם הבא, שיפגוש את אותה שגיאה עם סיסמה חלשה יותר ובלי רעיון טוב יותר.