برنامههای ممتاز برنامههای سیستمی هستند که در دایرکتوری 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) پیروی کند.