יכולות מאפשרות לתהליכי לינוקס להוריד את מרבית ההרשאות כמו שורש תוך שמירה על תת-ההרשאות הדרושות להן כדי לבצע את תפקידן. היישום המקורי של היכולות לא איפשר לתהליכים של מזלג + ביצועים לרשת יכולות אלא אם כן מוגדרים לקבצים המבוצעים. יכולות קבצים מצידן מהוות סיכון אבטחה מכיוון שכל תהליך שמבצע קובץ עם יכולות קבצים יוכל להשיג יכולות אלה.
יכולות הסביבה מאפשרות לשירותי מערכת שהושקו על ידי init להגדיר יכולות בקבצי ה- .rc
שלהם, ולהביא תצורה לקובץ יחיד במקום לפצל את התצורה בקובץ fs_config.c
. משמעות הדבר היא כי עבור כל שירות שהושק על ידי init, תוכל להשתמש בקובץ .rc
המשויך לשירות כדי להגדיר יכולות עבור שירות זה.
יכולות הסביבה הן המנגנון המועדף להגדרת יכולות עבור שירותים שהושקו על ידי init (שיטה זו שומרת את כל ההיבטים בתצורת השירות בקובץ .rc
יחיד). אנו ממליצים להשתמש ביכולות הסביבה במקום להגדיר את יכולות מערכת הקבצים באמצעות הקטע config.fs
בקבצי config.fs
.
בעת הגדרת יכולות לשירותים שלא הושקו על ידי init , המשך להגדיר את יכולות מערכת הקבצים באמצעות fs_config.c
.
הפעלת יכולות סביבתיות
כדי לאפשר יכולות סביבה עבור שירות נתון, השתמש במילת המפתח של capabilities
ב- init. לפרטים הנוכחיים של שפת ה- init, עיין ב- init README.md .
לדוגמה, כדי לאפשר יכולות הסביבה עבור wificond
שירות AOSP, קובץ ה- .rc עבור שירות wificond
מגדיר את המשתמש והקבוצות המתאימים ומעניק לשירות את היכולות שצוינו באמצעות מילת המפתח capabilities
:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
יישום הפניה
יישום הייחוס הוא הליבה הנפוצה של Android https://android.googlesource.com/kernel/common/
תיקוני חובה
התיקונים הנדרשים הוחזרו לכל ענפי הליבה הנפוצים של Android.
תיקון יכולות הסביבה העיקרי https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 זכה לתמיכה ב:
- אנדרואיד 3.18:
- אנדרואיד 4.1:
תיקון אבטחה קטן https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 בוצע בחזרה:
- אנדרואיד 3.18:
- אנדרואיד 4.1:
מַתַן תוֹקֵף
מבחני היחידות הביוניות כוללים בדיקות יחידה ליכולות הסביבה. מעבר לכך, שימוש במילת המפתח "יכולות" ב- Android init לשירות, ואז בדיקה שהשירות מקבל את היכולות הצפויות תאפשר בדיקת זמן ריצה של תכונה זו.