הרשאות של Android

ההרשאות ב-Android מספקות אמצעי בקרה שמגבירים את המודעות של המשתמשים ומגבילים את הגישה של האפליקציה לנתונים רגישים. הגדרת הרשאות ב-Android 8.0 ובגרסאות קודמות כוללת הוספה לרשימת ההיתרים. בלי זה, אפליקציות עם הרשאות מיוחדות מושבתות, גם אם הן בנתיב priv-app. ב-Android מגרסה 9 ואילך, מכשיר שמנסה להשתמש באפליקציות שלא הוכנסו לרשימת ההיתרים בצורה תקינה לא יופעל.

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

ההגנות המוגברות מפני אפליקציות שעלולות להזיק (PHAs) משפרות את:

  • שקיפות לגבי התנהגות של אפליקציות שעלולות להזיק.
  • שליטה של המשתמשים בהתנהגות האפליקציה.
  • למפתחי האפליקציות יש שיקול דעת לגבי השימוש בנתונים פרטיים, שמוגנים על ידי הרשאות.

התקנת חבילות והרשאות

ב-Android מגרסה 9 ומטה, הפונקציות של התקנת חבילות ושליטה בהרשאות נכללו בחבילה PackageInstaller (//packages/apps/PackageInstaller). ב-Android מגרסה 10 ואילך, הפונקציה של שליטה בהרשאות נמצאת בחבילה נפרדת, PermissionController (//packages/apps/PermissionController). איור 1 מראה איפה נמצאות שתי החבילות ב-Android מגרסה 10.

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

איור 1. פונקציות של התקנת חבילות ושליטה בהרשאות ב-Android 10

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

ב-Android 6.0 ואילך, אפליקציות מבקשות גישה להרשאות מסוכנות בזמן הריצה. ב-Android 10 נוספו הרשאות זמן ריצה לזיהוי פעילות (AR), שגורמות למשתמש לשנות או לאשר הרשאות מסוכנות.

ב-Android 8.0 נדרש להוסיף במפורש לרשימת ההיתרים אפליקציות עם הרשאות מיוחדות בקובצי ה-XML של הגדרות המערכת בספרייה /etc/permissions. ב-Android מגרסה 9 ואילך, צריך להוסיף לרשימת ההיתרים הרשאות מיוחדות, אחרת אי אפשר להפעיל את המכשיר.

כדי להגביל את החשיפה של ממשקי API פנימיים ולמנוע מאפליקציות לגשת בטעות לספריות של הפלטפורמה, ב-Android 7.0 הוצגו מרחבי שמות לספריות Native. כך ספריות המערכת מופרדות מספריות האפליקציות, ויצרני המכשירים יכולים להוסיף ספריות מקומיות משלהם.

החל מ-Android 10, אפליקציות חייבות לקבל גם הרשאות חתימה וגם הסכמה מהמשתמש כדי לגשת לתוכן המסך של המכשיר. אפליקציות עם הרשאות מיוחדות שמסתמכות על הפונקציונליות של צילום מסך שקט, צריכות להשתמש במקום זאת במחלקה MediaProjection.

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

שקיפות ופרטיות

ב-Android מגרסה 6.0 ואילך, כתובת MAC של מכשיר מהיצרן מוגנת מפני גישה של ספקי שירותי Wi-Fi ומנתחי חבילות. הגבלות נוספות החל מ-Android 10 מגבילות את הגישה של אפליקציות למזהי מכשיר (ID) שלא ניתן לשנות, אלא אם הן נכללות ברשימת ההיתרים להרשאות מיוחדות. (בקטע קישוריות יש דיון בנושא מזהי מכשירים, כי זה משפיע על ספקי הסלולר).

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

הגדרת הרשאות לתכונות אחרות שקשורות לשקיפות ולפרטיות החל מ-Android 10

הגדרות יעילות יותר

הגדרות ההרשאות פשוטות יותר ב-Android 6.0 ומעלה.

  • Ambient capabilities לשירותים שהופעלו על ידי init שומרת את כל ההיבטים של הגדרת השירות בקובץ .rc יחיד. כשמגדירים יכולות לשירותים שלא מופעלים על ידי init, צריך להגדיר את היכולות של מערכת הקבצים באמצעות fs_config.c.
  • ב-Android מגרסה 7.x ומגרסאות קודמות, מנגנון מזהי Android ‏ (AID) מורחב באמצעות קובץ android_filesystem_config.h ספציפי למכשיר כדי לציין יכולות של מערכת קבצים ו/או מזהי Android מותאמים אישית של יצרן המכשיר. ‫Android מגרסה 8.0 ואילך תומך בשיטה חדשה להרחבת היכולות של מערכת הקבצים.
  • ב-Android 8.0, הטיפול בפקודות USB הועבר מסקריפטים ספציפיים למכשיר (תחליף לשכבות HAL) אל USB daemon מקורי.init ממשק USB HAL חייב להיות מוטמע בכל מכשיר שמופעל ב-Android מגרסה 8.0 ומעלה.