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

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

  • الروبوت 8.1 وأقل - /system
  • الروبوت 9 والتعليم العالي - /system, /product, /vendor

وخلال هذه الصفحة، /etc/permissions/priv-app يقرر إلى partition /etc/permissions/priv-app .

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

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

إضافة السماح

allowlists إذن للتطبيقات يمكن سرد في XML واحد أو في ملفات XML متعددة تقع في frameworks/base/etc/permissions دليل على النحو التالي:

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

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

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

توليد قوائم السماح

لتوليد allowlist تلقائيا لجميع التطبيقات المتاحة على صورة النظام، استخدم أداة سطر الأوامر AOSP في development/tools/privapp_permissions/privapp_permissions.py . لإنشاء النسخة الأولية من بالجهاز privapp-permissions.xml :

  1. بناء صورة النظام:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. تشغيل privapp_permissions.py النصي لتوليد privapp-permissions.xml الملف الذي يسرد كافة توقيع | أذونات مميزة المطلوبة لتكون allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    طباعة هذا أداة محتوى XML التي يمكن استخدامها إما على شكل ملف واحد، أو تقسيم إلى ملفات متعددة في /etc/permissions مسار الدليل. إذا كان الجهاز يتضمن بالفعل allowlists في /etc/permissions الدلائل، وأداة طباعة فقط الاختلافات (مثل التوقيع المفقودين | أذونات مميزة تحتاج إلى إضافة إلى allowlist). هذا مفيد أيضًا لأغراض التدقيق: عند إضافة إصدار جديد من التطبيق ، تكتشف الأداة الأذونات الإضافية المطلوبة.
  3. نسخ الملفات التي تم إنشاؤها لمناسبة /etc/permissions الدليل، حيث يقرأ نظام الملفات أثناء التمهيد.

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

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

افتراضيا، privapp_permissions.py النصي يولد الإخراج الذي يمنح تلقائيا أي تصريح من قبل تطبيق متميز المطلوبة. إذا كانت هناك أذونات يجب رفضها ، فقم بتحرير 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

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

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

فرض السماح

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