רישום הרשאות מורשות

אפליקציות מועדפות הן אפליקציות מערכת הממוקמות בספריית 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 .