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

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