מבוא למערכת ההרשאות

אביב רוזנטל
היסטוריית גירסאות
גירסה 1.0 05-04-2007 כתריאל טראום
הומר לפורמאט וויקי

זכויות יוצרים ורשיון

כל הזכויות שמורות © 2005, אביב רוזנטל, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL

Linux הוא סימן מסחרי רשום של Linus Torvalds.

הסרת אחריות

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

משוב

תגובות, תלונות, הערות והארות לכתובת הנ”ל

מבוא

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

השימוש בפועל בהרשאות קבצים

בדיקת הרשאה / שינוי הרשאה בקבצים

כל קובץ בלינוקס שייך למשתמש ולקבוצה במערכת. ברגע יצירת הקובץ, הקובץ משתייך למשתמש שייצר אותו ולקבוצה הראשית של אותו משתמש.

על מנת לראות למי שייך קובץ מסויים, ניתן להשתמש בפקודה ls עם הדגל l, לדוגמא:

ls -l /home/user/file

בתוך הפלט של הפקודה הזאת תמצאו בטור השלישי את שם המשתמש שהקובץ בבעלותו ובטור הרביעי את הקבוצה בעלת הקובץ.
שינוי הבעלות (owner) על הקובץ יכול להתבצע ע”י משתמש-העל (root) בלבד וזאת בעזרת הכלי chown, תבנית הכלי היא:

chown <קובץ> [קבוצה:]<משתמש>

אם אנחנו רוצים לשנות הרשאה של קבצים רבים, נניח בתקיה כלשהי, תמיד אפשר להשתמש בדגל -R :

chown aviv /var/www/html/aviv/ -R

בדוגמא, שינינו את ההרשאות קבצים של התקיה aviv שבשרת האפצ'י, למשתמש aviv. השינוי תקף גם על הספריה כמובן. מעכשיו, הבעלות על הספריה, ועל תוכנה הוא של המשתמש aviv .

הקובץ etc/passwd/

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

penguin:x:1000:100:Tux Israeli:/home/penguin:/bin/bash

כמו שניתן לראות, כל שדה בשורה זו מופרד משדה אחר על ידי הסימן : (נקודותיים),

  1. בשדה הראשון אנחנו רואים את שם המשתמש, בדרך כלל הוא יהיה מורכב מאותיות קטנות ומספרים.
  2. בשדה השני אנחנו רואים איקס (x), דבר שמצביע על כך שסיסמאת המשתמש מוצפנת ונמצאת בקובץ /etc/shadow, שיטת ההצפנה הזאת נועדה להקשיח את אבטחת המערכת וגם לאכסן פרטים נוספים על חשבון המשתמש - כמו למשל התאריך שבו יפוג חשבון המשתמש ומספר הימים שעברו מאז שינוי הסיסמא האחרון, אך ישנם מערכות שלא משתמשות בשיטה זו ולכן בהם השדה השני עלול להיות שונה.
  3. השדה השלישי מכיל את מספר הזיהוי של המשתמש (User ID) והשדה הרביעי מכיל את מספר זיהוי קבוצתו הראשית של המשתמש (Group ID),
  4. בשדה החמישי נראה פרטים אישיים על המשתמש אשר הוכנסו בזמן תהליך רישום המשתמש במערכת.
  5. בשדה השישי אנו נראה את מיקום סיפריית הבית של המשתמש, זוהי הסיפריה שאליה יכנס המשתמש לאחר כל ביצוע של כניסה למערכת (login),
  6. בשדה האחרון נמצא המיקום של תוכנת המעטפת שבעזרתה המשתמש יתקשר עם המערכת.
השימוש ב"קבוצות" - (groups)

נתאר מצב שבו נרצה לאפשר לארבעה משתמשים (moshe, itay, matan, aviv) גישה לקובץ מסויים על המערכת ולחמישה משתמשים נוספים (nadav, barak, doron, katriel, aviv) גישה לקובץ אחר, לצורך זה ניצור שתיי קבוצות, slash ו- dot (השמות הם לצורך הדגמה בלבד), את הקבוצות ניתן ליצור ע”י הכלי groupadd או על ידי עריכה של הקובץ /etc/group, השורות שנוסיף לקובץ זה יראו כך:

slash::500:moshe,itay,matan,aviv
dot::501:nadav,barak,doron,katriel,aviv

גם פה השדות מופרדים על ידי הסימן ”:” (נקודותיים):

  1. בשדה הראשון רשמנו את שם הקבוצה החדשה שלנו,
  2. את השדה השני השארנו ריק מכיוון שהוא משמש לסיסמא ואין לנו צורך בסיסמא במקרה זה,
  3. השדה השלישי מציין את מספר הקבוצה, מספר זה חייב להיות מספר יחודי שלא שייך כבר לקבוצה אחרת,
  4. בשדה האחרון כתובים כל המשתמשים ששייכים לאותה קבוצה, מופרדים על ידי פסיקים. שים לב שאין הגבלה על כפילויות, זאת אומרת שמשתמש aviv יכול להיות גם בקבוצה slash וגם בקבוצה dot.

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

