כיצד לערוך את קובץ ה-Sudoers

הקדמה

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

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

במאמר זה, נדון באופן נכון ובטוח להשיג הרשאות root, עם דגש מיוחד על עריכת הקובץ /etc/sudoers.

נשלים את השלבים הללו על שרת Ubuntu 20.04, אך רוב מערכות ההפעלה המודרניות כמו Debian ו־CentOS אמורות לפעול בדרך דומה.

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

הערה: מדריך זה עושה עמיקה בהגדלת הרשאות ובקובץ sudoers. אם אתה רוצה רק להוסיף הרשאות sudo למשתמש, תראה את המדריכים המהירים שלנו איך ליצור משתמש חדש עם sudo עבור Ubuntu ו- CentOS.

איך לקבל הרשאות של ראוט

יש שלושה דרכים בסיסיות לקבלת הרשאות ראוט, שנבדלות ברמת המורכבות שלהם.

כניסה כראוט

הדרך הפשוטה והישירה ביותר לקבלת הרשאות ראוט היא להתחבר ישירות לשרת שלך כמשתמש ראוט.

אם אתה מתחבר למכונה מקומית (או משתמש בשירות ממוקד מחוץ לקו בשרת וירטואלי), הזן ראוט כשם המשתמש שלך בפקודת ההתחברות והזן את הסיסמא ראוט כשמתבקש לעשות זאת.

אם אתה מתחבר דרך SSH, ציין את המשתמש root לפני כתובת ה-IP או שם התחום במחרוזת החיבור SSH שלך:

  1. ssh root@server_domain_or_ip

אם לא קבעת מפתחות SSH עבור המשתמש root, הזן את סיסמת המשתמש root כשמתבקש לעשות זאת.

שימוש בsu כדי להפוך לראט

התחברות ישירות כroot בדרך כלל אינה מומלצת, מכיוון שקל מאוד להתחיל להשתמש במערכת למטרות לא מנהליות, מה שמסוכן.

הדרך הבאה להשיג מעמד מנהל מערכת מאפשרת לך להפוך למשתמש root בכל עת, כפי שאתה זקוק לכך.

אנו יכולים לעשות זאת על ידי קריאת הפקודה su, שמיועדת להחלפת משתמש. כדי להשיג מעמד מנהל מערכת, הקלד:

  1. su

תועבר לך לבקשת סיסמת המשתמש root, ואחריה תיפול לסשן שיחת root.

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

  1. exit

שימוש בsudo כדי לבצע פקודות כראט

הדרך האחרונה להשגת הרשאות שורש שורש שנדון בה היא באמצעות הפקודה sudo.

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

  1. sudo command_to_execute

שלא כמו su, הפקודה sudo תבקש את סיסמת המשתמש הנוכחי, לא סיסמת השורש.

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

בסעיף הבא, נדון בכיצד לשנות את התצורה של sudo בפירוט רב יותר.

מהו Visudo?

הפקודה sudo מוגדרת דרך קובץ הממוקם ב- /etc/sudoers.

אזהרה: אל תערוך את הקובץ הזה עם עורך טקסט רגיל! תמיד השתמש בפקודה visudo במקום!

מכיוון ששימוש לא תקין בתחביר בקובץ /etc/sudoers יכול להשאיר אותך עם מערכת שבורה שבה זה בלתי אפשרי לקבל זכות משוחררת, חשוב להשתמש בפקודה visudo כדי לערוך את הקובץ.

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

באופן מסורתי, visudo פותח את הקובץ /etc/sudoers עם vi עורך הטקסט. אובונטו, לעומת זאת, כבר מוגדר visudo להשתמש בעורך הטקסט nano במקום.

אם אתה רוצה לשנות אותו בחזרה ל vi, יוצא את הפקודה הבאה:

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

בחר את המספר המתאים לבחירה שברצונך לעשות.

ב-CentOS, אתה יכול לשנות ערך זה על ידי הוספת השורה הבאה ל- ~/.bashrc שלך:

  1. export EDITOR=`which name_of_editor`

הפוך את הקובץ כדי ליישם את השינויים:

  1. . ~/.bashrc

לאחר שהגדרת את visudo, הפעל את הפקודה כדי לגשת לקובץ /etc/sudoers:

  1. sudo visudo

איך לשנות את קובץ Sudoers

תתקבל עם הקובץ /etc/sudoers בעורך הטקסט הנבחר שלך.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

