כפתור ה-VPN צריך sudo: צמצמו את הכלל, אמתו את המדיניות
כפתור על שולחן העבודה אינו סיבה ל-root בלי סיסמה. בדקו אם מנהל הרשת יכול לעשות זאת בעצמו, צמצמו פקודה אחת, ואז אמתו את כל מדיניות ה-sudo.
כפתור ה-VPN עובד למנהל ונכשל אצל כל השאר, אז מישהו מוסיף שורה ל-sudoers. השורה הזו בדרך כלל מאריכה ימים יותר מהבעיה שהיא נועדה לפתור, ולעיתים קרובות היא מעניקה יותר ממה שהכפתור צריך. לפני שתערכו את המדיניות, בדקו אם הבעלים הנתמך של החיבור כבר יכול לבצע את העבודה. שלושת התנאים שלמטה קובעים אם sudo בכלל מעורב.
תנאי 1: הבעלים הנתמך יכול לעשות זאת בלי sudo
ברוב שולחנות העבודה של Linux מנהל הרשת כבר מחזיק בחיבורי VPN, וההרשאה שלו עוברת דרך polkit ולא דרך sudo. משתמש שמורשה להעלות חיבור יכול לעשות זאת משורת הפקודה בלי שום כלל root. בדקו מה המנהל מתיר לפני שאתם מניחים שהכפתור צריך הרשאה. אם התשובה היא כן, השינוי ב-sudoers פותר בעיה שלא קיימת.
nmcli connection show
nmcli connection up "Work VPN"
אם המנהל מסרב, קראו למה: כלל polkit חסר, חיבור בבעלות משתמש אחר או פרופיל שנשמר במקום שהמשתמש אינו יכול לקרוא אותו. לכל אחד מאלה יש תיקון נתמך וצר יותר מכלל sudo. העלאת הרשאות היא המוצא האחרון, לא הראשון.
תנאי 2: הכלל מציין קובץ הרצה אחד ואת הארגומנטים שלו
אם sudo באמת נדרש, הכלל צריך לציין את הפקודה המדויקת ואם אפשר את הארגומנטים שמותר לה להשתמש בהם. כלל שמאפשר למשתמש להריץ סקריפט עטיפה בטוח רק כמו ההרשאות של אותו סקריפט, כי המשתמש יכול לערוך את מה ש-root יבצע. כלל עם תו כללי אחרי הפקודה הוא אותה בעיה בצורה קצרה.
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
בדקו כל נתיב בשרשרת הפקודה: הקובץ הבינארי, הסקריפט שהוא קורא לו, קובץ התצורה שהוא קורא וכל תיקייה שביניהם. אם המשתמש יכול לכתוב לאחד מהם, הכלל המצומצם הוא למעשה root ללא הגבלה. גם הארגומנטים חשובים, כי פקודה שמקבלת נתיב תצורה יכולה להיות מכוונת לקובץ שהמשתמש שולט בו. כתבו את הכלל לפעולה, לא לכפתור.
עצרו אם הפקודה זקוקה לקובץ בשליטת המשתמש כדי לעבוד. אז העיצוב שגוי, ואף תחביר sudoers לא יהפוך אותו לבטוח.
תנאי 3: כל המדיניות מנותחת, לא רק השורה שלכם
אמתו עם העורך שנועל את הקובץ ובודק תחביר, ואמתו את המדיניות המורכבת ולא קטע. קובץ שמנותח בעצמו עדיין יכול לשבור את סדר ההכללה או לשכפל כלל באופן שמשנה התנהגות.המדריך של visudo מתעד גם את העורך הנועל וגם את מצב הבדיקה בלבד שמשמש כאן.
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
הבדיקה מדווחת על הקובץ והשורה כשהיא נכשלת, והדוח הזה הוא החלק השימושי. תקנו את השינוי המיועד דרך העורך במקום לשמור בכוח שגיאה ידועה, כי מדיניות שבורה יכולה לנעול את כל המנהלים בבת אחת. קבצים בתיקיית ההכללה צריכים גם את הבעלות והמצב שהמדריך דורש, אחרת הם ייתעלמו או יידחו. תחביר הוא רק השער הראשון: אחרי שהוא עובר, קראו את הכלל שוב ושאלו מה הוא באמת מתיר.
עצרו אם הדרך היחידה לגרום לשינוי לעבוד היא לכבות את בדיקת התחביר. זו אינה מדיניות, זו תקלה שמחכה לאתחול.
שחזור: שמרו על הפעלה שעדיין עובדת
לפני השמירה, ודאו שהפעלה ניהולית מורשית כבר פתוחה ושיש נתיב שני אל המכונה. טעות ב-sudoers יכולה לקחת מכם את היכולת לתקן אותה, וכפתור בשולחן העבודה אינו שווה את הסיכון הזה. אם sudo כבר שבור, השתמשו בנתיב השחזור המתועד של המערכת במקום לאלתר אחד.
sudo -n true
id
חלופות כמו pkexec תלויות בהתקנה ובמדיניות שלהן, ולכן אינן בקשת root שנייה מובטחת. החזיקו את ההרשאה המקומית בנפרד גם מאספקת סוד ה-VPN: כלל sudo לא יכול לפתוח סוכן סודות נעדר, והוא לא עומד ב-MFA של השער. אחרי התיקון, בדקו את החשבון הרגיל כשהוא מבצע רק את הפעולה המיועדת, ואז השתמשו בבקרות הרגילות של המנהל.
ההחלטה מסתיימת כשאתם יכולים לומר איזה תנאי הצדיק את sudo, מה הכלל מציין, שכל המדיניות מנותחת, ואיך הייתם משחזרים אם לא. משגר מורשה שעולה לכם בגישה הניהולית הוא עסקה גרועה, ובדרך כלל אפשר להימנע ממנה.