יכולות מאפשרות לתהליכים ב-Linux לבטל את רוב ההרשאות שדומות להרשאות root, תוך שמירה על קבוצת המשנה של ההרשאות שנדרשות להם כדי לבצע את הפונקציה שלהם. ההטמעה המקורית של היכולות מנעה מאפשרות של תהליכים שהופעלו באמצעות fork+exec לרשת את היכולות, אלא אם הוגדר בקובצי ההפעלה היכולות של הקובץ. יכולות הקבצים, מצידן, מהוות סיכון אבטחה, כי כל תהליך שמריץ קובץ עם יכולות קבצים יכול לקבל את היכולות האלה.
יכולות הסביבה מאפשרות לשירותי המערכת שמופעלים על ידי init להגדיר יכולות בקבצים שלהם מסוג .rc
, וכך להעביר את ההגדרות לקובץ אחד במקום לפצל אותן לקובץ fs_config.c
. כלומר, לכל שירות שמופעל על ידי init, אפשר להשתמש בקובץ .rc
שמשויך לשירות כדי להגדיר את היכולות של השירות הזה.
יכולות הסביבה הן המנגנון המועדף להגדרת יכולות לשירותים שמופעלים על ידי init (השיטה הזו שומרת את כל ההיבטים של הגדרת השירות בקובץ .rc
יחיד). מומלץ להשתמש ביכולות הסביבה במקום להגדיר את יכולות מערכת הקבצים באמצעות הקטע caps בקובצי config.fs
.
כשמגדירים יכולות לשירותים שלא הופעלו על ידי init, ממשיכים להגדיר את יכולות מערכת הקבצים באמצעות fs_config.c
.
הפעלת יכולות אווירה
כדי להפעיל את יכולות הסביבה לשירות נתון, משתמשים במילות המפתח capabilities
ב-init. לפרטים על השפות הנוכחיות של init, אפשר לעיין בקובץ README.md של init.
לדוגמה, כדי להפעיל את היכולות של הסביבה לשירות AOSP wificond
, קובץ ה-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 הועבר לגרסאות קודמות:
- android-3.18:
- android-4.1:
תיקון אבטחה קטן https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 הועבר לגרסאות קודמות:
- android-3.18:
- android-4.1:
אימות
בדיקות יחידה של Bionic כוללות בדיקות יחידה של יכולות אווירה. בנוסף, אפשר להשתמש במילות המפתח 'capabilities' ב-Android init לשירות, ואז לבדוק שהשירות מקבל את היכולות הצפויות, כדי לבדוק את התכונה הזו בסביבת זמן ריצה.