בואו נסתכל על מה שהשורות האלה עושות.

שורות ברירת מחדל

השורה הראשונה, Defaults env_reset, מאפסת את הסביבה של המסך כדי להסיר כל משתני משתמש שיכולים להיות קיימים. זו צנזורה בטיחותית המשמשת לניקוי משתנים סביבתיים שיכולים להיות מזיקים מהסשן sudo.

השורה השנייה, Defaults mail_badpass, אומרת למערכת לשלוח הודעות דואר אלקטרוני של ניסיונות שגויים של סיסמאות sudo למשתמש mailto המוגדר. כברירת מחדל, זהו חשבון root.

השורה השלישית, המתחילה ב- Defaults secure_path=..., מציינת את ה- PATH (המיקומים במדיניות הקבצים שהמערכת הפעלה תחפש בהם אפליקציות) שישמש לפעולות sudo. זה מונע משמוש בנתיבים של המשתמש שעשויים להיות מזיקים.

שורות זכות משתמש

השורה הרביעית, המכתיבה את הזכות של משתמש root להשתמש ב- sudo, שונה מהשורות שקדמו לה. בואו נסתכל על המשמעות של השדות השונים:

  • root ALL=(ALL:ALL) ALL
    השדה הראשון מציין את שם המשתמש שהכלל יחול עליו (root).

  • root ALL=(ALL:ALL) ALL
    ה"ALL" הראשון מציין שהכלל חל על כל הערוצים.

  • root ALL=(ALL:ALL) ALL
    ה"ALL" זה מציין שמשתמש root יכול להריץ פקודות ככל המשתמשים.

  • root ALL=(ALL:ALL) ALL
    ה"ALL" זה מציין שמשתמש root יכול להריץ פקודות ככל הקבוצות.

  • root ALL=(ALL:ALL) ALL
    ה"ALL" האחרון מציין שהכללים האלה חלים על כל הפקודות.

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

קווי פריבילגיה של קבוצות

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

שמות המתחילים ב% מציינים שמות קבוצות.

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

שורת הכלולה ב/etc/sudoers.d

שורת הסוף אולי תיראה כמו תגובה במבט ראשון:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

זה עושה מתחיל ב#, שבדרך כלל מציין תגובה. עם זאת, שורה זו בעצם מציינת שקבצים בתיקייה /etc/sudoers.d יופקדו ויישמרו גם כן.

קבצים בתיקייה זו מקיימים את אותם כללים כמו הקובץ /etc/sudoers עצמו. כל קובץ שאינו מסתיים ב~ ושאין בו . ייקרא ויתווסף לתצורה של sudo.

זה בעיקר נועד ליישומים שישנו את הפריטים של sudo בעת התקמתם. הכנסת כל הכללים המשוייכים לקובץ בודד במדריך /etc/sudoers.d יכול להקל על הצפייה בכמה פריטים משוייכים לכמה חשבונות ולהפוך את הזכויות בקלות מבלי לנסות לתפעל את הקובץ /etc/sudoers ישירות.

כמו בקובץ /etc/sudoers עצמו, תמיד עליך לערוך קבצים בתיקייה /etc/sudoers.d עם visudo. התחביר לעריכת הקבצים הללו יהיה:

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

איך לתת למשתמש פריטים של sudo

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

הדרך הקלה ביותר לעשות זאת במערכת המוקצבת למטרה כללית של קבוצת מנהלים, כמו במדריך זה של מערכת Ubuntu, היא למעשה להוסיף את המשתמש בשאלה לקבוצה זו.

לדוגמה, ב-Ubuntu 20.04, קבוצת sudo בעלת פריטים מלאים של מנהל. אנו יכולים לתת למשתמש את אותם פריטים על ידי הוספתם לקבוצה כזו:

  1. sudo usermod -aG sudo username

הפקודה gpasswd יכולה גם לשמש לכך:

  1. sudo gpasswd -a username sudo

כל אלו ישיגו את אותו המטרה.

על CentOS, זה בדרך כלל קבוצת wheel במקום קבוצת sudo:

  1. sudo usermod -aG wheel username

או, באמצעות gpasswd:

  1. sudo gpasswd -a username wheel

על CentOS, אם הוספת המשתמש לקבוצה אינה פועלת מייד, �ייתכן צורך לערוך את קובץ /etc/sudoers כדי להתיר את שם הקבוצה:

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

