במערכות ההפעלה של Linux ושל מערכות דומות ל־Unix, רק המשתמש root יכול להריץ את כל הפקודות ולבצע פעולות קריטיות מסוימות במערכת כגון התקנה ועדכון, הסרת חבילות, יצירת משתמשים וקבוצות, שינוי קבצי התצורה המערכתיים החשובים ועוד.
עם זאת, מנהל המערכת שמשמש כמשתמש root יכול לאפשר למשתמשים רגילים אחרים במערכת בעזרת פקודת sudo וכמה הגדרות להריץ כמה פקודות ולבצע מספר פעולות מערכתיות חיוניות כולל אלו שצוינו למעלה.
בנוסף, מנהל המערכת יכול לשתף את סיסמת המשתמש root (שאינו שיטה מומלצת) כך שמשתמשים רגילים במערכת יקבלו גישה לחשבון המשתמש root באמצעות פקודת su.
sudo מאפשר למשתמש שזכאי לכך לבצע פקודה כמשתמש root (או משתמש אחר), כפי שצוין במדיניות האבטחה:
- הוא קורא ומפענח את /etc/sudoers, מחפש את המשתמש הקורא ואת ההרשאות שלו,
- אז הוא מבקש מהמשתמש הקורא להזין סיסמה (רגילה זו של המשתמש, אך יכולה להיות גם סיסמת המשתמש היעד. או שניתן לדלג על כך עם התווית NOPASSWD),
- לאחר מכן, sudo יוצר תהליך ילד שבו הוא קורא ל־setuid() כדי להחליף למשתמש היעד
- לאחר מכן, הוא מפעיל מפעיל של או את הפקודה שניתנה כארגומנטים בתהליך הילד שלמעלה.
להלן עשר תצורות של קובץ /etc/sudoers לשינוי ההתנהגות של פקודת sudo באמצעות רשומות Defaults.
$ sudo cat /etc/sudoers
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults logfile="/var/log/sudo.log" Defaults lecture="always" Defaults badpass_message="Password is wrong, please try again" Defaults passwd_tries=5 Defaults insults Defaults log_input,log_output
סוגי רשומות Defaults
Defaults parameter, parameter_list #affect all users on any host Defaults@Host_List parameter, parameter_list #affects all users on a specific host Defaults:User_List parameter, parameter_list #affects a specific user Defaults!Cmnd_List parameter, parameter_list #affects a specific command Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
לצורך המדריך הזה, נתמקד בסוג הראשון של Defaults בצורות הבאות. פרמטרים עשויים להיות דגלים, ערכים שלמים, מחרוזות או רשימות.
עליך לשים לב שדגלים הם בעצם בוליאניים וניתן לכבות אותם באמצעות אופרטור '!'
, ורשימות מכילות שני אופרטורים נוספים להקצאה, +=
(הוספה לרשימה) ו־-=
(הסרה מהרשימה).
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. הגדרת PATH מאובטח
זהו ה-PATH שמשמש לכל פקודה שמופעלת עם sudo, יש לו שני חשיבויות:
- משמש כאשר מנהל המערכת לא סומך על משתמשי sudo לגבי סביבת המשתנים PATH המאובטחת
- להפריד בין "נתיב שורש" ו"נתיב משתמש", רק משתמשים שהוגדרו על ידי exempt_group אינם מושפעים מהגדרה זו.
כדי להגדיר אותו, הוסף את השורה:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. אפשר פקודת sudo בהתחברות משתמש TTY
כדי לאפשר ל-sudo להתקרא מ-tty אמיתי אך לא דרך שיטות כגון cron או סקריפטים cgi-bin, הוסף את השורה:
Defaults requiretty
3. הפעלת פקודת Sudo באמצעות pty
A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.
כדי למנוע תרחיש כזה, ניתן להגדיר את sudo להריץ פקודות אחרות רק מתוך pty פיקטיבי באמצעות הפרמטר use_pty
, בין אם הלוגינג I/O מופעל או לא כך:
Defaults use_pty
4. צור קובץ לוג של Sudo
ברירת המחדל, sudo מקליט דרך syslog(3). אך, כדי לציין קובץ לוג מותאם אישית, יש להשתמש בפרמטר logfile כך:
Defaults logfile="/var/log/sudo.log"
כדי לרשום את שם המארח ואת השנה בפורמט של ארבע ספרות בקובץ הלוג המותאם אישית, יש להשתמש בפרמטרים log_host ו־log_year בהתאמה כך:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
להלן דוגמה לקובץ לוג מותאם של sudo:

