הרשאות מיוחדות ב-Linux: SUID, SGID, & ביט דביק

שאלה: האם מצאת עצמך פעם במצב בו היית צריך לבצע משימה במערכת 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).

sudo useradd A-user
sudo passwd A-user
Creating a new user

2. לאחר מכן, הפעל את הפקודה stat למטה כדי להציג את ההרשאות הקיימות של פקודת cat.

stat /usr/bin/cat

שים לב להרשאות הגישה למטה, שתזקיק לך להשוואה מאוחר יותר:

  • 0755 – מאפשר לקובץ להתקיים עם הרשאות בעלים שלו, מספק זכויות מוגבלות למשתמשים לא פריבילגיים בעת הפעלת הקובץ.
  • -rwxr-xr-x – מגדיר הרשאה לבעלים לקרוא, לכתוב ולהריץ את הקובץ (rwx), בעוד חברי קבוצה ומשתמשים אחרים יכולים לקרוא ולהריץ את הקובץ (r-x ו־r-x).
Viewing access permissions of the cat command

3. כעת, הפעל את פקודת chmod למטה, שאין לה אלפות אך היא מגדירה את הביט SUID על פקודת cat.

פקודה זו מאפשרת לפקודת cat לרוץ עם הרשאות בעלים של הקובץ במקום הרשאות המשתמש שמפעיל את הפקודה.

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

sudo chmod u+s /usr/bin/cat

4. לאחר שהפעלת את ה-SUID bit, הרץ את הפקודה הבאה של stat כדי לוודא את ה-SUID bit ולבדוק שוב את ההרשאות של הפקודה cat.

stat /usr/bin/cat

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

  • 0755 שונה ל-4755, כאשר המספר 4 מייצג את ה-SUID bit.
  • -rwxr-xr-x שונה ל--rwsr-xr-x, כאשר s מייצג את הרשאת ההרצה (x) של המשתמש בהתאם.
Verifying the SUID bit

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

באופן ברירת מחדל, הפקודה של cat מאפשרת לך לראות את תוכן הקובץ ב-Linux. אך ההתנהגות זו אינה תמיד תקפה לכל קובץ.

cat /etc/shadow

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

Viewing the /etc/shadow file’s content via a user without appropriate permissions

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

הפעם, הפקודת cat תרוץ עם ההרשאות של בעל הקובץ (בדרך כלל root) במקום ההרשאות של המשתמש שביצע את הפקודה.

# החלף למשתמש A-user
su A-user
# הצג את תוכן קובץ /etc/shadow
cat /etc/shadow

מכיוון שהענקת הרשאה זמנית ל-A-user לקרוא את תוכן הקובץ, תקבל פלט כמו בדוגמה שלמטה.

Viewing the /etc/shadow file’s content

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

exit
sudo chmod u-s /usr/bin/cat
Removing the SUID bit from the cat command

8. לבסוף, הרץ את הפקודה למטה כדי לוודא שהסימן SUID הוסר.

stat /usr/bin/cat

שים לב שהסימן SUID 4 ו- s לא נמצאים יותר בהרשאות הגישה.

Confirming the SUID bit removal

הפעלת זרימות עבודה שיתופיות בספריות Linux (SGID)

הרצת קבצים עם הרשאות מיוחדות ב-Linux באמצעות SUID עובדת בוודאות בצורה טובה. אבל מה אם אתה רוצה זרימות עבודה שיתופיות, שבהן מספר משתמשים יכולים לשתף פעולה על פרויקטים? לרוב, עליך לוודא שקבצים שנוצרים חדשים יירשו את בעלות הקבוצה של ספריית ההורה.

כאשר נתקלים בתרחיש כזה, ה-SGID מוכיח כי הוא משנה את המשחק. התכונה הזו הכוחית פשוטה את ניהול המשאבים המשותפים ומשפרת זרימות עבודה מבוססות קבוצה בסביבות Linux.

כדי לראות איך ה-SGID פועל, יש ליצור קבוצה, להוסיף משתמשים אליה, להגדיר הרשאת SGID על ספרייה ולבדוק את פעולתה כדלהלן:

1. בצע את הפקודות הבאות כדי להתחבר כמשתמש root וליצור קבוצה חדשה בשם demo (רקעית). זו הקבוצה שתשמש לבדיקת פעולת ה-SGID.

