قائمة السماح بامتياز

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

  • Android 8.1 والإصدارات الأقدم - /system
  • Android 9 والإصدارات الأحدث - /system, /product, /vendor

في جميع أنحاء هذه الصفحة ، /etc/permissions/priv-app partition /etc/permissions/priv-app .

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

يمكن فقط للملف privapp-permissions.xml .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 قائمة سماح واحدة لجميع التطبيقات المميزة التي طورتها Google ، وتوصي بالمؤسسة التالية:

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

تخصيص اللوائح

يتضمن AOSP تنفيذ قائمة السماح التي يمكن تخصيصها حسب الحاجة. أذونات التطبيقات المضمنة في AOSP مسموح بها بالفعل في /etc/permissions/privapp-permissions-platform.xml .

إذا كانت هناك أذونات يجب رفضها ، فقم بتحرير XML لاستخدام علامة "رفض الإذن" بدلاً من علامة "إذن". مثال:

<!-- 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

يجب معالجة جميع الانتهاكات عن طريق إضافة الأذونات المفقودة إلى قوائم السماح المناسبة.

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

فرض السماح

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