5. רישום קלט/פלט של Sudo
הפרמטרים log_input ו־log_output מאפשרים ל־sudo להריץ פקודה ב־pseudo-tty ולרשום את כל קלט המשתמש וכל הפלט שנשלח למסך בהתאמה.
ספריית הלוג I/O ברירת המחדל היא /var/log/sudo-io, ואם יש מספר רצפי סשן, הוא מאוחסן בתיקייה זו. ניתן לציין ספריית מותאמת באמצעות הפרמטר iolog_dir.
Defaults log_input, log_output
קיימים סדרי בריחה כמו %{seq}
שמרחיבים למספר רצפי בסיס-36 שגובר באופן מונוטוני, כמו 000001, כאשר כל שני ספרות משמשות ליצירת תיקייה חדשה, לדוגמה 00/00/01 כפי שמוצג בדוגמה למטה:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

ניתן להציג את שאר הקבצים באותה תיקייה באמצעות פקודת cat.
6. הרצאה למשתמשי Sudo
כדי להרצות למשתמשי sudo על שימוש בסיסמה במערכת, יש להשתמש בפרמטר lecture כך:
יש לו 3 ערכים אפשריים:
- always – להרצות למשתמש באופן תמיד.
- פעם – להרצות למשתמש רק בפעם הראשונה שהוא מבצע פקודת sudo (משמש כאשר לא צוין ערך)
- אף פעם – לא להרצות למשתמש אף פעם.
Defaults lecture="always"
בנוסף, ניתן להגדיר קובץ הרצאה מותאם אישית עם הפרמטר lecture_file, יש להקליד את ההודעה המתאימה בקובץ:
Defaults lecture_file="/path/to/file"

7. הצג הודעה מותאמת כאשר אתה מזין סיסמת sudo שגויה
כאשר משתמש מזין סיסמה שגויה, הודעה מסוימת מוצגת בשורת הפקודה. ההודעה ברירת המחדל היא "סליחה, נסה שוב", ניתן לשנות את ההודעה באמצעות הפרמטר badpass_message כך:
Defaults badpass_message="Password is wrong, please try again"
8. הגבלת מספר ניסיונות להזנת סיסמת sudo
הפרמטר passwd_tries משמש לציון מספר הפעמים שמשתמש יכול לנסות להזין סיסמה.
הערך ברירת המחדל הוא 3:
Defaults passwd_tries=5

כדי להגדיר זמן קצרות לסיסמה (ברירת המחדל הוא 5 דקות) באמצעות הפרמטר passwd_timeout, יש להוסיף את השורה הבאה:
Defaults passwd_timeout=2
9. הרשה ל-sudo להעליב אותך כאשר אתה מזין סיסמה שגויה
במקרה שמשתמש מזין סיסמה שגויה, sudo יציג קללות בטרמינל עם הפרמטר לקללות. זה יכבה באופן אוטומטי את הפרמטר badpass_message.
Defaults insults

קרא עוד: הרשה ל-sudo להעליב אותך כאשר אתה מזין סיסמה שגויה
10. למד עוד על הגדרות sudo
אתה יכול ללמוד עוד תצורות של פקודת sudo על ידי קריאת: ההבדל בין su ו- sudo ואיך להגדיר sudo ב-Linux.
זהו! אתה יכול לשתף תצורות אחרות של פקודת sudo או טריקים וטיפים נוספים עם משתמשי Linux באמצעות תיבת התגובות למטה.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/