פקודות אלו אינן

# החלף למשתמש root
sudo su
# צור קבוצה חדשה
groupadd demo
Switching to root and creating a job

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

useradd -s /bin/bash userA
passwd userA

useradd -s /bin/bash userB
passwd userB
Creating users with passwords for simulating a collaborative environment

3. לאחר יצירת משתמשים חדשים, הרץ את פקודות ה-usermod למטה, אשר אינן מפיקות פלט לטרמינל אך מוסיפות את המשתמשים (userA ו-userB) לקבוצה demo.

usermod -aG demo userA
usermod -aG demo userB

4. כעת, בצע כל פקודה למטה, צור ספרייה (mkdir) בשם /demo-dir (רקעית) והגדר את בעלות המשתמש והקבוצה על הספרייה ל-userA ול-demo בהתאם.

? כאשר הפקודות הללו מוצלחות, הן אינן מפיקות פלט, וזה חולק דרך כל המדריך.

# צור ספרייה
mkdir /demo-dir
# שנה את בעלות הספרייה
chown userA:demo /demo-dir

5. לבסוף, הרץ את הפקודה ls למטה כדי להציג את ההרשאות של ספריית /demo-dir.

ls -ld /demo-dir/

הפלט למטה מאשר את זיהוי המשתמש בתיקיית /demo-dir שהוגדר ל- userA והקבוצה ל- demo.

Viewing the /demo-dir directory’s permissions

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.
chmod g+s,u+rwx,g+rwx,o-rwx /demo-dir/

7. לאחר הגדרת הביט SGID, הריצו את הפקודה הבאה כדי לאמת את הרשאות התיקייה /demo-dir.

stat /demo-dir

אם ההרצה הצליחה, תראו את הביט SGID מוגדר, מיוצג על ידי המספר 2 לפני ההרשאות במספרים אוקטליים ו-s בקרובת ההרשאה (rws).

Verifying the SGID bit set to the /demo-dir directory

8. לאחר מכן, הריצו כל פקודה ליצירת תיקיית /home עבור userA.

mkdir /home/userA
chown userA:userA /home/userA

9. בצעו את הפקודות הבאות למעבר (su) ל-userA וליצירת קובץ (touch) שנקרא textA.txt (רשות) בתיקיית /demo-dir.

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

# לעבור למשתמשA
su - userA
# לשנות ספריית עבודה
cd /demo-dir
# ליצור קובץ טקסט
touch textA.txt

10. הריצו את הפקודה ls הבאה כדי לראות את הרשאות הקובץ textA.txt.

ls -l textA.txt

למטה, בקובץ textA.txt, בעל הקבוצה הוא demo, שהוא הקבוצה הראשית של היוצר, userA. חברי הקבוצה demo יכולים לקרוא ולשנות את הקובץ, בעוד שאחרים יכולים רק לקרוא אותו.

כדי לוודא שקבצים חדשים בתיקיית /demo-dir יירשו את בעלות הקבוצה של התיקייה, יש להגדיר סימן SGID על התיקייה, אשר תכסה בשלבים הבאים.

Verifying the textA.txt file’s permissions

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

# יציאה מהמשתמש userA
exit
# הגדרת SGID לתיקיית /demo-dir
chmod g+s /demo-dir
Setting the SGID bit to the /demo-dir directory

12. לאחר שה-SGID הוגדר, הפעל את הפקודה הבאה כדי לוודא את סימן ה-SGID שהוספת לתיקיית /demo-dir.

stat /demo-dir

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

Verifying the SGID is set to the /demo-dir directory

13. לבצע חזרה למשתמש userA וליצור קובץ נוסף בשם testA.txt (כלשהו) בתיקיית /demo-dir.

# חזרה למשתמש userA
su - userA
# שינוי תיקייה
cd /demo-dir
# יצירת קובץ טקסט
touch testA.txt

14. לאחר שנוצר, הפעל את הפקודה ls למטה כדי לבדוק את בעלות הקובץ החדש (testA.txt).

ls -l testA.txt

