Berechtigte Apps sind System-Apps, die sich in einem priv-app
-Verzeichnis auf einer System-Image-Partition befinden. Für Android-Releases werden folgende Partitionen verwendet:
- Android 9 und höher:
/system, /product, /vendor
- Android 8.1 und niedriger:
/system
Bisher hatten Gerätehersteller nur wenig Kontrolle darüber, welche signature | privileged-Berechtigungen für privilegierte Apps gewährt werden konnten. Ab Android 8.0 können Hersteller in den XML-Dateien der Systemkonfiguration im Verzeichnis /etc/permissions
explizit Berechtigungen gewähren. Ab Android 9 können Implementierer alle Berechtigungen mit erhöhten Befugnissen explizit gewähren oder verweigern. Wenn keine Berechtigungen gewährt werden, kann das Gerät nicht gestartet werden.
Über die Datei privapp-permissions.xml
können nur Berechtigungen für privilegierte Apps auf derselben Partition gewährt oder abgelehnt werden. Wenn beispielsweise eine App auf der Partition /product
privilegierte Berechtigungen anfordert, kann die Anfrage nur von einer privapp-permissions.xml
-Datei auf /product
genehmigt oder abgelehnt werden.
Zulassungsliste hinzufügen
Berechtigungs-Zulassungslisten 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
Für die Organisation von Inhalten gibt es keine strikte Regel. Geräteimplementierer 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 folgenden Organisationen:
- Berechtigungen für Apps, die bereits im Stammbaum des Android Open Source Project (AOSP) enthalten sind, sind in
/etc/permissions/privapp-permissions-platform.xml
aufgeführt. - Verwenden Sie für andere Apps Dateien vom Typ
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
Zulassungsliste anpassen
AOSP enthält eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann.
Wenn eine Berechtigung abgelehnt werden muss, bearbeiten Sie die XML-Datei so, dass 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 finden möchten, aktivieren Sie den Übergangsprotokollmodus:
ro.control_privapp_permissions=log
Verstöße werden in der Protokolldatei gemeldet. Nicht privilegierte Berechtigungen werden gewährt. So bleibt das Gerät betriebsbereit und Sie erhalten weiterhin die Liste der Verstöße. Das Format der Fehlermeldung ist:
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. Beachten Sie Folgendes:
- Unter Android 9 und höher verhindern Verstöße gegen Berechtigungen für erhöhte Zugriffsrechte das Starten des Geräts. Stattdessen müssen Sie alle Berechtigungen mit erhöhten Berechtigungen explizit zulassen oder ablehnen.
- Unter Android 8.0 und niedriger werden den betroffenen Apps fehlende Berechtigungen nicht gewährt, obwohl sie sich im Pfad
priv-app
befinden.
Zulassungsliste erzwingen
Nachdem Sie Ihre Zulassungslisten erstellt haben, aktivieren Sie die Laufzeitdurchsetzung, indem Sie die Build-Eigenschaft ro.control_privapp_permissions=enforce
festlegen.
Eine Zulassungsliste ist nur für Berechtigungen erforderlich, die von Apps mit package="android"
deklariert wurden. Der Status des Attributs ro.control_privapp_permissions
muss Abschnitt 9.1 Berechtigungen im CDD (Compatibility Definition Document) entsprechen.