היכולות מאפשרות הערכה של כמה הרשאות מערכת חשובות בשרשור נפרד השונה מהתהליך הנוכחי. בדרך זו, אינך צריך להפעיל תוכנית בתור שורש עבורה כדי לגשת לחלקים מסוימים של המערכת.
כפתרון הנובע מצרכים, סעיף 25 של POSIX.1e עוסק בנושא זה. פיתוח ההרשאות המוגדרות בסעיף זה ועוד הושלם עם שחרורו של גרסת ליבת לינוקס 2.6.26. הנה כל מה שאתה צריך לדעת על יכולות בליבת לינוקס.
הבנת הלוגיקה של Capabilities API
בקרת הרשאות במערכות מבוססות Unix מורכבת משני שלבים:
- אם הבעלים הנוכחי (מזהה משתמש יעיל, EUID) של האפליקציה הפועלת הוא אפס, אזי המערכת לא בודקת הרשאה
- אם ערך ה-EUID שונה מאפס, המערכת מבצעת את תהליך הבקרה בהתאם להרשאות המשתמש והקבוצה היעילים של האפליקציה הרלוונטית
חלק מהיישומים צריכים להיות בעלי הרשאות רחבות יותר (SUID, SGIT bits) בזמן הפעלה. כדוגמה האופיינית ביותר, אתה יכול לחשוב עליה היישום passwd. בעזרת זה, משתמשים במערכת יכולים לשנות את הסיסמאות שלהם. עם זאת, לכתוב ל- /etc/shadow קובץ, שבו נשמרות הסיסמאות המוצפנות, יש צורך לעבוד עם זכויות משתמש שורש (כלומר מזהה משתמש = 0).
כדי לפתור בעיה זו, ליישום passwd יש סיביות SUID. כל משתמש שמפעיל את האפליקציה הזו, הבעלים הפעיל (EUID) תמיד יהיה root:
ls -l /usr/bin/passwd
# פלט
-rwsr-xr-x. שורש שורש אחד 32552 23 ביולי 2021 /usr/bin/passwd
נראה שהיכולת להפעיל יישומי SUID במודל האימות המסורתי של Unix פתרה את הבעיה. עם זאת, שגיאות קריטיות ביישומים עם סיביות SUID פותחות את הדלת להרצת קודים לא רצויים עבור משתמשים בעלי סמכות מלאה במערכת. יישום אידיאלי אמור להיות מסוגל לפעול ללא צורך בזכויות משתמש שורש במידת האפשר.
הבעיה לא מסתיימת רק בסיבית SUID. אתה חייב גם להיות בעל זכויות משתמש שורש כאשר אתה רוצה להאזין ב-a יציאת TCP או UDP מוסמכת פחות מ-1024 במערכות מבוססות יוניקס. לדוגמה, כדי להיות מסוגל להאזין ליציאת TCP 80 של שרת אינטרנט, עליך להפעיל את היישום כמשתמש השורש.
במהלך השנים הבינו עד כמה זה הרסני להפעיל תוכנות שנותנות שירות לסביבת הרשת עם חשבון משתמש מורשה מלא. כפתרון ביניים, אומץ שרק חלק מסוים וקטן יותר מהתוכנית מאזין בנמל המיוחס כשורש, ולאחר מכן משנה את מזהה המשתמש הפעיל למשתמש אחר עבור תהליכים עוקבים (לדוגמה, המשתמש ללא זכויות מוגבלות).
מערכת זו, שנמצאת בשימוש שנים, עבדה היטב עם הפשטות שלה ועדיין נעשה בה שימוש יעיל. עם זאת, כיום, ניתן לקבל כמה יכולות נוספות, ספציפיות לאפליקציה, דרך ה-API ליכולות לינוקס, ללא צורך בזכויות שורש, מלבד האמור לעיל מערכת.
מודל יכולת לינוקס, הסבר!
אתה יכול למצוא את היישום המקיף ביותר של ה-API של היכולות בליבת לינוקס. הפצות לינוקס מודרניות גם מנסות להשתמש בדגם החדש הזה בכל מערכת ככל האפשר.
לדוגמה, כדי שאפליקציית הפינג תעבוד, עליה להיות מסוגלת לפתוח שקעי RAW, השמורים בדרך כלל למשתמשי שורש בלבד. בהפצות לינוקס ישנות, הבעיה היא לתת את סיביות ה-SUID לאפליקציה כדי שמשתמשים רגילים יוכלו להשתמש בו. בגרסאות אלו, כאשר אתה מסיר את סיביות ה-SUID מהיישום ומנסה להפעיל את היישום כמשתמש רגיל, אתה מקבל את השגיאה הבאה:
פינג 8.8.8.8
# פלט
ping: שקע פתוח icmp: פעולה לא מותרת
בעוד שבהפצות לינוקס מודרניות, לאפליקציית הפינג כנראה אין את סיביות ה-SUID:
ls -l /bin/ping
# פלט
-rwxr-xr-x. שורש שורש אחד 95232 25 ביולי 2021 /bin/ping
עם זאת, אתה יכול להפעיל את היישום בהצלחה כמשתמש רגיל. המנגנון שמאפשר זאת הוא שליישום הפינג יש את היכולת המיוחדת CAP_NET_RAW.
אתה יכול ללמוד את היכולות הנוספות של היישום עם getcap הפקודה כדלקמן:
סודו getcap /bin/ping
# פלט
/bin/ping cap_net_raw=ep
אם הפקודה getcap מחזירה תגובה ריקה, אתה יכול להגדיר באופן ידני את הערך הזה עם:
סודו setcap cap_net_raw+ep /bin/ping
מודל יכולת התהליך
ביישום לינוקס, היכולות של כל תהליך מקובצות תחת שלוש כותרות:
יכולת | הַצהָרָה |
מוּתָר | באשכול זה, יש רשימה של יכולות נוספות המותרות לתהליך הרלוונטי. מתן הרשאה אינו אומר שניתן להשתמש בה באופן פעיל באותו זמן. אפשר לכלול את ההרשאות כאן במערך היכולות האפקטיבי עם פעולה נוספת. |
יָעִיל | זה מציג את רשימת היכולות הפעילה כרגע של התהליך הקשור. עם פונקציות העזר המווסתות את מערכת המיומנות, ניתן לוותר או להחזיר מיומנות. בכל מקרה, עם זאת, ניתן לעשות זאת רק בקרב מי שכבר מורשים בקבוצה המותרת. |
עוֹבֵר בִּירוּשָׁה | כאשר יישום מתחיל תהליך חדש, התהליך שהוחל לאחרונה מציג את רשימת היכולות שהוא יירש מהרשימה המותרת. |
רשימת היכולות המותרות, היעילות והניתנות בירושה להפעלת תהליכים בכל עת מוצגת כ-bitmask על השורות CapPrm, CapEff, ו CapInh בקובץ /proc/
לדוגמה, נסה לקרוא את הערכים של יישום המעטפת הפועל שלך מה- /proc/self/status קוֹבֶץ:
חתול /proc/עצמי/status | grep Cap
# פלט
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000
מודל יכולת הקבצים בלינוקס
פעולת מערכת היכולות לקבצים תלויה בתנאי מוקדם שניתן לאחסן מאפיינים אלו בשכבת מערכת הקבצים הווירטואלית (VFS). בדומה למודל התהליך, יכולות קבצים נופלות לשלוש כותרות:
1. מוּתָר
המערכת קובעת את היכולות המותרות של התהליך כאשר קובץ ההפעלה המתאים פועל באשכול זה.
2. יָעִיל
שלא כמו מודל יכולת התהליך, כותרת זו מאחסנת ביט אחד בלבד: פעיל או לא פעיל. אם הביט פעיל, היכולות המוגדרות ברשימה המותרת של הקובץ מתבצעות באופן אוטומטי מועבר לרשימת היכולות האפקטיבית של התהליך הרלוונטי כאשר קובץ זה מופעל ותהליך הוא נוצר. אם הביט אינו פעיל, לא מתבצעת ההעברה האוטומטית של היכולות המותרות בקובץ לתהליך הפועל.
עם זאת, אם הקוד של האפליקציה הרלוונטית משולב עם מערכת היכולות, הוא יכול להפעיל את ההרשאות בסט המותר של הקובץ עם קריאות מערכת. המטרה העיקרית של התנהגות זו היא להבטיח שיישומים ישנים שאינם כוללים יכולת ספציפית למערכת קוד, פיתוח ברמת קוד התוכנה יכול לעבוד עם מערכת היכולת ללא צורך בקוד מקור כלשהו שינויים.
אתה עשוי לחשוב שיישומים כתובים טוב יותר ישתמשו ביכולות רק בעת הצורך. אם ה-bit פעיל, כל היכולות ברשימת המותרות הופכות לפעילות עם הפעלת היישום.
3. עוֹבֵר בִּירוּשָׁה
כמו במודל התהליך, הקובץ הרלוונטי פועל ומתרחש תהליך. אם יישום אחר פועל מתוך התהליך לאחר מכן, הוא נכלל ברשימה המותרת של התהליך החדש. לסיכום, זה מציין רשימה של יכולות לרשת.
תפקיד היכולות במערכת לינוקס
כאשר אתה מפעיל תהליך מסוים כמשתמש רגיל, אין לך שום הרשאות. כתוצאה מכך, אתה יכול לגשת רק למחיצות שהמערכת מאפשרת למשתמשים רגילים. הסיבה העיקרית מאחורי זה היא להדק את אבטחת המערכת וליישם אמצעים כאלה.
מתן אפשרות לכל המשתמשים לגשת לכל המשאבים עלולה ליצור פגיעות אבטחה חמורה. יהיה קל מאוד לאנשים שמשתמשים במערכת למטרות זדוניות לנצל פגיעויות של המערכת. יכולות לינוקס מועילות בעניינים כאלה. אתה יכול בקלות לחזק את האבטחה של היישומים שלך עם יכולות API המופעל על ידי הליבה.
יכולות לינוקס הן רק אחת מהבעיות שצריך לחשוב עליהן כדי לבצע שיטות חזקות מאוד כמו חלוקת הבסיס של משתמש השורש. הרשאות, הקצאת הרשאות שונות למשתמשים שאינם מורשים, ונקיטת אמצעי זהירות שונים לגבי יציאות פתוחות בשירותי אינטרנט עם שרתי לינוקס.
שפר את אבטחת שרת הלינוקס שלך עם 7 שלבי ההקשחה האלה
קרא הבא
נושאים קשורים
- לינוקס
- תִכנוּת
- ליבת לינוקס
- מערכת הפעלה
על הסופר

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