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

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

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

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

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

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

يمكن إدراج قوائم الإذن المسموح بها للتطبيقات في ملف XML واحد أو في ملفات XML متعددة في الدليل frameworks/base/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 والإصدارات الأحدث، تؤدي انتهاكات الأذونات المميّزة إلى منع الجهاز من التشغيل. وبدلاً من ذلك، عليك السماح صراحةً بجميع الأذونات المميّزة أو رفضها.
  • في الإصدار 8.0 من نظام التشغيل Android والإصدارات الأقدم، لا يتم منح الأذونات غير المتوفّرة للتطبيقات المتأثرة على الرغم من أنّها في مسار priv-app.

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

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

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