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

אפליקציות בחתימה של פלטפורמה הן אפליקציות שיש להן את אותו אישור חתימה (או אישור תואם) שיש לחבילת הפלטפורמה (android). אפליקציה בחתימה של פלטפורמה יכולה להיות אפליקציית מערכת (שנמצאת במחיצה של קובץ האימג' של המערכת) או אפליקציה שאינה אפליקציית מערכת. הרשאות חתימה של פלטפורמה הן הרשאות שמוגדרות על ידי חבילת הפלטפורמה ויש להן גם את רמת ההגנה signature. גרסאות build שניתן לנפות באגים הן גרסאות build שבהן android.os.Build.isDebuggable() מחזירה את הערך true, כמו גרסאות build מסוג userdebug או eng.

בעבר, ליצרני המכשירים הייתה שליטה מועטה על ההרשאות signature של הפלטפורמה שאפשר להעניק לאפליקציות לא מערכתיות שחתומות על ידי הפלטפורמה. החל מ-Android 15, יצרנים יכולים להעניק הרשאות חתימה על פלטפורמה באופן מפורש בקובצי ה-XML של הגדרות המערכת בספרייה /etc/permissions. אם אפליקציה לא מערכתית עם חתימה בפלטפורמה לא מתווספת לרשימת ההיתרים של הרשאת חתימה בפלטפורמה, ההרשאה הזו פועלת כאילו האפליקציה לא חתומה בפלטפורמה בגרסאות build שלא ניתן לנפות בהן באגים.

הוספת רשימת היתרים

אפשר לרשום רשימות של הרשאות לאפליקציות בקובץ XML יחיד או בכמה קובצי XML שנמצאים בספרייה frameworks/base/etc/permissions:

  • /etc/permissions/signature-permissions-OEM_NAME.xml
  • /etc/permissions/signature-permissions-DEVICE_NAME.xml

אין כלל קפדני לגבי אופן הארגון של התוכן. מפתחי המכשירים יכולים לקבוע את מבנה התוכן, כל עוד האפליקציות המתאימות וההרשאות שלהן מתווספות לרשימת ההיתרים.

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

AOSP כולל הטמעה של רשימת היתרים שאפשר להתאים אישית לפי הצורך, בדומה לרשימת ההיתרים להרשאות מותאמות. לדוגמה:

<!--
  ~ This XML file declares which platform signature permissions to grant to
  ~ platform signed nonsystem apps.
  -->

<permissions>
    <signature-permissions package="com.android.example">
        <permission name="android.permission.READ_DEVICE_CONFIG"/>
        ...
    </signature-permissions>
    ...
</permissions>

איתור הרשאות חסרות

כדי למצוא הרשאות חסרות, מתקינים את האפליקציה החתומה בפלטפורמה ובודקים ביומני המכשיר אם יש הודעות אזהרה בפורמט הבא:

Signature permission {PERMISSION_NAME} for package {PACKAGE_NAME} ({PACKAGE_PATH}) not in signature permission allowlist

המערכת עדיין יכולה להעניק את ההרשאה לגרסאות build שניתן לנפות באגים בהן, אבל לא לגרסאות build שלא ניתן לנפות בהן באגים, כמו גרסאות build מסוג user.