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

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