בדף הזה יש טיפים לשימוש בכלי שורת הפקודה sudo, לניהול הפלאגין sudoers ולמניעה או לפתרון של בעיות שמתעוררות.
סיבות לבעיות
במהלך כל הרצה של הפקודה sudo, מתבצע התהליך הבא כדי לאמת את הקבצים sudoers:
- התחביר נבדק כדי לוודא שהוא נכון.
- התוכן נותח כדי להחריג חלק מהשגיאות הלוגיות.
- המערכת בודקת את הבעלות וההרשאות.
האימות של קובצי sudoers עלול להיכשל בגלל אחת מהשגיאות הבאות:
שגיאות תחביר
כשמבצעים שינויים בקבצים sudoers
צריך לפעול לפי כללי תחביר ספציפיים. כל חריגה מהתחביר הזה, כולל, בין היתר, תו חסר או מיותר או פסיק לא מתאים, עלולה להפוך את הקובץ ללא תקין. אם הקובץ לא תקין, אי אפשר להשתמש בכלי sudo.
הפתרון
הפתרון הוא להשתמש בכלי visudo כדי לערוך את הקבצים sudoers. הוא בודק את התוכן של הקובץ לפני השמירה ושולח התראה אם יש בעיות. הכלי visudo נוצר כדי לערוך את הקובץ בצורה בטוחה.
בדוגמאות הבאות אפשר לראות דוגמאות לתחביר נכון ולא נכון:
תחביר תקין
user ALL=(ALL) ALL
תחביר שגוי
user ALL=(ALL), ALL
דוגמה לשגיאת תחביר
$ sudo useradd username
/etc/sudoers:20:17: syntax error
user ALL=(ALL), ALL
^
שגיאות לוגיות
שגיאות מהסוג הזה יכולות להיגרם מאחת מהסיבות הבאות:
- אי-הבנה של העקרונות של התוסף
sudoers. - סטיות מהתחביר הנכון.
עם זאת, שגיאות לוגיות לא מזוהות במהלך האימות, כי הן לא מפרות את כללי התחביר ולכן קשה לזהות אותן.
הפתרון
כשעורכים את הקובץ, חשוב לקרוא בעיון את המסמכים הרשמיים ולפעול בהתאם לעקרונות שמופיעים בהם.
Google ממליצה גם להשתמש בכלי visudo כדי לערוך את הקבצים sudoers, כי הוא יכול לזהות סוגים מסוימים של שגיאות לוגיות, כמו:
- כינויים לא מוגדרים או לא בשימוש
- הפניות מעגליות
- כפילויות של רשומות
אם מזוהות בעיות, מוצגת הודעת אזהרה.
בדוגמאות הבאות מוצגות דוגמאות נכונות ולא נכונות מבחינה לוגית:
נכון מבחינה לוגית
barbara ALL=(ALL:ALL) /usr/bin/ls
שגיאה לוגית
barbara ALL=(4LL:ALL) /usr/bin/ls
^
barbara ALL=(ALL;ALL) /usr/bin/ls
^
bar6ara ALL=(ALL:ALL) /usr/bin/1s
^ ^
הרשאות לא מתאימות
בנוסף לשגיאות שנובעות מהתוכן של קובצי sudoers, הרשאות קובץ מוגזמות או בעלות שגויה יכולות גם לגרום לכשל בכלי sudo.
הפתרון
תיאור של השגיאות האלה מופיע בפלט של הפקודה sudo
שנכשלה. קוראים את התיאור של הודעת השגיאה ומבצעים את התיקונים הנדרשים.
דוגמה להרשאות קובץ ולבעלות נכונות
$ ls -l /etc/sudoers
-r--r----- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
בדוגמה הבאה מוצגת השגיאה שמופיעה כשיש הרשאות מיותרות לקבוצת ההרשאות כל המשתמשים:
$ ls -l /etc/sudoers
-r--r---w- 1 root root 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit
בדוגמה הבאה מוצגת השגיאה שמופיעה כשמציינים בעלות שגויה. בדוגמה הזו, משתמש עם מזהה שאינו 0 (או משתמש שאינו root) הוא הבעלים של הקובץ:
$ ls -l /etc/sudoers
-r--r----- 1 user user 700 Jan 1 12:00 /etc/sudoers
$ sudo useradd username
sudo: /etc/sudoers is owned by uid 1000, should be 0
sudo: no valid sudoers sources found, quitting
sudo: error initializing audit plugin sudoers_audit
מידע נוסף על ההגדרה של קובצי sudoers זמין במאמר Sudoers Manual.
כדי ללמוד איך לנהל את העורך visudo ולהשתמש בו, אפשר לקרוא את המדריך ל-Visudo.
השלכות של בעיות
בעיות בקובצי sudoers גורמות להשפעות שליליות ויכולות להשפיע על הפונקציונליות של המערכת כולה.
הפקודה
sudoלא פועלת יותר.זו התוצאה הכי בולטת של בעיות בקובצי
sudoers. התוצאה היא שאי אפשר להשתמש בהרשאות מורחבות עבור משתמשים, מה שחוסם את הפעילות שלהם בשרת.עם זאת, השלכות הרסניות ובלתי צפויות יותר הן כשלים באפליקציות שמסתמכות על הפקודה
sudo. במקרים מסוימים, זה עלול לגרום לכשל מוחלט באפליקציה, ולכן להתנהגות לא צפויה, לקריסות או לאובדן נתונים. דוגמה נוספת היא כשפקודתsudoמופעלת על ידי אפליקציה במהלך רצף האתחול של מערכת ההפעלה ונכשלת. היא עלולה לגרום לכשל במערכת ההפעלה או לגרום לרצף האתחול להיתקע.יכול להיות שהייתה גישה לא מורשית למערכת.
תוצאה מסוכנת נוספת היא שבעיות בקובצי
sudoersעלולות להוביל לגישה לא מורשית למערכת. זה יכול לקרות בגלל שגיאה לוגית, כשכללים בקובציsudoersנותנים למשתמשים או לקבוצות מסוימים הרשאות מוגזמות.זה יכול לקרות גם כי בעל המערכת משבית זמנית את אמצעי ההגנה של המערכת או מחליש אותם כדי להיכנס למערכת ולתקן את הבעיה.
שחזור במקרה של בעיות
אם איבדתם הרשאות משתמש מתקדמות או שאתם לא יכולים להשתמש בפקודה sudo בגלל בעיות בקובצי sudoers, אתם יכולים להשתמש בחשבון סופר-משתמש לשחזור.
במערכות הפעלה דמויות Unix, משתמש העל הוא חשבון משתמש מיוחד עם מזהה
ששווה ל-0, שבדרך כלל נקרא root. למשתמש העל יש גישה מלאה למשאבי המערכת, והוא יכול לבצע כל משימה אדמיניסטרטיבית ללא הגבלות.
בדרך כלל, אינטראקציה עם מערכת ההפעלה בשם משתמש העל נחשבת לא בטוחה, אבל יכול להיות שזו האפשרות היחידה למשימות מסוימות, כמו שחזור של קבצי sudoers.
התחברות ישירה כמשתמש על חושפת את מערכת ההפעלה לסיכון. כדי להימנע מהסיכון הזה, Google ממליצה להשתמש בפונקציונליות של סקריפט לטעינה בזמן ההפעלה, כי הסקריפט הזה מופעל בשם משתמש-העל.
מידע נוסף על סקריפטים להפעלה ב-Compute Engine
כדי לשחזר את הקבצים sudoers באמצעות סקריפט לטעינה בזמן ההפעלה:
אם סקריפט לטעינה בזמן ההפעלה הנוכחי כבר נמצא בשימוש, יוצרים עותק גיבוי שלו. הגישה לגיבוי תלויה באופן שבו מוגדר סקריפט לטעינה בזמן ההפעלה.
startup-script
אם תוכן הסקריפט מוגדר ישירות בערך המטא-נתונים, אפשר להעתיק את תוכן הסקריפט אל הקטגוריה של Cloud Storage, אל קובץ מקומי או אל כל אחסון פרטי זמני אחר.
startup-script-url
אם התוכן של הסקריפט כבר נמצא באחסון המרוחק ונעשה שימוש בכתובת ה-URL שלו, אפשר פשוט להסיר באופן זמני את מפתח המטא-נתונים
startup-script-urlכדי להשבית את סקריפט ההפעלה הנוכחי.מעדכנים את הסקריפט לטעינה בזמן ההפעלה באמצעות רצף הפקודות הבא:
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoersמידע נוסף על הפעולות שהפקודות מבצעות
-
mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") -
הפקודה הזו יוצרת עותק של הקובץ
/etc/sudoersעם שם אחר, ומוחקת את הקובץ המקורי. השם של הקובץ החדש כולל חותמת זמן בסוף כדי להבטיח ייחודיות (לדוגמה,sudoers.backup.1672527600). -
echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers -
הפקודה הזו יוצרת את הקובץ
/etc/sudoersשנמחק קודם עם כלל יחיד שמאפשר למשתמשים מורשים עם גישה למכונה הווירטואלית להפעיל פקודות בשם כל משתמש במערכת. Google Cloud הכלל הזה תמיד קיים כברירת מחדל בקובץ נוסף/etc/sudoers.d/google_sudoers. -
chown 0:0 /etc/sudoers -
הפקודה הזו מגדירה את הבעלים של הקובץ
/etc/sudoersכמשתמש עם המזהה0, ואת קבוצת הבעלים כקבוצה עם המזהה0. -
chmod 0440 /etc/sudoers -
הפקודה הזו מגדירה את ההרשאות לקובץ
/etc/sudoersלקריאה בלבד, ומאפשרת רק לבעלים ולקבוצת הבעלים לקרוא את הקובץ.
-
מפסיקים את המכונה הווירטואלית אם היא פועלת. מפעילים מחדש את ה-VM כדי להפעיל את הביצוע של סקריפט לטעינה בזמן ההפעלה.
מתחברים ל-VM ועורכים את הקובץ
sudoersהפגום כדי לשחזר אותו.sudo visudo /etc/sudoers.backup.TIMESTAMPשומרים את השינויים ומחליפים את קובץ
/etc/sudoersהנוכחי בקובץ שערכתם.sudo mv /etc/sudoers.backup.TIMESTAMP /etc/sudoersמוודאים שהבעיה המקורית בשימוש בפקודה
sudoובהרשאות גבוהות נפתרה.מסירים את הסקריפט הזמני להפעלה ומחזירים את הסקריפט המקורי אם נעשה בו שימוש.
המאמר הבא
- איך משחזרים מכונה וירטואלית שלא ניתן לגשת אליה או שהיא פגומה
- איך מוסיפים דיסק קיים למכונה וירטואלית אחרת