שאלה: האם מצאת עצמך פעם במצב בו היית צריך לבצע משימה במערכת Linux ונתקלת בסירוב גישה מעצבן? ובכן, אז תגיד להתראות לאבעבועים האלה וברוך הבא לעולם ההרשאות המיוחדות של Linux!
מדריך זה הוא הכרטיס שלך לשליטה בנקודות העדינות של ההרשאות המיוחדות של Linux – הביט Sticky, הביט Set User ID (SUID) והביט Set Group ID (SGID). ההרשאות המיוחדות אלו מציעות רמת בטיחות גבוהה יותר.
המשך לקרוא ולנהל את הקבצים שלך בדיוק ובביטחון!
דרישות מוקדמות
לפני שאתה קופץ לפרטי ההרשאות המיוחדות של Linux, ודא שיש לך מחשב Linux. במדריך זה אנו משתמשים ב-Ubuntu 22.04 LTS (Jammy Jellyfish) להדגמות מעשיות.
ביצוע קבצים עם הרשאות מיוחדות ב-Linux (SUID)
ההרשאות של קבצי Linux יכולות לקבוע את יכולת הקריאה, הכתיבה או הביצוע של משתמש על פי ההרשאות שלו ואלו של קבוצתו. ישנם, אך, מצבים בהם משתמש חייב לבצע קובץ עם הרשאות של בעל הקובץ ולא עם ההרשאות שלו.
לדוגמה, שקול תוכנית שרק משתמשי root יכולים להפעיל, אך יש צורך שמשתמש רגיל יוכל להריץ אותה למשימה ספציפית. במקרים כאלה, SUID הוא לא יקר אלא חובה.
כדי לראות איך להגדיר את ההרשאות של SUID, עקוב אחרי השלבים הבאים:
1. פתח את הטרמינל ובצע את הפקודות הבאות כדי ליצור משתמש (useradd
) בשם A-user
(ריק) ותן לו סיסמה (passwd
).

2. לאחר מכן, הפעל את הפקודה stat
למטה כדי להציג את ההרשאות הקיימות של פקודת cat
.
שים לב להרשאות הגישה למטה, שתזקיק לך להשוואה מאוחר יותר:
- 0755 – מאפשר לקובץ להתקיים עם הרשאות בעלים שלו, מספק זכויות מוגבלות למשתמשים לא פריבילגיים בעת הפעלת הקובץ.
- -rwxr-xr-x – מגדיר הרשאה לבעלים לקרוא, לכתוב ולהריץ את הקובץ (rwx), בעוד חברי קבוצה ומשתמשים אחרים יכולים לקרוא ולהריץ את הקובץ (r-x ו־r-x).

cat
command3. כעת, הפעל את פקודת chmod
למטה, שאין לה אלפות אך היא מגדירה את הביט SUID על פקודת cat
.
פקודה זו מאפשרת לפקודת cat
לרוץ עם הרשאות בעלים של הקובץ במקום הרשאות המשתמש שמפעיל את הפקודה.
? שים לב ששימוש ב-SUID צריך להתבצע בזהירות, מכיוון שיכול להביא לסיכוני אבטחה אם לא מיושם בצורה נכונה. ודא כי אתה מיישם SUID רק על פקודות וקבצים אמינים.
4. לאחר שהפעלת את ה-SUID bit, הרץ את הפקודה הבאה של stat
כדי לוודא את ה-SUID bit ולבדוק שוב את ההרשאות של הפקודה cat
.
אם הפעולה הצליחה, תראה את ההודעה הבאה, ואז תשווה את המידע ששמרת בשלב שני:
- 0755 שונה ל-4755, כאשר המספר 4 מייצג את ה-SUID bit.
- -rwxr-xr-x שונה ל--rwsr-xr-x, כאשר s מייצג את הרשאת ההרצה (x) של המשתמש בהתאם.

5. הפעל את הפקודה של cat
לבדיקת הרשאת המשתמש המחובר כרגע לקובץ /etc/shadow
. זהו קובץ מערכת חשוב המאחסן סיסמאות מוצפנות של משתמשים ומידע קשור, שרק משתמש ראשי יכול לגשת אליו.
באופן ברירת מחדל, הפקודה של cat
מאפשרת לך לראות את תוכן הקובץ ב-Linux. אך ההתנהגות זו אינה תמיד תקפה לכל קובץ.
הודעה זו מופיעה מאחר שהמשתמש הנוכחי אין לו הרשאה לגשת אל הקובץ.

