فهرست مجازهای اجازه امتیازدار

برنامه‌های ممتاز برنامه‌های سیستمی هستند که در دایرکتوری priv-app در پارتیشن تصویر سیستم قرار دارند. پارتیشن‌های مورداستفاده برای نسخه‌های Android عبارتند از:

  • ‫Android 9 و بالاتر: /system, /product, /vendor
  • ‫Android 8.1 و پایین‌تر: /system

ازنظر تاریخی، سازندگان دستگاه کنترل کمی بر اینکه کدام اجازه‌های امضا | ممتاز می‌توانند به برنامه‌های ممتاز اعطا شوند داشتند. از Android 8.0 به بعد، سازندگان می‌توانند اجازه‌های ممتاز را به‌طور صریح در فایل‌های XML پیکربندی سیستم در دایرکتوری /etc/permissions اعطا کنند. از Android 9، پیاده‌سازان می‌توانند به‌طور صریح همه اجازه‌های ممتاز را اعطا یا رد کنند. اگر اجازه‌های ممتاز اعطا نشود، دستگاه راه‌اندازی نخواهد شد.

فایل privapp-permissions.xml فقط می‌تواند اجازه‌های برنامه‌های ممتاز در همان پارتیشن را اعطا یا رد کند. برای مثال، اگر برنامه‌ای در بخش /product درخواست اجازه‌های ممتاز کند، این درخواست فقط می‌تواند توسط فایل privapp-permissions.xml در /product اعطا یا رد شود.

افزودن فهرست مجازها

فهرست‌های مجاز اجازه برای برنامه‌ها می‌تواند در یک فایل XML یا در چندین فایل XML واقع در دایرکتوری /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 را ویرایش کنید تا به‌جای برچسب permission از برچسب deny-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 نسخه ۹ و بالاتر، نقض اجازه‌های ممتاز مانع از راه‌اندازی دستگاه می‌شود. درعوض، باید همه اجازه‌های ممتاز را به‌طور صریح مجاز یا رد کنید.
  • در Android 8.0 و نسخه‌های پایین‌تر، اجازه‌های ازدست‌رفته به برنامه‌های تحت‌تأثیر قرارگرفته اعطا نمی‌شود، حتی اگر در مسیر priv-app باشند.

اجرای فهرست مجازها

پس‌از ایجاد فهرست‌های مجاز، با تنظیم دارایی ساخت ro.control_privapp_permissions=enforce، اجرای زمان اجرا را فعال کنید.

قرار دادن در فهرست مجاز فقط برای اجازه‌هایی لازم است که توسط برنامه‌های دارای package="android" اعلام شده‌اند. ro.control_privapp_permissions وضعیت ویژگی باید از بخش ۹.۱ اجازه‌ها در «سند تعریف سازگاری» (CDD) پیروی کند.