הקדמה
הפרדת ההרשאות היא אחת מתכניות האבטחה היסודיות שמיושמות במערכות ההפעלה 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
למשתמש, ניתן לבדוק את המדריכים להתחלת
הערה: מדריך זה עושה עמיקה בהגדלת הרשאות ובקובץ sudoers
. אם אתה רוצה רק להוסיף הרשאות sudo
למשתמש, תראה את המדריכים המהירים שלנו איך ליצור משתמש חדש עם sudo עבור Ubuntu ו- CentOS.
איך לקבל הרשאות של ראוט
יש שלושה דרכים בסיסיות לקבלת הרשאות ראוט, שנבדלות ברמת המורכבות שלהם.
כניסה כראוט
הדרך הפשוטה והישירה ביותר לקבלת הרשאות ראוט היא להתחבר ישירות לשרת שלך כמשתמש ראוט.
אם אתה מתחבר למכונה מקומית (או משתמש בשירות ממוקד מחוץ לקו בשרת וירטואלי), הזן ראוט
כשם המשתמש שלך בפקודת ההתחברות והזן את הסיסמא ראוט כשמתבקש לעשות זאת.
אם אתה מתחבר דרך SSH, ציין את המשתמש root לפני כתובת ה-IP או שם התחום במחרוזת החיבור SSH שלך:
אם לא קבעת מפתחות SSH עבור המשתמש root, הזן את סיסמת המשתמש root כשמתבקש לעשות זאת.
שימוש בsu
כדי להפוך לראט
התחברות ישירות כroot בדרך כלל אינה מומלצת, מכיוון שקל מאוד להתחיל להשתמש במערכת למטרות לא מנהליות, מה שמסוכן.
הדרך הבאה להשיג מעמד מנהל מערכת מאפשרת לך להפוך למשתמש root בכל עת, כפי שאתה זקוק לכך.
אנו יכולים לעשות זאת על ידי קריאת הפקודה su
, שמיועדת להחלפת משתמש. כדי להשיג מעמד מנהל מערכת, הקלד:
תועבר לך לבקשת סיסמת המשתמש root, ואחריה תיפול לסשן שיחת root.
כשתסיים את המשימות שדרושות מעמד מנהל מערכת root, חזור לסשן האינטראקציה הרגיל שלך על ידי הקלדה:
שימוש בsudo
כדי לבצע פקודות כראט
הדרך האחרונה להשגת הרשאות שורש שורש שנדון בה היא באמצעות הפקודה sudo
.
הפקודה sudo
מאפשרת לך לבצע פקודות בודדות עם הרשאות שורש, מבלי שצריך להקים שכבה חדשה. זה מבוצע כך:
שלא כמו su
, הפקודה sudo
תבקש את סיסמת המשתמש הנוכחי, לא סיסמת השורש.
בגלל ההשלכות האבטחה שלה, הגישה ל- sudo
אינה מותרת למשתמשים כברירת מחדל, ועליך להגדיר אותה לפני שהיא תתאפשר. תריץ איך ליצור משתמש חדש עם הרשאות sudo במהירות במדריכים שלנו עבור אובונטו ו- סנטוס ללמוד כיצד להגדיר משתמש מותאם sudo
.
בסעיף הבא, נדון בכיצד לשנות את התצורה של sudo
בפירוט רב יותר.
מהו Visudo?
הפקודה sudo
מוגדרת דרך קובץ הממוקם ב- /etc/sudoers
.
אזהרה: אל תערוך את הקובץ הזה עם עורך טקסט רגיל! תמיד השתמש בפקודה visudo
במקום!
מכיוון ששימוש לא תקין בתחביר בקובץ /etc/sudoers
יכול להשאיר אותך עם מערכת שבורה שבה זה בלתי אפשרי לקבל זכות משוחררת, חשוב להשתמש בפקודה visudo
כדי לערוך את הקובץ.
הפקודה visudo
פותחת עורך טקסט כרגיל, אך היא בודקת את התחביר של הקובץ בעת שמירה. זה מונע משמעותיות טעויות מחסומים sudo
פעולות, שעשויה להיות הדרך היחידה שלך לקבל שורש זכות.
באופן מסורתי, visudo
פותח את הקובץ /etc/sudoers
עם vi
עורך הטקסט. אובונטו, לעומת זאת, כבר מוגדר visudo
להשתמש בעורך הטקסט nano
במקום.
אם אתה רוצה לשנות אותו בחזרה ל vi
, יוצא את הפקודה הבאה:
OutputThere 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
שלך:
הפוך את הקובץ כדי ליישם את השינויים:
לאחר שהגדרת את visudo
, הפעל את הפקודה כדי לגשת לקובץ /etc/sudoers
:
איך לשנות את קובץ 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.
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
שורת הסוף אולי תיראה כמו תגובה במבט ראשון:
. . .
#includedir /etc/sudoers.d
זה עושה מתחיל ב#
, שבדרך כלל מציין תגובה. עם זאת, שורה זו בעצם מציינת שקבצים בתיקייה /etc/sudoers.d
יופקדו ויישמרו גם כן.
קבצים בתיקייה זו מקיימים את אותם כללים כמו הקובץ /etc/sudoers
עצמו. כל קובץ שאינו מסתיים ב~
ושאין בו .
ייקרא ויתווסף לתצורה של sudo
.
זה בעיקר נועד ליישומים שישנו את הפריטים של sudo
בעת התקמתם. הכנסת כל הכללים המשוייכים לקובץ בודד במדריך /etc/sudoers.d
יכול להקל על הצפייה בכמה פריטים משוייכים לכמה חשבונות ולהפוך את הזכויות בקלות מבלי לנסות לתפעל את הקובץ /etc/sudoers
ישירות.
כמו בקובץ /etc/sudoers
עצמו, תמיד עליך לערוך קבצים בתיקייה /etc/sudoers.d
עם visudo
. התחביר לעריכת הקבצים הללו יהיה:
איך לתת למשתמש פריטים של sudo
הפעולה הנפוצה ביותר שמשתמשים רוצים להשיג כשהם מנהלים פריטים של sudo
היא להעניק למשתמש חדש גישה כללית ל-sudo
. זה מאוד שימושי אם אתה רוצה לתת לחשבון גישה מלאה לניהול המערכת.
הדרך הקלה ביותר לעשות זאת במערכת המוקצבת למטרה כללית של קבוצת מנהלים, כמו במדריך זה של מערכת Ubuntu, היא למעשה להוסיף את המשתמש בשאלה לקבוצה זו.
לדוגמה, ב-Ubuntu 20.04, קבוצת sudo
בעלת פריטים מלאים של מנהל. אנו יכולים לתת למשתמש את אותם פריטים על ידי הוספתם לקבוצה כזו:
הפקודה gpasswd
יכולה גם לשמש לכך:
כל אלו ישיגו את אותו המטרה.
על CentOS, זה בדרך כלל קבוצת wheel
במקום קבוצת sudo
:
או, באמצעות gpasswd
:
על CentOS, אם הוספת המשתמש לקבוצה אינה פועלת מייד, �ייתכן צורך לערוך את קובץ /etc/sudoers
כדי להתיר את שם הקבוצה:
. . .
%wheel ALL=(ALL) ALL
. . .
איך להגדיר כללים מותאמים אישית
עכשיו שהתרחקנו מן התחביר הכללי של הקובץ, בואו ניצור כמה כללים חדשים.
איך ליצור שמות זהות
קובץ sudoers
יכול להיות מאורגן בצורה קלה יותר על ידי קיבוץ דברים עם סוגים שונים של "שמות זהות".
לדוגמה, אנו יכולים ליצור שלושה קבוצות שונות של משתמשים, עם חברות משולבות:
. . .
User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric,
User_Alias GROUPTHREE = doris, felicia, grant
. . .
שמות הקבוצה חייבים להתחיל באות גדולה. אנו יכולים אז לאפשר לחברי GROUPTWO
לעדכן את מאגר הapt
על ידי יצירת כלל כזה:
. . .
GROUPTWO ALL = /usr/bin/apt-get update
. . .
אם אנו לא מציינים משתמש/קבוצה לרוץ כפי שאנו רואים לעיל, sudo
מניח כברירת מחדל את המשתמש root.
אנו יכולים לאפשר לחברי GROUPTHREE
לסגור ולהפעיל מחדש את המכונה על ידי יצירת "שם זהות של פקודה" ושימוש בזה בכלל עבור GROUPTHREE
:
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE ALL = POWER
. . .
אנו יוצרים שם קיצור פקודה המכונה POWER
המכיל פקודות לכיבוי ואינטרנט המכונה. אז אנו מאפשרים לחברי הקבוצה GROUPTHREE
לבצע את הפקודות הללו.
אנו יכולים גם ליצור "הפעל כמו" שמות קיצור, שיכולים להחליף את החלק של הכלל שמציין את המשתמש לבצע את הפקודה ככה:
. . .
Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL
. . .
זה יאפשר לכל מי שהוא חבר בקבוצה GROUPONE
לבצע פקודות כמשתמשים www-data
או apache
.
רק תזכרו שכללים מאוחרים יעקפו כללים מוקדמים כשיש סכסוך בין שני הכללים.
איך להסגיר כללים
יש מספר דרכים שבהן אפשר להשיג שליטה רבה יותר על האופן שבו sudo
מגיב לשיחה.
הפקודה updatedb
המשוייכת לחבילה mlocate
היא פחות מזיקה במערכת בודדת-משתמש. אם אנו רוצים לאפשר למשתמשים לבצע אותה עם הרשאות root ללא צורך להקליד סיסמא, אנו יכולים ליצור כלל כזה:
. . .
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
. . .
NOPASSWD
היא "תג" האומר שלא יידרשו סיסמאות. יש לה פקודה בן זוגית הנקראת PASSWD
, שהיא התנהגות ברירת מחדל. תג היא רלוונטית לשאר הכלל אלא אם כן תעקף על ידי "תג התאום" שלה מאוחר יותר.
לדוגמה, אנו יכולים לקבל שורה כזו:
. . .
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .
שלוש סימניות נוספות שימושיות הן NOEXEC
, שניתן להשתמש בהן למניעת התנהגות מסוכנת בתכניות מסוימות.
לדוגמה, בכמה תוכניות, כמו less
, ניתן להפעיל פקודות אחרות על ידי הקלדה מתוך ממשק התוכנית:
!command_to_run
זה בעיקרון מבצע כל פקודה שהמשתמש מעביר לו באותן הרשאות שless
פועל תחתיהן, מה שיכול להיות מאוד מסוכן.
כדי להגביל זאת, נוכל להשתמש בשורה כזו:
. . .
username ALL = NOEXEC: /usr/bin/less
. . .
מידע מגוון
יש עוד כמה פיסות מידע שעשויות להיות שימושיות כשמתעסקים עם sudo
.
אם צוין משתמש או קבוצה ל"רוץ כמו" בקובץ התצורה, ניתן לבצע פקודות כאלו משתמשים על ידי שימוש בסמלים -u
ו--g
, בהתאמה:
לשיקול דעתך, כברירת מחדל, sudo
ישמור את הפרטיות שלך למשך זמן מסוים במסך אחד. זה אומר שלא תצטרך להקליד מחדש את הסיסמה שלך שוב עד שהשעון הזה יגיע לסוף.
למען האבטחה, אם אתה רוצה לנקות את השעון הזה כשסיימת לבצע פקודות מנהליות, תוכל להשתמש:
אם מצד שני, אתה רוצה "להקדים" את הsudo
כך שלא תתבקש מאוחר יותר, או לחדש את שכירות sudo
, תמיד תוכל להקליד:
תתבקש להזין את הסיסמה שלך, שתאותחל עבור שימושים עתידיים של sudo
עד שטווח הזמן של sudo
יפוג.
אם אתה פשוט תוהה מה סוג הפריבילגיות שמוגדרות עבור שם המשתמש שלך, אתה יכול להקליד:
זה ירשום את כל הכללים בקובץ /etc/sudoers
שחלים על המשתמש שלך. זה נותן לך מושג טוב על מה שתוכל או לא תוכל לעשות עם sudo
כמשתמש כלשהו.
יש הרבה פעמים שתבצע פקודה והיא תיכשל מכיוון ששכחת להקדים אותה בsudo
. כדי להימנע מלצרוך להקליד מחדש את הפקודה, אפשר לנצל פונקציונליות של bash שמשמעותה "חזור על הפקודה האחרונה":
שתי הפסיקים הכפולים יחזרו על הפקודה האחרונה. קדמנו אותו בsudo
כדי לשנות במהירות את הפקודה הלא-מוסמכת לפקודה מוסמכת.
למשחק קצת, אפשר להוסיף את השורה הבאה לקובץ /etc/sudoers
שלך עם visudo
:
. . .
Defaults insults
. . .
זה יגרום לsudo
להחזיר בירורין מגוחכים כשמשתמש מקליד סיסמה שגויה עבור sudo
. אנו יכולים להשתמש בsudo -k
כדי לנקות את הסיסמה הקודמת של sudo
המאוחסנת כדי לנסות את זה:
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