6. כעת, הריץ כל פקודה למטה כדי להחליף (su
) למשתמש החדש (A-user
), ונסה לגשת לקובץ /etc/shadow
שוב.
הפעם, הפקודת cat
תרוץ עם ההרשאות של בעל הקובץ (בדרך כלל root) במקום ההרשאות של המשתמש שביצע את הפקודה.
מכיוון שהענקת הרשאה זמנית ל-A-user לקרוא את תוכן הקובץ, תקבל פלט כמו בדוגמה שלמטה.

7. מסיבות אבטחה, בצע את הפקודות הבאות כדי להתנתק מהמשתמש הנוכחי (A-user) ולהחזיר את ההרשאות של הפקודת cat
למצבה המקורי.

cat
command8. לבסוף, הרץ את הפקודה למטה כדי לוודא שהסימן SUID הוסר.
שים לב שהסימן SUID 4 ו- s לא נמצאים יותר בהרשאות הגישה.

הפעלת זרימות עבודה שיתופיות בספריות Linux (SGID)
הרצת קבצים עם הרשאות מיוחדות ב-Linux באמצעות SUID עובדת בוודאות בצורה טובה. אבל מה אם אתה רוצה זרימות עבודה שיתופיות, שבהן מספר משתמשים יכולים לשתף פעולה על פרויקטים? לרוב, עליך לוודא שקבצים שנוצרים חדשים יירשו את בעלות הקבוצה של ספריית ההורה.
כאשר נתקלים בתרחיש כזה, ה-SGID מוכיח כי הוא משנה את המשחק. התכונה הזו הכוחית פשוטה את ניהול המשאבים המשותפים ומשפרת זרימות עבודה מבוססות קבוצה בסביבות Linux.
כדי לראות איך ה-SGID פועל, יש ליצור קבוצה, להוסיף משתמשים אליה, להגדיר הרשאת SGID על ספרייה ולבדוק את פעולתה כדלהלן:
1. בצע את הפקודות הבאות כדי להתחבר כמשתמש root וליצור קבוצה חדשה בשם demo
(רקעית). זו הקבוצה שתשמש לבדיקת פעולת ה-SGID.
פקודות אלו אינן

2. לאחר מכן, הרץ את הפקודות הבאות כדי ליצור שני משתמשים (userA
ו-userB
) שישמשו לדמות סביבה של ייעוד שיתופי.

3. לאחר יצירת משתמשים חדשים, הרץ את פקודות ה-usermod
למטה, אשר אינן מפיקות פלט לטרמינל אך מוסיפות את המשתמשים (userA
ו-userB
) לקבוצה demo
.
4. כעת, בצע כל פקודה למטה, צור ספרייה (mkdir
) בשם /demo-dir
(רקעית) והגדר את בעלות המשתמש והקבוצה על הספרייה ל-userA
ול-demo
בהתאם.
? כאשר הפקודות הללו מוצלחות, הן אינן מפיקות פלט, וזה חולק דרך כל המדריך.
5. לבסוף, הרץ את הפקודה ls
למטה כדי להציג את ההרשאות של ספריית /demo-dir
.
הפלט למטה מאשר את זיהוי המשתמש בתיקיית /demo-dir שהוגדר ל- userA והקבוצה ל- demo.

6. עם ההרשאות מאושרות, הריצו את הפקודה chmod
להגדרת הביט SGID בתיקיית /demo-dir/
כך:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. לאחר הגדרת הביט SGID, הריצו את הפקודה הבאה כדי לאמת את הרשאות התיקייה /demo-dir
.
אם ההרצה הצליחה, תראו את הביט SGID מוגדר, מיוצג על ידי המספר 2
לפני ההרשאות במספרים אוקטליים ו-s
בקרובת ההרשאה (rws
).

8. לאחר מכן, הריצו כל פקודה ליצירת תיקיית /home
עבור userA
.
9. בצעו את הפקודות הבאות למעבר (su
) ל-userA
וליצירת קובץ (touch
) שנקרא textA.txt
(רשות) בתיקיית /demo-dir
.
לפקודות אלו אין פלט (מה שניתן להחיל לכל הדרך במדריך זה), אך תוכלו לאמת את הרשאות הקובץ בשלב הבא.
10. הריצו את הפקודה ls
הבאה כדי לראות את הרשאות הקובץ textA.txt
.
למטה, בקובץ textA.txt, בעל הקבוצה הוא demo, שהוא הקבוצה הראשית של היוצר, userA. חברי הקבוצה demo יכולים לקרוא ולשנות את הקובץ, בעוד שאחרים יכולים רק לקרוא אותו.
כדי לוודא שקבצים חדשים בתיקיית /demo-dir יירשו את בעלות הקבוצה של התיקייה, יש להגדיר סימן SGID על התיקייה, אשר תכסה בשלבים הבאים.

11. כעת, הפעל את הפקודות הבאות כדי לצאת
מהמשתמש הנוכחי (userA) ולהגדיר את סימן ה-SGID (chmod g+s
) בתיקיית /demo-dir

