القائمة المسموح بها للأذونات المميّزة

التطبيقات المزوّدة بأذونات مميّزة هي تطبيقات نظام تقع في دليل priv-app ضمن قسم صورة النظام. الأقسام المستخدَمة لإصدارات Android هي:

  • ‫Android 9 والإصدارات الأحدث: /system, /product, /vendor
  • الإصدار 8.1 من نظام التشغيل Android والإصدارات الأقدم: /system

في السابق، لم يكن لدى مصنّعي الأجهزة سوى القليل من التحكّم في أذونات التوقيع | الأذونات المميزة التي يمكن منحها للتطبيقات المميزة. بدءًا من الإصدار 8.0 من نظام التشغيل Android، يمكن للمصنّعين منح أذونات مميّزة بشكل صريح في ملفات XML الخاصة بإعدادات النظام في الدليل /etc/permissions. اعتبارًا من الإصدار 9 من نظام التشغيل Android، يمكن للمنفّذين منح جميع الأذونات المميزة أو رفضها بشكل صريح. في حال عدم منح أذونات مميّزة، لن يتم تشغيل الجهاز.

يمكن للملف privapp-permissions.xml منح أو رفض أذونات التطبيقات ذات الامتيازات على القسم نفسه فقط. على سبيل المثال، إذا طلب تطبيق في القسم /product أذونات مميزة، لا يمكن منح الطلب أو رفضه إلا من خلال ملف privapp-permissions.xml في /product.

إضافة قائمة مسموح بها

يمكن إدراج قوائم التطبيقات المسموح لها باستخدام الأذونات في ملف XML واحد أو في ملفات XML متعددة موجودة في الدليل /etc/permissions:

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

لا توجد قاعدة صارمة بشأن طريقة تنظيم المحتوى. يمكن لمصنّعي الأجهزة تحديد بنية المحتوى طالما أنّ جميع التطبيقات من /system/priv-app مدرَجة في القائمة المسموح بها. على سبيل المثال، أنشأت Google قائمة سماح واحدة لجميع التطبيقات ذات الامتيازات. ننصحك باتّباع التنظيم التالي:

  • يتم إدراج أذونات التطبيقات المضمّنة في شجرة مشروع Android مفتوح المصدر (AOSP) في /etc/permissions/privapp-permissions-platform.xml.
  • بالنسبة إلى التطبيقات الأخرى، استخدِم ملفات بالتنسيق /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

تخصيص قائمة مسموح بها

يتضمّن AOSP عملية تنفيذ لقائمة مسموح بها يمكن تخصيصها حسب الحاجة.

إذا كان يجب رفض أحد الأذونات، عدِّل ملف XML لاستخدام العلامة deny-permission بدلاً من العلامة permission. مثلاً:

<!-- This XML file declares which signature|privileged permissions to grant to
privileged apps that come with the platform -->

    <permissions>
      <privapp-permissions package="com.android.backupconfirm">
        <permission name="android.permission.BACKUP"/>
        <permission name="android.permission.CRYPT_KEEPER"/>
      </privapp-permissions>

      <privapp-permissions package="com.android.cellbroadcastreceiver">

        <!-- Don't allow the application to interact across users -->

        <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
        <permission name="android.permission.MANAGE_USERS"/>
        <permission name="android.permission.MODIFY_PHONE_STATE"/>
        <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
        <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
      </privapp-permissions>
    ...

العثور على الأذونات الناقصة

للعثور على الأذونات الناقصة عند بدء استخدام جهاز جديد، فعِّل وضع السجلّ الانتقالي:

ro.control_privapp_permissions=log

يتم الإبلاغ عن الانتهاكات في ملف السجلّ. يتم منح الأذونات غير المميزة. يضمن ذلك بقاء الجهاز في حالة صالحة للعمل مع استمرار توفير قائمة بالمخالفات. يكون تنسيق رسالة الخطأ على النحو التالي:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

يجب معالجة جميع المخالفات من خلال إضافة الأذونات الناقصة إلى قوائم السماح المناسبة. يُرجى العِلم أنّ:

  • في الإصدار 9 من نظام التشغيل Android والإصدارات الأحدث، تؤدي انتهاكات الأذونات المميّزة إلى منع الجهاز من البدء. بدلاً من ذلك، يجب السماح بجميع الأذونات المميزة أو رفضها بشكل صريح.
  • في الإصدار Android 8.0 والإصدارات الأقدم، لا يتم منح الأذونات الناقصة للتطبيقات المتأثرة على الرغم من أنّها تقع في المسار priv-app.

فرض قائمة مسموح بها

بعد إنشاء قوائم السماح، فعِّل التنفيذ في وقت التشغيل من خلال ضبط السمة ro.control_privapp_permissions=enforce في الإصدار.

لا تكون القائمة المسموح بها مطلوبة إلا للأذونات التي تحدّدها التطبيقات التي تحمل package="android". يجب أن تتوافق حالة السمة ro.control_privapp_permissions مع القسم 9.1 "الأذونات" في مستند تعريف التوافق (CDD).