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

למה זה שייך להפעלת המשתמש

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

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

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

להוכיח קודם ביד שהשיתוף עובד

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

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

smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs

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

לקרוא את מצב הפרופיל מ-Tunnelblick

Tunnelblick חושף את התצורות שלו ואת המצבים שלהן דרך AppleScript, וזה ה-hook היחיד שהתכנון הזה צריך. המצב שחשוב הוא המחרוזת שמדווחת עבור אותו פרופיל, לא נוכחות היישום.

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

property attempted : false

on idle
    set profileName to "Office"
    set shareURL to "smb://files.corp.example/OfficeTeam"
    set volName to "OfficeTeam"
    tell application "Tunnelblick" to set vpnState to state of first configuration whose name is profileName
    if vpnState is not "CONNECTED" then
        set attempted to false
        return 20
    end if
    tell application "Finder" to set mounted to (exists disk volName)
    if (not mounted) and (not attempted) then
        set attempted to true
        try
            mount volume shareURL
        end try
    end if
    return 20
end idle

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

להרכיב פעם אחת, ואז להפסיק לנסות

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

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

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

מה העוזר לא יכול לעשות

שלושה גבולות ראויים להיכתב לצד ה-applet. הוא לא יכול להוציא כרך תפוס לאחר כשל רשת, הוא לא יכול להבטיח ש-DNS והשרת מוכנים כשהמצב אומר מחובר, והוא לא מגיב לכל התחברות מחדש.

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

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

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