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