12. לאחר שה-SGID הוגדר, הפעל את הפקודה הבאה כדי לוודא את סימן ה-SGID שהוספת לתיקיית /demo-dir
.
כפי שמוצג למטה, תראה שסימן ה-SUID 2 הוסף, וישנו s במקום ביצוע הבעלים של הקבוצה. הפלט הזה מאשר כי סימן ה-SGID הוגדר בהצלחה לתיקיית /demo-dir.

13. לבצע חזרה למשתמש userA
וליצור קובץ נוסף בשם testA.txt
(כלשהו) בתיקיית /demo-dir
.
14. לאחר שנוצר, הפעל את הפקודה ls
למטה כדי לבדוק את בעלות הקובץ החדש (testA.txt
).
אם ה-SGID עובד כצפוי, הפלט מציין כי בזמן ש-userA הוא הבעלים, בעלות הקבוצה היא demo עקב קביעת ה-SGID על הסימן /demo-dir.

15. כעת, יש ליצור ספריית /home
עבור userB
לצורך בדיקה נוספת של פונקציונליות ה-SGID.
16. החלף אל userB
וצור קובץ בשם testB.txt
(רשאי) באותו ספריית /demo-dir
.

17. הצג (ls
) את מידע הקובץ החדש (testB.txt
).
בדוק את בעלות הקובץ testB.txt.

הגנה על קבצים בתוך ספריות (Sticky Bit)
אפשרות הגבלת הזכויות בספריות בלינוקס מקנה יימוש שותף ושיתוף פעולה חלקן. אך כאשר יש צורך ביצירת סביבה מאובטחת לניהול קבצים בצורה יעילה, הרשאות ה-Sticky Bit יכולות לעזור.
על ידי הגדרת ה-Sticky Bit, אתה בעצם שם את "המפתחות לטירה" בידי בעל הקובץ, בעל התיקייה או משתמש root. בכך מובטח שרק להם יש הרשאה למחוק או לשנות את שם הקובץ בתוך התיקייה, מספק גנים נוסף עבור נתונים רגישים.
כדי להגדיר הרשאות Sticky Bit, יש ליצור תחילה תיקייה משותפת עם השלב הבא:
1. התחבר כמשתמש root וצור ספרייה (משותפת) שבה יכולים משתמשים מרובים ליצור קבצים.
2. לאחר מכן, הרץ את הפקודות הבאות כדי לשנות את ההרשאות של הספרייה /shared-dir
כך שינתנו הרשאות כתיבה לכולם.
המספר הראשון (1
) בתוך 1777
מגדיר את הביט הנצמד (Sticky Bit), בעוד היתר (777
) מבטיח כי הספרייה תהיה נגישה לקריאה, כתיבה והרצה על ידי כולם.
הנה מאפיינים או תכונות של הביט הנצמד במערכת Linux:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
למטה, תוכל לראות את האות ‘t’ בחלק האחרון של שדה ההרשאות, המציינת כי הביט הנצמד מוגדר לספרייה /shared-dir

3. החלף למשתמש userA וצור קובץ בשם fileA.txt
(של אופי אקראי) בתוך הספרייה /shared-dir
:
4. צא מהמשתמש userA, החלף למשתמש userB, וצור קובץ נוסף בשם fileB.txt
(של אופי אקראי) באותה ספרייה /shared-dir
.
5. עכשיו, צא ממשתמשB, החלף למשתמשA, ונסה למחוק את הקובץ fileB.txt של userB.
תקבל פלט כמו בדוגמה למטה מאחר ורק בעל הקובץ יכול לבצע שינויים או למחוק את הקובץ.

6. לבסוף, הרץ את רשימת הפקודות הבאה (ls) כדי להציג את כל הקבצים בתיקיית השיתוף (/shared-dir).
אם ההרשאות של הסימן Sticky Bit עובדות, תראה שהקובץ fileB.txt שנוצר על ידי userB נשמר ואינו נמחק. fileB.txt

מסקנה
כאשר אתה מסיים את החקירה הזו של הרשאות מיוחדות ב-Linux, פתחת ערכת כלים חזקה: ה-SUID, SGID, ו־Sticky Bit. עם הידע הזה, אתה יכול כעת לכוון בדיוק את בקרת הגישה ולהגן על הקבצים שלך בדיוק.
אך אל תעצר כאן! למה לא לנסות להגדיר תיקיית שיתוף עם SGID ולנסות לנסח איך הקבצים ירשו את בעלות הקבוצה? עולמו של Linux נמצא בידיך, ועם כל פעולה, תשלוט באמנות של הגנה על המערכת שלך.
Source:
https://adamtheautomator.com/special-permissions-in-linux/