Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

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

التطبيقات المميزة هي تطبيقات النظام الموجودة في دليل 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 منح أو رفض الأذونات للتطبيقات المميزة على نفس القسم. على سبيل المثال ، إذا طلب أحد التطبيقات الموجودة في قسم /vendor أذونات مميزة ، فلا يمكن منح الطلب أو رفضه إلا من خلال ملف privapp-permissions.xml أيضًا على /vendor .

إضافة السماح

يمكن إدراج قوائم السماح بالتطبيقات في ملف 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 في development/tools/privapp_permissions/privapp_permissions.py . لإنشاء إصدار أولي من privapp-permissions.xml الخاصة privapp-permissions.xml :

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

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

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

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

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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 .