Privilegierte Apps sind System-Apps, die sich in einem priv-app
-Verzeichnis auf einem
System-Image-Partition. 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 wenig Kontrolle darüber,
Unterschrift | privilegierten Berechtigungen
privilegierten Apps. Ab Android 8.0 können Hersteller explizit
privilegierte Berechtigungen in den Systemkonfigurations-XML-Dateien in der
/etc/permissions
-Verzeichnis. Ab Android 9 können Implementierer
alle privilegierten Berechtigungen explizit gewähren oder verweigern. Wenn keine privilegierten Berechtigungen gewährt werden,
Das Gerät startet nicht.
In der Datei privapp-permissions.xml
können nur Berechtigungen
Berechtigungen für privilegierte Apps in derselben Partition Wenn beispielsweise
eine App in der Partition /product
privilegierte Berechtigungen anfordert,
Die Anfrage kann nur von einem privapp-permissions.xml
gewährt oder abgelehnt werden.
Datei auf /product
.
Zulassungsliste hinzufügen
Berechtigungs-Zulassungslisten für Apps können in einer einzelnen XML-Datei oder in mehreren
XML-Dateien, die sich im Verzeichnis frameworks/base/etc/permissions
befinden:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Es gibt keine strenge Regel zur Strukturierung von Inhalten. Geräteimplementierungen können
Inhaltsstruktur festlegen, 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 die folgende Organisation:
- Berechtigungen für Apps, die bereits in der
Open-Source-Projekt von Android (AOSP)
Baum sind in
/etc/permissions/privapp-permissions-platform.xml
aufgelistet. - Verwenden Sie für andere Apps Dateien des Formulars,
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Zulassungsliste anpassen
AOSP umfasst eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann.
Wenn eine Berechtigung verweigert werden muss, bearbeiten Sie die XML-Datei so, dass sie ein deny-permission
-Tag verwendet.
anstelle eines permission
-Tags. 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 suchen
Aktivieren Sie den Transitional-Log-Modus, um fehlende Berechtigungen beim Starten eines neuen Geräts zu finden:
ro.control_privapp_permissions=log
Verstöße werden in der Protokolldatei gemeldet. Nicht privilegierte Berechtigungen werden gewährt. Auf diese Weise wird sichergestellt, dass das Gerät in einem funktionsfähigen Zustand bleibt und weiterhin die Liste der Verstöße. Das Format der Fehlermeldungen sieht so aus:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Alle Verstöße müssen behoben werden, indem Sie die fehlenden Berechtigungen den entsprechenden Zulassungslisten hinzufügen. Beachten Sie Folgendes in:
- Bei Android 9 und höher wird durch Verstöße gegen privilegierte Berechtigungen das Gerät daran gehindert, beginnt. Stattdessen müssen Sie alle privilegierten Berechtigungen explizit zulassen oder ablehnen.
- Android 8.0 und niedriger werden den betroffenen Apps
keine Berechtigungen gewährt, auch wenn
im Pfad
priv-app
enthalten.
Zulassungsliste erzwingen
Aktivieren Sie nach dem Erstellen der Zulassungslisten die Laufzeiterzwingung, indem Sie den Build festlegen
Property ro.control_privapp_permissions=enforce
.
Eine Zulassungsliste ist nur für Berechtigungen erforderlich, die von Apps mit
package="android"
Das ro.control_privapp_permissions
Property-Status muss den
Abschnitt 9.1 Berechtigungen
im Compatibility Definition Document (CDD).