لیست مجاز مجوزهای ممتاز

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

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

از لحاظ تاریخی، سازندگان دستگاه کنترل کمی بر روی امضای | مجوزهای ممتاز را می توان به برنامه های ممتاز اعطا کرد. با شروع Android 8.0، سازندگان می توانند به صراحت مجوزهای ممتازی را در فایل های XML پیکربندی سیستم در فهرست /etc/permissions اعطا کنند. از اندروید 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 در لیست مجاز باشند. به عنوان مثال، گوگل یک لیست مجاز واحد برای همه برنامه های دارای امتیاز ایجاد کرده است. ما سازمان زیر را توصیه می کنیم:

  • مجوزهای برنامه‌هایی که قبلاً در درخت پروژه منبع باز 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 9 و بالاتر، نقض مجوزهای ممتاز مانع از راه اندازی دستگاه می شود. در عوض، شما باید صراحتاً اجازه دهید یا تمام مجوزهای ممتاز را رد کنید.
  • Android 8.0 و پایین تر، مجوزهای از دست رفته علیرغم اینکه در مسیر priv-app قرار دارند، به برنامه های آسیب دیده اعطا نمی شوند.

یک لیست مجاز را اجرا کنید

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

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