10 הגדרות Sudoers שימושיות להגדרת 'sudo' ב-Linux

במערכות ההפעלה של Linux ושל מערכות דומות ל־Unix, רק המשתמש root יכול להריץ את כל הפקודות ולבצע פעולות קריטיות מסוימות במערכת כגון התקנה ועדכון, הסרת חבילות, יצירת משתמשים וקבוצות, שינוי קבצי התצורה המערכתיים החשובים ועוד.

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

בנוסף, מנהל המערכת יכול לשתף את סיסמת המשתמש root (שאינו שיטה מומלצת) כך שמשתמשים רגילים במערכת יקבלו גישה לחשבון המשתמש root באמצעות פקודת su.

sudo מאפשר למשתמש שזכאי לכך לבצע פקודה כמשתמש root (או משתמש אחר), כפי שצוין במדיניות האבטחה:

  1. הוא קורא ומפענח את /etc/sudoers, מחפש את המשתמש הקורא ואת ההרשאות שלו,
  2. אז הוא מבקש מהמשתמש הקורא להזין סיסמה (רגילה זו של המשתמש, אך יכולה להיות גם סיסמת המשתמש היעד. או שניתן לדלג על כך עם התווית NOPASSWD),
  3. לאחר מכן, sudo יוצר תהליך ילד שבו הוא קורא ל־setuid() כדי להחליף למשתמש היעד
  4. לאחר מכן, הוא מפעיל מפעיל של או את הפקודה שניתנה כארגומנטים בתהליך הילד שלמעלה.

להלן עשר תצורות של קובץ /etc/sudoers לשינוי ההתנהגות של פקודת sudo באמצעות רשומות Defaults.

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# 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, יש לו שני חשיבויות:

  1. משמש כאשר מנהל המערכת לא סומך על משתמשי sudo לגבי סביבת המשתנים PATH המאובטחת
  2. להפריד בין "נתיב שורש" ו"נתיב משתמש", רק משתמשים שהוגדרו על ידי 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:

Create Custom Sudo Log File

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
Log sudo Input Output

ניתן להציג את שאר הקבצים באותה תיקייה באמצעות פקודת cat.

6. הרצאה למשתמשי Sudo

כדי להרצות למשתמשי sudo על שימוש בסיסמה במערכת, יש להשתמש בפרמטר lecture כך:

יש לו 3 ערכים אפשריים:

  1. always – להרצות למשתמש באופן תמיד.
  2. פעם – להרצות למשתמש רק בפעם הראשונה שהוא מבצע פקודת sudo (משמש כאשר לא צוין ערך)
  3. אף פעם – לא להרצות למשתמש אף פעם.
 
Defaults  lecture="always"

בנוסף, ניתן להגדיר קובץ הרצאה מותאם אישית עם הפרמטר lecture_file, יש להקליד את ההודעה המתאימה בקובץ:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. הצג הודעה מותאמת כאשר אתה מזין סיסמת sudo שגויה

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

Defaults  badpass_message="Password is wrong, please try again"

8. הגבלת מספר ניסיונות להזנת סיסמת sudo

הפרמטר passwd_tries משמש לציון מספר הפעמים שמשתמש יכול לנסות להזין סיסמה.

הערך ברירת המחדל הוא 3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

כדי להגדיר זמן קצרות לסיסמה (ברירת המחדל הוא 5 דקות) באמצעות הפרמטר passwd_timeout, יש להוסיף את השורה הבאה:

Defaults   passwd_timeout=2

9. הרשה ל-sudo להעליב אותך כאשר אתה מזין סיסמה שגויה

במקרה שמשתמש מזין סיסמה שגויה, sudo יציג קללות בטרמינל עם הפרמטר לקללות. זה יכבה באופן אוטומטי את הפרמטר badpass_message.

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

קרא עוד: הרשה ל-sudo להעליב אותך כאשר אתה מזין סיסמה שגויה

10. למד עוד על הגדרות sudo

אתה יכול ללמוד עוד תצורות של פקודת sudo על ידי קריאת: ההבדל בין su ו- sudo ואיך להגדיר sudo ב-Linux.

זהו! אתה יכול לשתף תצורות אחרות של פקודת sudo או טריקים וטיפים נוספים עם משתמשי Linux באמצעות תיבת התגובות למטה.

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/