אם ה-SGID עובד כצפוי, הפלט מציין כי בזמן ש-userA הוא הבעלים, בעלות הקבוצה היא demo עקב קביעת ה-SGID על הסימן /demo-dir.

Verifying permissions of the testA.txt file

15. כעת, יש ליצור ספריית /home עבור userB לצורך בדיקה נוספת של פונקציונליות ה-SGID.

mkdir /home/userB
chown userB:userB /home/userB

16. החלף אל userB וצור קובץ בשם testB.txt (רשאי) באותו ספריית /demo-dir.

# החלף ל- userB
su - userB
# שנה תיקייה
cd /demo-dir
# צור קובץ טקסט
touch testB.txt
Switching to userB and creating the testB.txt file

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

ls -l testB.txt

בדוק את בעלות הקובץ testB.txt.

Checking the ownership of the textB.txt file

הגנה על קבצים בתוך ספריות (Sticky Bit)

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

על ידי הגדרת ה-Sticky Bit, אתה בעצם שם את "המפתחות לטירה" בידי בעל הקובץ, בעל התיקייה או משתמש root. בכך מובטח שרק להם יש הרשאה למחוק או לשנות את שם הקובץ בתוך התיקייה, מספק גנים נוסף עבור נתונים רגישים.

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

1. התחבר כמשתמש root וצור ספרייה (משותפת) שבה יכולים משתמשים מרובים ליצור קבצים.

# החלף למשתמש root
sudo su
# צור ספרייה (משותפת)
mkdir /shared-dir

2. לאחר מכן, הרץ את הפקודות הבאות כדי לשנות את ההרשאות של הספרייה /shared-dir כך שינתנו הרשאות כתיבה לכולם.

המספר הראשון (1) בתוך 1777 מגדיר את הביט הנצמד (Sticky Bit), בעוד היתר (777) מבטיח כי הספרייה תהיה נגישה לקריאה, כתיבה והרצה על ידי כולם.

# שנה הרשאות, הגדר ביט נצמד
chmod 1777 /shared-dir
# צפה בהרשאות הספרייה
ls -ld /shared-dir

הנה מאפיינים או תכונות של הביט הנצמד במערכת 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

Viewing permissions of the /shared-dir directory

3. החלף למשתמש userA וצור קובץ בשם fileA.txt (של אופי אקראי) בתוך הספרייה /shared-dir:

# החלף למשתמש userA
su - userA
# צור קובץ טקסט
touch /shared-dir/fileA.txt

4. צא מהמשתמש userA, החלף למשתמש userB, וצור קובץ נוסף בשם fileB.txt (של אופי אקראי) באותה ספרייה /shared-dir.

# יציאה ממשתמשA
exit
# החלפה למשתמשB
su - userB
# צור קובץ טקסט
touch /shared-dir/fileB.txt

5. עכשיו, צא ממשתמשB, החלף למשתמשA, ונסה למחוק את הקובץ fileB.txt של userB.

# יציאה ממשתמשB
exit
# החלפה למשתמשA
su - userA
# מחיקת קובץ ששייך למשתמשB
rm /shared-dir/fileB.txt

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

Attempting to delete a file (fileB.txt) owned by another user (userB)

6. לבסוף, הרץ את רשימת הפקודות הבאה (ls) כדי להציג את כל הקבצים בתיקיית השיתוף (/shared-dir).

ls /shared-dir/

אם ההרשאות של הסימן Sticky Bit עובדות, תראה שהקובץ fileB.txt שנוצר על ידי userB נשמר ואינו נמחק. fileB.txt

Confirming the fileB.txt file still exists

מסקנה

כאשר אתה מסיים את החקירה הזו של הרשאות מיוחדות ב-Linux, פתחת ערכת כלים חזקה: ה-SUID, SGID, ו־Sticky Bit. עם הידע הזה, אתה יכול כעת לכוון בדיוק את בקרת הגישה ולהגן על הקבצים שלך בדיוק.

אך אל תעצר כאן! למה לא לנסות להגדיר תיקיית שיתוף עם SGID ולנסות לנסח איך הקבצים ירשו את בעלות הקבוצה? עולמו של Linux נמצא בידיך, ועם כל פעולה, תשלוט באמנות של הגנה על המערכת שלך.

Source:
https://adamtheautomator.com/special-permissions-in-linux/