14/05/2024

מדריך לינוקס למתחילים בעברית חלק 7 - מה זה sudo בלינוקס?


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

מה נלמד היום?
1) מה זה sudo ומה הפירוש של המושג הזה?
2) מתי משתמשים ב SUDO בלינוקס?
3) למה צריך את SUDO?
4) איך לבדוק האם משתמש ROOT מאופשר במערכת?
5) איך לקבוע סיסמא למשתמש ROOT?
6) איך לעבוד על משתמש ROOT? 
7) איך להריץ את הפקודה האחרונה שוב ולהוסיף את SUDO אוט'?
8) איך לבדוק האם המשתמש שלכם הוא חלק מקבוצת SUDO?
9) איך להריץ SUDO בלי להקיש סיסמא כל הזמן?
10) איך להגביל משתמש להרצת פקודות מסוימות בלבד?
11) מה קורה אם עושים טעות בקובץ sudoers?

1. מה זה SUDO בלינוקס?
SUDO - היא פקודה בלינוקס ומערכות יוניקס (גם במאק יש SUDO) שמאפשרת להריץ תוכנות עם הרשאות של משתמש אחר, לרוב זה יהיה משתמש אדמיניסטרטור (ROOT), המשמעות של הפקודה זה Super User DO, זאת אומרת "משתמש מנהל עשה"

2. מתי משתמשים ב SUDO בלינוקס?

יש פקודות שלא עובדות ללא הרשאות ניהול, כמה וכמה פקודות כאלה כבר ראינו במהלך המדריכים הקודמים, שרצינו לבצע שינוי ל NICE, כשרצינו לבצע התקנה ל HTOP, השתמשנו ב sudo, גם בווינדוס בלי הרשאות מנהל יש דברים שלא תצליחו לעשות, כמו גם להתקין תוכנות לדוגמא או לפעמים גם לשנות שמות של קבצים אין אפשרות בלי הרשאות מתאימות, ואז אנחנו מבצעים "Run As", ופה זה בדיוק אותו דבר, הרצה של פקודה בתור משתמש אחר, במקרה של לינוקס לרוב זה משתמש עם הרשאות מנהל, לצורך הרצת הפקודה, פשוט נוסיף את המילה sudo בהתחלה,
ונצרף את הפקודה שאנחנו רוצים להריץ לדוגמא: sudo apt update

בתור דוגמא הרצתי עדכון למנהל החבילות apt ללא הרשאות מנהל:


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




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

3. למה צריך את SUDO?
הכל עניין של ביטחון, בשביל שלא תצטרכו לעבוד על חשבון ROOT כל הזמן, אפשר להשתמש בפקודה SUDO, זה עד כדי כך פשוט שאם ימאס לכם להקיש את הסיסמא של SUDO, תוכלו לכתוב את הפקודה שאתם רוצים להריץ ואז בעצם להוסיף פרמטר שישאל אתכם פעם אחת סיסמא ובמהלך של התקנה לא יבקש ממכם סיסמא אף פעם יותר.
נריץ את הפקודה עם הפרמטר y- בצורה הזאת sudo apt update -y ואז במידה ויש צורך להקיש את הסיסמא במהלך הפעולה, המערכת לא תבקש מאיתנו סיסמא יותר מהפעם הראשונה.

4.איך לבדוק האם משתמש ROOT מאופשר במערכת?

אם אתם עובדים על לינוקס, החשבון ROOT מאופשר במערכת, במידה ואתם רוצים לעבוד דרכו (לא מומלץ כי מסוכן מאוד !) אפשר להקיש את הפקודה " - su" ואז נצטרך להקיש סיסמא, לאחר מכן נעבור לעבוד תחת חשבון ROOT:


בשביל לצאת למשתמש הרגיל שלכם בחזרה, השתמשו בפקודה exit.

5. איך לקבוע סיסמא למשתמש ROOT?
במידה ואתם לא מצליחים לעבור למשתמש ROOT כי אתם לא יודעים את הסיסמא שלו, ניתן לבצע שינוי בעזרת כמה צעדים פשוטים:
1) sudo passwd root
2) נקיש את הסיסמא שאנחנו רוצים (נקבל שגיאה שהסיסמא לא בסדר כי היא קצרה מדי, אפשר לא להתייחס אליה ולהקיש את הסיסמא שאתם רוצים..כמובן שאני עושה את זה בסביבה שהיא מעבדה, במקרה של פרודקשן, סיסמא זאת צריכה להיות מאוד קשה לפיצוח מהסיבה הפשוטה - ROOT = "אלוהי מערכת").
3) סיימנו.


6. כיצד לעבור למשתמש ROOT?
מעבר בין משתמשים בלינוקס מתבצע בעזרת הפקודה su ואז שם היוזר, במקרה הזה נקיש su root:



7. איך להריץ את הפקודה האחרונה שוב ולהוסיף את SUDO אוט'?

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


8.איך לבדוק האם המשתמש שלכם הוא חלק מקבוצת SUDO?
מדובר על אחת הפקודות היותר פשוטות שיצא לי להשתמש, הפקודה groups [user_name]:


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

9.איך להריץ SUDO בלי להקיש סיסמא כל הזמן?

