Privilegierte Apps sind System-Apps, die sich in einem priv-app
-Verzeichnis auf einer System-Image-Partition befinden. Die für Android-Releases verwendeten Partitionen sind:
- Android 9 und höher:
/system, /product, /vendor
- Android 8.1 und niedriger:
/system
Bisher hatten Gerätehersteller wenig Kontrolle darüber, welche Signatur- | Berechtigungen mit Berechtigungen privilegierten Apps gewährt werden konnten. Ab Android 8.0 können Hersteller privilegierte Berechtigungen explizit in den XML-Dateien der Systemkonfiguration im Verzeichnis /etc/permissions
gewähren. Ab Android 9 können Implementierer alle privilegierten Berechtigungen explizit gewähren oder verweigern. Wenn keine privilegierten Berechtigungen gewährt werden, wird das Gerät nicht gestartet.
Mit der Datei privapp-permissions.xml
können Berechtigungen nur für privilegierte Apps auf derselben Partition gewährt oder verweigert werden. Wenn beispielsweise eine App auf der Partition /product
privilegierte Berechtigungen anfordert, kann die Anfrage nur von einer privapp-permissions.xml
-Datei auf /product
gewährt oder abgelehnt werden.
Zulassungsliste hinzufügen
Zulassungslisten für Berechtigungen für Apps können in einer einzelnen XML-Datei oder in mehreren XML-Dateien im Verzeichnis /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ätehersteller können die Inhaltsstruktur festlegen, solange alle Apps von /system/priv-app
auf der Zulassungsliste stehen. Google hat beispielsweise eine einzige Zulassungsliste für alle privilegierten Apps entwickelt.
Wir empfehlen die folgende Organisation:
- Berechtigungen für Apps, die bereits im Android Open Source Project (AOSP)-Baum enthalten sind, werden in
/etc/permissions/privapp-permissions-platform.xml
aufgeführt. - Für andere Apps verwenden Sie Dateien im Format
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
Zulassungsliste anpassen
AOSP enthält eine Implementierung einer Zulassungsliste, die nach Bedarf angepasst werden kann.
Wenn eine Berechtigung verweigert werden muss, bearbeiten Sie das XML, sodass anstelle eines permission
-Tags ein deny-permission
-Tag verwendet wird. 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> ...
Fehlende Berechtigungen finden
Wenn Sie beim Starten eines neuen Geräts fehlende Berechtigungen ermitteln möchten, aktivieren Sie den Übergangslogmodus:
ro.control_privapp_permissions=log
Verstöße werden in der Protokolldatei gemeldet. Nicht privilegierte Berechtigungen werden gewährt. So bleibt das Gerät funktionsfähig und Sie erhalten trotzdem die Liste der Verstöße. Die Fehlermeldung hat folgendes Format:
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 den entsprechenden Zulassungslisten hinzugefügt werden. Hinweis:
- Bei Android 9 und höher verhindern Verstöße gegen privilegierte Berechtigungen, dass das Gerät gestartet wird. Stattdessen müssen Sie alle privilegierten Berechtigungen explizit zulassen oder ablehnen.
- Bei Android 8.0 und niedriger werden fehlende Berechtigungen den betroffenen Apps nicht gewährt, obwohl sie sich im Pfad
priv-app
befinden.
Zulassungsliste erzwingen
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 werden. Der Status des Attributs ro.control_privapp_permissions
muss Abschnitt 9.1 Berechtigungen des Dokuments zur Kompatibilitätsdefinition (Compatibility Definition Document, CDD) entsprechen.