אפליקציות מועדפות הן אפליקציות מערכת הממוקמות בספריית priv-app
באחת ממחיצות תמונת המערכת. המחיצות המשמשות עבור מהדורות אנדרואיד הן
- אנדרואיד 8.1 ומטה -
/system
- אנדרואיד 9 ומעלה -
/system, /product, /vendor
בכל דף זה, /etc/permissions/priv-app
נפתר partition /etc/permissions/priv-app
.
היסטורית, ליצרני מכשירים הייתה שליטה מועטה על אילו הרשאות חתימה ניתן להעניק לאפליקציות מורשות. החל מ-Android 8.0, היצרנים חייבים להעניק הרשאות מורשות במפורש בקבצי XML של תצורת המערכת בספריית /etc/permissions
. החל מ-Android 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 Open Source Project (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/ /etc/permissions/privapp-permissions-platform.xml
-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
יש לטפל בכל ההפרות על ידי הוספת ההרשאות החסרות לרשימות ההיתרים המתאימות.
- ב-Android 8.0 ומטה, האפליקציות המושפעות אינן מקבלות את ההרשאות החסרות גם אם הן נמצאות בנתיב
priv-app
. - ב-Android 9 ומעלה, הפרות (של הרשאות מורשות) אומרות שהמכשיר לא מאתחל . עליך לאפשר או לדחות במפורש את כל ההרשאות המורשות
אכיפת רשימות ההיתרים
לאחר התקנת רשימות ההיתרים, הפעל אכיפת זמן ריצה על ידי הגדרת מאפיין ה-build ro.control_privapp_permissions=enforce
.