בלינוקס יש קובץ מעניין שאחראי על כל נושא ה SUDO שנקרא Sudoers, קובץ זה נמצא בנתיב /etc/sudoers/ וניתן לצפות בו אך ורק עם הרשאות של SUDO, הקובץ הזה אחראי על מי יריץ אילו פקודות בתור אילו משתמשים,ועל אלו שרתים\מחשבים. כמו כן ניתן לקבוע הרצה של SUDO ללא סיסמא - מאוד מאוד לא מומלץ ולא בטיחותי ! יחד עם זאת, זה מחשב שרת שלכם, עשו מה שאתם חושבים לנכון :).

בשביל להציג את התוכן של הקובץ הזה צריך לפתוח אותו עם SUDO בצורה הבאה: sudo cat /etc/sudoers:



מקרא של הקובץ: 
  • סימן % - אומר שמדובר בקבוצה ולא משתמש. 
  • ה"all" הראשון - מיצג את השרתים\מחשבים שעליהם מותר למשתמש בקבוצה הזאת להריץ פקודות עם SUDO.
  • (all:all) מצד ימין -  קבוצה - השם של הקבוצה שבתור שמה תוכלו להריץ SUDO.
    מצד שמאל - שם משתמש שבשמו תריצו את הפקודה SUDO (זאת אומרת המשתמש שתרשמו כשתעשו run as) לידע כללי: ברגע שאתם מריצים את הפקודה sudo המערכת משתמשת במשתמש הנקרא ROOT, בתור ברירת מחדל, אבל בפועל אתם יכולים לקבוע איזה משתמש יריץ את הפקודה.
  • (all) - כאשר יש רק ALL אחד בתוך הסוגריים, אותו דבר כמו הנ"ל.
  • ה"all" האחרון - הפקודות שאותן המתשמש מורשה להריץ, במקרה הזה "כולן".
9.א איך לערוץ קובץ sudoers?

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

נפתח את הקובץ בעזרת הפקודה sudo visudo, ונוסיף למשתמש user1 הרשאות של הכל מהכל, ברובריקה שמדברת על משתמשים "User privilege" ונרשום (חייב זהה למה שכתוב כאן, חובה לשים לב לאותיות גדולות או קטנות):
user1 ALL=(ALL:ALL)ALL



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

לצורך שמירה, נלחץ על ctrl+o (לא הסיפרה 0 אלה האות "o") למטה נוכל לראות שהתוכנה אומרת לנו שהיא תשמור את הקובץ: 


לאחר מכן נלחץ על ENTER, ועל ctrl+x בשביל לצאת וחזרנו לטרמינל, בשביל לבדוק את השינויים נריץ את cat בשביל לראות את תוכן בעזרת  sudo cat /etc/sudoers ונראה את השינוי:



במקרה שלי כבר היה לי משתמש בשם user1, לכן אני לא צריך ליצור אותו (אני לא אפרט כאן על ניהול משתמשים, כי אנחנו נדבר על כך במדריך על ניהול משתמשים אבל אתן פקודה ליצירת משתמש במידה ואין לכם משתמש לנסות עליו) לצורך יצירת משתמש נריץ את הפקודה: sudo adduser [user_name]:


שימו לב, לא חובה למלא את כל השאלות בדרך.


לאחר מכן, אני אעבור למשתמש שיצרתי (במקרה שלי משתמש שכבר היה קיים user1) בעזרת הפקודה sudo su - [user_name] ואז אבדוק אילו פקודות המשתמש הזה יכול להריץ בעזרת הפקודה sudo -l


ונראה שהמערכת אומרת לנו שהמשתמש user1 יכול להריץ את הפקודות הבאות על המכונה ubuntu-vm.

10. איך להגביל משתמש להרצת פקודות מסוימות בלבד?

נגיד ואנחנו רוצים לאפשר למשתמש user1 להריץ את כל מה שקשור ב apt ללא סיסמא, נכנס חזרה לקובץ בעזרת
 sudo visudo, ושם נוסיף את הסינטקס הבא: NOPASSWD: /usr/bin/apt.

¿?למה בעצם את הנתיב הזה? - בחלק השני במדריך (החלק שמדבר על מערכות הקבצים בלינוקס) ראינו שכל פקודה בלינוקס היא מודול והן כולן יושבות בתיקייה bin ¿?

אם נרצה להוסיף עוד פקודה, לדוגמה את הפקודה rm (מחיקה) נוסיף באותה הצורה בעזרת פסיק לאחר הפקודה הקודמת בצורה הזאת:


עכשיו לצורך בדיקה, נעבור למשתמש user1 וננסה לעשות איתו את sudo apt update כמו שעשינו עם המשתמש lev:


וכצפוי, הכל רץ ללא צורך להכניס סיסמא.

11 מה קורה אם עושים טעות בתוך הקובץ sudoers?

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



ובעצם תרשום לנו שבסוף חסר לנו עוד מידע, לאחר מכן נלחץ על ENTER, ונקבל מסך עם שאלה "מה ברצוננו לעשות?"


מקרא:
  • e - לבצע עריכה לקבוץ
  • x - לצאת בלי לשמור את השינויים
  • q - לצאת ולשמור את השינויים - כמובן שזה מסוכן מאחר וזה יכול לעשת תקלות, במיוחד אם זה קובץ גדול נגיד ויש הרבה משתמשים וקבוצות ואתם לא זוכרים מה בדיוק שיניתם, או מכל סיבה אחרת.

כמו תמיד לכל שאלה המייל שלי levl@leidertech.co.il

וכמובן סרטון מצולם:



אין תגובות:

הוסף רשומת תגובה

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

תודה :)