chown root:slash /home/user/file
chown root:dot /usr/bin/file

בדוגמא זו נתנו בעלות על הקובץ /home/usr/file לקבוצה slash ולמשתמש root ועל הקובץ /usr/bin/file נתנו את הבעלות למשתמש root ולקבוצה dot.

כעת נציין שתיי פקודות חדשות:

  • הפקודה id, בעזרתה ניתן לראות מספר הזיהוי של המשתמש, מספר הזיהוי של הקבוצה הראשית של המשתמש ואת שאר הקבוצות שאליהן שייך המשתמש ואת מספרן, משתמשים בפקודה באופן הבא:
id [משתמש]
  • הפקודה השניה היא groups, פקודה זו מציגה לנו את שמות הקבוצות שהמשתמש חבר בהם:
groups [משתמש]
<code>

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

== הגבלת / הרחבת גישה בעזרת chmod ==

עד עתה למדנו איך לקבוע בעלות על קבצים, כעת נתקדם כדיי לראות איך ניתן להגביל גישה לקבצים ותיקיות בעזרת הבעלות הזאת, נריץ את הפקודה ls -ld /bin/cp /etc/passwd /tmp, נקבל משהו קרוב או זהה ל:
<code>
-rwxr-xr-x 1 root root 28628 Mar 24 1999 /bin/cp
-rw-r--r-- 1 root root 1151 Jul 23 22:42 /etc/passwd
drwxrwxrwt 5 root root 4096 Sep 25 15:23 /tmp
<code>

נתמקד על הטור הראשון שבו אנו רואים את דגלי ההרשאות של הקובץ, הדגל הכי שמאלי מציין האם הקובץ הוא תיקיה, קובץ רגיל או לינק (קיצור דרך) לקובץ אחר, כאשר d מציין תיקיה, l מציין לינק ומינוס (-) מציין קובץ. \\
תשעת המקומות הנותרים מתחלקים לשלושה קבוצות (בתבנית הזו: uuugggooo-):
  -  שלושת המקומות הראשונים מציינים את ההרשאות שניתנות לבעל הקובץ (u) על הקובץ
  - שלושת המקומות הבאים מציינים את הרשאת הקבוצה (g) לקובץ 
  - שלושת המקומות האחרונים מציינים את הגישה של שאר המשתמשים (o) במערכת אל הקובץ.

כאשר לכל קבוצה ניתן לתת הרשאת:
  -  הרצה (x)
  - הרשאת קריאה (r)
  - הרשאת כתיבה (w).

ההשפעה של ההרשאות שונה אם ההרשאות מתבצעות על תיקיה או על קובץ.
  * הרשאת הרצה על קובץ תאפשר לבעל ההרשאה להפעיל את הקובץ והרשאת הרצה על תיקיה תאפשר לבעל ההרשאה להכנס לתיקיה.
  * הרשאת כתיבה על קובץ תאפשר לבעל ההרשאה לכתוב לתוך הקובץ והרשאת כתיבה (בשילוב עם הרשאת הרצה) על תיקיה תאפשר לבעל ההרשאה ליצור ולמחוק קבצים בתוך התיקיה.
  * הרשאת קריאה על קובץ תאפשר לבעל ההרשאה לצפות בתוכן הקובץ והרשאת קריאה על תיקיה תאפשר לבעל ההרשאה לצפות בתוכנה (מהמילה תוכן) של התיקיה.

נציין שהרשאה על קבוצה תשפיע על כל החברים בקבוצה זו.

שינוי ההרשאות נעשה בעזרת הכלי chmod, בתבנית הזו:
<code>
chmod [-R] [u|g|o|a][+|-|=][r|w|x] <file> [<file>] ...

לדוגמא:

chmod u+x file

יוסיף הרשאת הרצה (x) למשתמש (u) שהקובץ בבעלותו.

chmod a-rw file

ימחוק את הרשאת הקריאה ® ואת הרשאת הכתיבה (w) מכולם (a), זאת אומרת מהמשתמש (u), מהקבוצה (g) ומהאחרים (o).

chmod o=wr dir

יקבע לשאר המשתמשים גישת קריאה וכתיבה לתיקיה. הדגל -R אומר לפקודה לפעול גם על תת-תיקיות ועל הקבצים שבתוכם.

שיטה נוספת לקביעת הרשאות היא בצורה מספרית, בשיטה זו אנו משתמשים במספר שמורכב מארבע ספרות, בבסיס אוקטלי (0-7), הסיפרה הראשונה תציין הרשאות נוספות של הקובץ (ידובר על זה בהמשך) ובדרך כלל היא תיהיה שווה 0, הסיפרה השניה אחראית על הרשאות המשתמש, הסיפרה השלישית אחראית על הרשאות הקבוצה והסיפרה האחרונה אחראית על ההרשאות של שאר המשתמשים במערכת.
הרשאת קריאה תיוצג על ידי הסיפרה 4, הרשאת כתיבה תיוצג על ידי הסיפרה 2 והרשאת הרצה תיוצג על ידי הסיפרה 1. כדיי לקבוע יותר מהרשאה אחת, פשוט מחברים את הערכים שלהם ביחד. לדוגמא, כדיי לקבוע הרשאת כתיבה (2) והרשאת קריאה (4), נשתמש בסיפרה 6. כדיי לקבוע הרשאת כתיבה (2), קריאה (4) והרצה (1) נשתמש בסיפרה 7, וכדיי לא לקבוע אף הרשאה נשתמש בסיפרה 0. כדיי לקבוע הרשאת הרצה, כתיבה וקריאה למשתמש, קריאה והרצה לקבוצה וקריאה לשאר המשתמשים נשתמש בפקודה:

