היסטוריית גירסאות | ||
---|---|---|
גירסה 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, אם ברצונכם לשנות הרשאת בעלות לקובץ מסויים יהיה עליכם לוודא שהמשתמש אכן קיים במערכת, וזאת ניתן לגלות על ידי קריאה של קובץ זה, כעת ניקח שורה אפשרית מתוך הקובץ וננתח אותה:
penguin:x:1000:100:Tux Israeli:/home/penguin:/bin/bash
כמו שניתן לראות, כל שדה בשורה זו מופרד משדה אחר על ידי הסימן : (נקודותיים),
נתאר מצב שבו נרצה לאפשר לארבעה משתמשים (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
גם פה השדות מופרדים על ידי הסימן ”:” (נקודותיים):
כעת נשתמש בכלי chown כפי שלמדנו קודם כדיי לאפשר בעלות של קבוצות אלה על הקבצים הרצויים:
chown root:slash /home/user/file chown root:dot /usr/bin/file
בדוגמא זו נתנו בעלות על הקובץ /home/usr/file לקבוצה slash ולמשתמש root ועל הקובץ /usr/bin/file נתנו את הבעלות למשתמש root ולקבוצה dot.
כעת נציין שתיי פקודות חדשות:
id [משתמש]
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, שפרושם 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