قائمة أذونات الامتياز

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

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

تاريخيًا، لم يكن لمصنعي الأجهزة سيطرة تذكر على التوقيع | يمكن منح الأذونات المميزة للتطبيقات المميزة. بدءًا من Android 8.0، يمكن للشركات المصنعة منح أذونات مميزة بشكل صريح في ملفات XML لتكوين النظام في دليل /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 Open Source Project (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

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

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

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

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

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