chmod 0754 file
השימוש ב suid וב sgid

דיברנו כבר על הרשאות קריאה, כתיבה והרצה, אך ישנו סוג נוסף של הרשאות, הרשאת suid והרשאת sgid, שפרושם Set User ID ו- Set Group ID בהתאמה.
משמעות הרשאות אלה הם שהקובץ ירוץ עם אותם הרשאות שיש למי שרשום כבעל הקובץ או כקבוצה שהקובץ בבעלותה, דבר זה יכול להיות שימושי אם נרצה שקובץ כלשהו ירוץ תמיד עם הרשאות של משתמש מסויים, או לאפשר למשתמש רגיל להריץ תוכנה שתוכל לעשות דברים שרק למשתמש אחר יש גישה אליהם.
הרשאת זו מיוצגת על ידי האות s בפקודה chmod ולא תיהיה לה משמעות על אף קובץ או תיקיה אם אין לו הרשאת הרצה. לדוגמא נפעיל את הפקודה chmod u+s file, הקובץ יקבל את ההרשאות הבאות:

-rwSr--r-- 1 root root 4 Jul 25 20:34 file

שימו לב ל S הגדולה, היא באה להדגיש לנו שלקובץ אין הרשאת הרצה ולכן להרשאת ה suid לא תיהיה השפעה, כעת ניתן לקובץ הרשאת הרצה, בעזרת הפקודה chmod u+x file, כעת הרשאות הקובץ יהיו כאלה:

-rwsr--r-- 1 root root 4 Jul 25 20:34 file

שימו לב שעכשיו ה s היא קטנה, מה שאומר שהרשאת suid נקבעה ועובדת, וכעת הקובץ ירוץ תמיד עם הרשאות של משתמש-העל (root) ויהיה לו גישה לכל הקבצים שבדרך כלל רק למשתמש-העל יש גישה אליהם, אפילו אם מישהו אחר בעל גישת הרצה לקובץ יריץ אותו. הדבר אינו מסוכן כמו שהוא אולי נשמע, מכיוון שרק למשתמש-העל ולבעל הקובץ או התיקיה יש אפשרות לשינוי הרשאות אלה, אך למרות זאת שינוי הרשאת suid\sgid צריך להעשות בזהירות מכיוון שהוא יכול להוות פתח לבעית אבטחה.
השפעת הרשאה זו על תיקיה היא קצת שונה והיא אומרת שאם אקבע suid לתיקיה, כל הקבצים שיווצרו בתיקיה זו מעתה יהיו בבעלות בעל התיקיה, אותו דבר חל על sgid, וכמובן שהרשאת הרצה מחייבת גם במקרה הזה.

הרשאה "דביקה"

ההרשאה הבאה שנדבר עליה היא הרשאה “דביקה” (sTicky), האות שמייצגת אותה בכלי chmod היא t ומשמעות הרשאה זו היא שהקובץ או התיקיה שהרשאה זו תופעל עליהם יוכנסו לתוך זיכרון המערכת כדיי לאפשר גישה מהירה לתכולתם, תיקית /tmp בדרך כלל בעלת הרשאה כזאת בדיוק בגלל סיבה זו.
הרשאה זו, בדומה להרשאות suid\sgid, ניתנת לשינוי על ידי משתמש-העל ועל ידי בעל הקובץ ודורשת הרשאת הרצה על מנת לפעול, במקרה שלא נקבעה הרשאת הרצה על הקובץ, ההרשאה תיוצג על ידי אות גדולה (T).

בצורה מספרית, הרשאת suid מיוצגת על ידי הסיפרה 4, הרשאת sgid מיוצגת על ידי הסיפרה 2 והרשאה “דביקה” מיוצגת על ידי הסיפרה 1.
את ה”הרשאות הנוספות” אנו מציינים בסיפרה הראשונה מתוך ארבעת הספרות של ה chmod (כמו שהוסבר קודם) והעקרון דומה לשינוי הרשאות רגילות, אם למשל נרצה לקבוע לקבוצה (g) ולאחרים (o) הרשאת הרצה, ולמשתמש (u) הרשאת suid, קריאה והרצה, נשתמש בפקודה:

chmod 4511 file

פקודה זו תיהיה שווה בערכה לפקודה:

chmod u=srx,g=x,o=x file

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

chmod 511 file
מדריכים/מבוא_למערכת_ההרשאות.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0