Privilegierte Apps sind System-Apps, die sich in einem priv-app
Verzeichnis auf einer System-Image-Partition befinden. Die für Android-Versionen verwendeten Partitionen sind:
- Android 9 und höher:
/system, /product, /vendor
- Android 8.1 und niedriger:
/system
Historisch gesehen hatten Gerätehersteller kaum Kontrolle darüber, welche Signatur | Privilegierten Apps könnten privilegierte Berechtigungen gewährt werden. Ab Android 8.0 können Hersteller explizit privilegierte Berechtigungen in den XML-Systemkonfigurationsdateien im Verzeichnis /etc/permissions
erteilen. Ab Android 9 können Implementierer alle privilegierten Berechtigungen explizit erteilen oder verweigern. Wenn keine privilegierten Berechtigungen gewährt werden, startet das Gerät nicht.
Die Datei privapp-permissions.xml
kann Berechtigungen nur für privilegierte Apps auf derselben Partition erteilen oder verweigern. Wenn beispielsweise eine App auf der /product
Partition privilegierte Berechtigungen anfordert, kann die Anfrage nur durch eine privapp-permissions.xml
Datei auf /product
gewährt oder verweigert werden.
Fügen Sie eine Zulassungsliste hinzu
Berechtigungszulassungslisten für Apps können in einer einzelnen XML-Datei oder in mehreren XML-Dateien im Verzeichnis frameworks/base/etc/permissions
aufgeführt werden:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
Es gibt keine strengen Regeln für die Organisation von Inhalten. Geräteimplementierer können die Inhaltsstruktur bestimmen, solange alle Apps aus /system/priv-app
auf der Zulassungsliste stehen. Beispielsweise hat Google eine einzige Zulassungsliste für alle privilegierten Apps entwickelt. Wir empfehlen folgende Organisation:
- Berechtigungen für Apps, die bereits im AOSP-Baum (Android Open Source Project) enthalten sind, sind in
/etc/permissions/privapp-permissions-platform.xml
aufgeführt. - Verwenden Sie für andere Apps Dateien der Form
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Passen Sie eine Zulassungsliste an
AOSP umfasst eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann.
Wenn eine Berechtigung verweigert werden muss, bearbeiten Sie die XML-Datei so, dass anstelle eines permission
-Tags ein deny-permission
Tag verwendet wird. Zum Beispiel:
<!-- 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> ...
Finden Sie fehlende Berechtigungen
Um fehlende Berechtigungen beim Starten eines neuen Geräts zu finden, aktivieren Sie den Übergangsprotokollmodus:
ro.control_privapp_permissions=log
Verstöße werden in der Protokolldatei gemeldet. Es werden nichtprivilegierte Berechtigungen erteilt. Dadurch wird sichergestellt, dass das Gerät in einem funktionsfähigen Zustand bleibt und gleichzeitig die Liste der Verstöße bereitgestellt wird. Das Fehlermeldungsformat ist wie folgt:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Alle Verstöße müssen behoben werden, indem die fehlenden Berechtigungen zu den entsprechenden Zulassungslisten hinzugefügt werden. Beachten Sie Folgendes:
- Ab Android 9 verhindern Verstöße gegen privilegierte Berechtigungen den Start des Geräts. Stattdessen müssen Sie alle privilegierten Berechtigungen explizit zulassen oder verweigern.
- Bei Android 8.0 und niedriger werden fehlende Berechtigungen den betroffenen Apps nicht gewährt, obwohl sie sich im
priv-app
Pfad befinden.
Erzwingen Sie eine Zulassungsliste
Nachdem Sie Ihre Zulassungslisten erstellt haben, aktivieren Sie die Laufzeiterzwingung, indem Sie die Build-Eigenschaft ro.control_privapp_permissions=enforce
festlegen.
Die Zulassungsliste ist nur für Berechtigungen erforderlich, die von Apps mit package="android"
deklariert wurden. Der Eigenschaftsstatus ro.control_privapp_permissions
“ muss Abschnitt 9.1 „Berechtigungen“ im Compatibility Definition Document (CDD) entsprechen.