برنامههای دارای امتیاز، برنامههای سیستمی هستند که در فهرست 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
، اجرای زمان اجرا را فعال کنید.