قابلیتها به فرآیندهای لینوکس اجازه میدهند تا اکثر امتیازات روتمانند را کنار بگذارند و در عین حال زیرمجموعهای از امتیازاتی را که برای انجام عملکرد خود نیاز دارند، حفظ کنند. پیادهسازی اولیه قابلیتها، پردازشهای fork+exec'd را غیرممکن کرد تا قابلیتها را به ارث ببرند، مگر اینکه فایلهای در حال اجرا دارای قابلیتهای فایل پیکربندی شده باشند. قابلیتهای فایل، به نوبه خود، خطر امنیتی ایجاد میکنند، زیرا هر فرآیندی که فایلی را با قابلیتهای فایل اجرا میکند، میتواند این قابلیتها را به دست آورد.
قابلیتهای محیطی به سرویسهای سیستمی که توسط init راهاندازی شدهاند اجازه میدهند تا قابلیتها را در فایلهای .rc
خود پیکربندی کنند و به جای تقسیم کردن پیکربندی در فایل fs_config.c
، پیکربندی را در یک فایل واحد بیاورند. این بدان معنی است که برای هر سرویسی که توسط init راه اندازی می شود، می توانید از فایل .rc
مرتبط با سرویس برای پیکربندی قابلیت های آن سرویس استفاده کنید.
قابلیتهای محیطی مکانیسم ترجیحی برای تنظیم قابلیتها برای سرویسهای راهاندازی شده توسط init هستند (این روش همه جنبههای پیکربندی سرویس را در یک فایل .rc
نگه میدارد). توصیه می کنیم به جای پیکربندی قابلیت های سیستم فایل با استفاده از بخش caps در فایل های config.fs
از قابلیت های محیط استفاده کنید.
هنگام تنظیم قابلیتها برای سرویسهایی که توسط init راهاندازی نشدهاند ، به پیکربندی قابلیتهای سیستم فایل با استفاده از fs_config.c
ادامه دهید.
قابلیت های محیط را فعال کنید
برای فعال کردن قابلیت های محیط برای یک سرویس معین، از کلمه کلیدی capabilities
در init استفاده کنید. برای جزئیات زبان init فعلی، به init README.md مراجعه کنید.
به عنوان مثال، برای فعال کردن قابلیت های محیطی برای سرویس 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 در بکپورت شده است:
- 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:
اعتبار سنجی
تستهای واحد بیونیک شامل تستهای واحد برای قابلیتهای محیطی است. فراتر از آن، استفاده از کلمه کلیدی "قابلیت ها" در اندروید init برای یک سرویس و سپس بررسی اینکه آیا سرویس قابلیت های مورد انتظار را دارد، امکان تست زمان اجرا این ویژگی را فراهم می کند.