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