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

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

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

در سراسر این صفحه، /etc/permissions/priv-app به partition /etc/permissions/priv-app تصمیم می گیرد.

از لحاظ تاریخی، سازندگان دستگاه کنترل کمی بر این داشتند که کدام مجوزهای امضایی می‌توانند به برنامه‌های ممتاز اعطا شوند. با شروع اندروید 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 در لیست مجاز باشند. به عنوان مثال، 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 شامل اجرای لیست مجاز است که می تواند در صورت نیاز سفارشی شود. مجوزهای برنامه‌های موجود در AOSP قبلاً در /etc/permissions/privapp-permissions-platform.xml .

اگر مجوزهایی وجود دارد که باید رد شوند، 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 و بالاتر، نقض (مجوزهای ممتاز ) به این معنی است که دستگاه بوت نمی‌شود . شما باید صراحتاً همه مجوزهای ممتاز را مجاز یا رد کنید

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

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