איך להגדיר כללים מותאמים אישית

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

איך ליצור שמות זהות

קובץ sudoers יכול להיות מאורגן בצורה קלה יותר על ידי קיבוץ דברים עם סוגים שונים של "שמות זהות".

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

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

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

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

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

אנו יכולים לאפשר לחברי GROUPTHREE לסגור ולהפעיל מחדש את המכונה על ידי יצירת "שם זהות של פקודה" ושימוש בזה בכלל עבור GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

אנו יוצרים שם קיצור פקודה המכונה POWER המכיל פקודות לכיבוי ואינטרנט המכונה. אז אנו מאפשרים לחברי הקבוצה GROUPTHREE לבצע את הפקודות הללו.

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

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

זה יאפשר לכל מי שהוא חבר בקבוצה GROUPONE לבצע פקודות כמשתמשים www-data או apache.

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

איך להסגיר כללים

יש מספר דרכים שבהן אפשר להשיג שליטה רבה יותר על האופן שבו sudo מגיב לשיחה.

הפקודה updatedb המשוייכת לחבילה mlocate היא פחות מזיקה במערכת בודדת-משתמש. אם אנו רוצים לאפשר למשתמשים לבצע אותה עם הרשאות root ללא צורך להקליד סיסמא, אנו יכולים ליצור כלל כזה:

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD היא "תג" האומר שלא יידרשו סיסמאות. יש לה פקודה בן זוגית הנקראת PASSWD, שהיא התנהגות ברירת מחדל. תג היא רלוונטית לשאר הכלל אלא אם כן תעקף על ידי "תג התאום" שלה מאוחר יותר.

לדוגמה, אנו יכולים לקבל שורה כזו:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

שלוש סימניות נוספות שימושיות הן NOEXEC, שניתן להשתמש בהן למניעת התנהגות מסוכנת בתכניות מסוימות.

לדוגמה, בכמה תוכניות, כמו less, ניתן להפעיל פקודות אחרות על ידי הקלדה מתוך ממשק התוכנית:

!command_to_run

זה בעיקרון מבצע כל פקודה שהמשתמש מעביר לו באותן הרשאות שless פועל תחתיהן, מה שיכול להיות מאוד מסוכן.

כדי להגביל זאת, נוכל להשתמש בשורה כזו:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

מידע מגוון

יש עוד כמה פיסות מידע שעשויות להיות שימושיות כשמתעסקים עם sudo.

אם צוין משתמש או קבוצה ל"רוץ כמו" בקובץ התצורה, ניתן לבצע פקודות כאלו משתמשים על ידי שימוש בסמלים -u ו--g, בהתאמה:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

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

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

  1. sudo -k

אם מצד שני, אתה רוצה "להקדים" את הsudo כך שלא תתבקש מאוחר יותר, או לחדש את שכירות sudo, תמיד תוכל להקליד:

  1. sudo -v

תתבקש להזין את הסיסמה שלך, שתאותחל עבור שימושים עתידיים של sudo עד שטווח הזמן של sudo יפוג.

אם אתה פשוט תוהה מה סוג הפריבילגיות שמוגדרות עבור שם המשתמש שלך, אתה יכול להקליד:

  1. sudo -l

זה ירשום את כל הכללים בקובץ /etc/sudoers שחלים על המשתמש שלך. זה נותן לך מושג טוב על מה שתוכל או לא תוכל לעשות עם sudo כמשתמש כלשהו.

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

  1. sudo !!

שתי הפסיקים הכפולים יחזרו על הפקודה האחרונה. קדמנו אותו בsudo כדי לשנות במהירות את הפקודה הלא-מוסמכת לפקודה מוסמכת.

למשחק קצת, אפשר להוסיף את השורה הבאה לקובץ /etc/sudoers שלך עם visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

זה יגרום לsudo להחזיר בירורין מגוחכים כשמשתמש מקליד סיסמה שגויה עבור sudo. אנו יכולים להשתמש בsudo -k כדי לנקות את הסיסמה הקודמת של sudo המאוחסנת כדי לנסות את זה:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.

מסקנה

אתה כבר צריך להבין בבסיסיות איך לקרוא ולשנות את הקובץ sudoers, ולהבין את השיטות השונות שאפשר להשתמש בהן כדי לקבל שורש פריבילגיות.

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file