قابلیت‌های محیطی

قابلیت‌ها به فرایندهای Linux اجازه می‌دهد که اکثر امتیازات شبیه ریشه را حذف کنند و درعین‌حال زیرمجموعه امتیازاتی را که برای انجام عملکردشان نیاز دارند حفظ کنند. پیاده‌سازی اصلی قابلیت‌ها باعث می‌شد که فرایندهای fork+exec نتوانند قابلیت‌ها را به ارث ببرند، مگر اینکه فایل‌های درحال اجرا قابلیت‌های فایل پیکربندی‌شده داشته باشند. قابلیت‌های فایل، به‌نوبه خود، خطر امنیتی ایجاد می‌کنند زیرا هر فرایندی که فایلی را با قابلیت‌های فایل اجرا می‌کند می‌تواند آن قابلیت‌ها را به‌دست آورد.

قابلیت‌های محیطی به خدمات سیستم که توسط 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

پیاده‌سازی مرجع

پیاده‌سازی مرجع هسته مشترک Android است https://android.googlesource.com/kernel/common/

وصله‌های الزامی

وصله‌های موردنیاز به همه شاخه‌های مرتبط هسته مشترک Android برگردانده شده است.

وصله اصلی قابلیت‌های محیطی 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 در موارد زیر اعمال شده است:

اعتبارسنجی

آزمون‌های واحد Bionic شامل آزمون‌های واحد برای قابلیت‌های محیطی است. علاوه‌براین، استفاده از کلیدواژه «قابلیت‌ها» در init Android برای یک سرویس و سپس بررسی اینکه سرویس قابلیت‌های موردانتظار را دریافت می‌کند، امکان آزمایش زمان اجرای این ویژگی را فراهم می‌کند.