תרגום: ביטי SUID/SGID – הרצת תוכנה עם הרשאות של משתמש אחר

מבוסס על הזעיר-מדריך Setting the SUID/SGID: Givinig a program your permissions באתר Howto Forge.
כל הזכויות על הטקסט שמורות למחבר המאמר המקורי – aaron.

הערה מקדימה

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

תפקיד סיבית ה-SUID/SGID במערכת ההרשאות

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

סיבית (bit או ביט, מתוך השם "binary digit") היא ספרה בינארית – יחידת המידע הקטנה ביותר שבה משתמש המחשב. סיבית יכולה להכיל ערך 0 או 1 בלבד.

(- מתוך ויקיפדיה – האנציקלופדיה החופשית, סיבית)

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

די לראות את ההרשאות הנוכחיות של קובץ פשוט יש להריץ במסוף:

ls -l oowriter

-rwxr-xr-x 1 username username 5120 2007-06-14 23:24 oowriter

שינוי סיבית ה-SUID/SGID

הפקודה הבאה משנה את ביט ה-SUID של התוכנה oowriter לביט ה-SUID של המשתמש שהריץ את הפקודה:

chmod u+s oowriter

ה-u הוא בשביל user – משתמש.

כעת כאשר משתמש ב' יריץ את oowriter (באופן שקוף אפילו, לא דרך המסוף) התוכנה יקבל את הרשאות המשתמש של א'.
ניתן לראות בקלות את ההשפעה על הקובץ בדרך הבאה:

ls -l oowriter

-rwSr-xr-x 1 username username 5120 2007-06-14 23:24 oowriter

ה-x הוחלף ב-S.

בצורה זהה ניתן להעניק הרשאות של הקבוצה אליה שייך המשתמש שמריץ את chmod:

chmod g+s oowriter

ה-g הוא בשביל group – קבוצה.

והתוצאה:

ls -l oowriter

-rwSr-Sr-x 1 username username 5120 2007-06-14 23:24 oowriter

חסרונות

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

יתר על-כן, התוכנה לה הענקו ברוב חסדנו הרשאות מיוחדות עלולה להפעיל תוכנה אחרת שלה איננו מעונינים להעניק הרשאות אלו. וכך בטעות יצרנו חור אבטחה. לכן השימוש באפשרויות ה-SUID/SGID צריכה להישקל היטב מול חלופות אפשריות (שאין לי בראש כאלה כרגע).
מספר מאמרים קצרים לגבי סכנות אבטחה נוספות אפשר לקרוא כאן וכאן.

דרך אגב, בהפצה הנפוצה אובנטו (ubuntu) (בדומה ל-Mac OS) ישנו שימוש נרחב ברעיון (ברעיון, לא ביישום) של מתן הרשאות זמניות של משתמש -על (root) למשתמש רגיל, וזאת לצורך משימות עדכון ותחזוקה, לעומת השיטה המסורתית הדוגלת בקיום מלא של משתמש רגיל ומשתמש על ומעבר מלא לחשבון משתמש-על כדי לבצע פעולות עדכון ותחזוקה. והויכוח מה יותר מסכן את המערכת ומה יותר יעיל עדיין לא הוכרעה (sudo vs su).

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

תגובה אחת בנושא תרגום: ביטי SUID/SGID – הרצת תוכנה עם הרשאות של משתמש אחר

  1. מאת sagi‏:

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

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

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

    בקיצור, מומלץ לחשוב טוב לפני שפועלים.

השאר תגובה