قابلیتها به فرآیندهای لینوکس اجازه میدهند تا اکثر امتیازات ریشه مانند را کنار بگذارند، در حالی که زیرمجموعهای از امتیازاتی را که برای انجام عملکرد خود نیاز دارند، حفظ میکنند. پیادهسازی اولیه قابلیتها، به فرآیندهای fork+exec'd اجازه نمیداد تا قابلیتها را به ارث ببرند، مگر اینکه فایلهای در حال اجرا، قابلیتهای فایل را پیکربندی کرده باشند. قابلیتهای فایل، به نوبه خود، یک خطر امنیتی ایجاد میکنند، زیرا هر فرآیندی که فایلی را با قابلیتهای فایل اجرا میکند، میتواند آن قابلیتها را به دست آورد.
قابلیتهای محیطی به سرویسهای سیستمی که توسط 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پیادهسازی مرجع
پیادهسازی مرجع، هسته رایج اندروید https://android.googlesource.com/kernel/common/ است.
وصلههای مورد نیاز
وصلههای مورد نیاز به تمام شاخههای کرنل رایج اندروید مربوطه، بکپورت شدهاند.
وصله اصلی قابلیتهای محیطی https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 به آدرس زیر پورت مجدد شده است:
- اندروید ۳.۱۸:
- اندروید ۴.۱:
یک اصلاحیه امنیتی کوچک https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 به آدرس زیر منتقل شده است:
- اندروید ۳.۱۸:
- اندروید ۴.۱:
اعتبارسنجی
تستهای واحد بیونیک شامل تستهای واحد برای قابلیتهای محیطی هستند. فراتر از آن، استفاده از کلمه کلیدی "capabilities" در init اندروید برای یک سرویس، و سپس بررسی اینکه آیا سرویس قابلیتهای مورد انتظار را دریافت میکند یا خیر، امکان تست زمان اجرا این ویژگی را فراهم میکند.