יכולות מאפשרות לתהליכים ב-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 לשירות, ולאחר מכן לבדוק שהשירות מקבל את היכולות הצפויות, כדי לבדוק את התכונה הזו בסביבת זמן ריצה.