القدرات المحيطة

تسمح القدرات لعمليات Linux بإسقاط معظم الامتيازات المشابهة للجذر مع الاحتفاظ بالمجموعة الفرعية من الامتيازات التي تتطلبها لأداء وظيفتها. التنفيذ الأصلي للإمكانيات جعل من المستحيل على عمليات fork+exec'd أن ترث القدرات ما لم يتم تكوين إمكانات الملف في الملفات التي يتم تنفيذها. تمثل إمكانات الملف بدورها خطرًا أمنيًا نظرًا لأن أي عملية تنفذ ملفًا بقدرات ملف ستكون قادرة على اكتساب هذه الإمكانات.

تسمح القدرات المحيطة لخدمات النظام التي يتم تشغيلها بواسطة init بتكوين الإمكانات في ملفات .rc الخاصة بها، مما يؤدي إلى جلب التكوين إلى ملف واحد بدلاً من تقسيم التكوين في ملف fs_config.c . وهذا يعني أنه بالنسبة لأي خدمة يتم تشغيلها بواسطة init، يمكنك استخدام ملف .rc المرتبط بالخدمة لتكوين إمكانيات تلك الخدمة.

القدرات المحيطة هي الآلية المفضلة لتعيين قدرات الخدمات التي يتم تشغيلها بواسطة init (تحتفظ هذه الطريقة بجميع جوانب تكوين الخدمة في ملف .rc واحد). نوصي باستخدام الإمكانات المحيطة بدلاً من تكوين إمكانيات نظام الملفات باستخدام قسم الأحرف الاستهلالية في ملفات config.fs .

عند تعيين إمكانيات للخدمات التي لم يتم تشغيلها بواسطة init ، استمر في تكوين إمكانيات نظام الملفات باستخدام fs_config.c .

تمكين القدرات المحيطة

لتمكين القدرات المحيطة لخدمة معينة، استخدم الكلمة الأساسية capabilities في الحرف الأول. للحصول على تفاصيل لغة 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/

التصحيحات المطلوبة

تم نقل التصحيحات المطلوبة إلى جميع فروع kernel الشائعة لنظام 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 في:

تصديق

تتضمن اختبارات الوحدة الإلكترونية اختبارات الوحدة للقدرات المحيطة. علاوة على ذلك، فإن استخدام الكلمة الأساسية "القدرات" في Android init لخدمة ما، ثم التحقق من حصول الخدمة على الإمكانات المتوقعة من شأنه أن يسمح باختبار هذه الميزة في وقت التشغيل.