Aplikacje z podwyższonymi uprawnieniami to aplikacje systemowe znajdujące się w katalogu priv-app
w
partycji obrazu systemu. Partycje używane w przypadku wersji Androida to:
- Android 9 lub nowszy:
/system, /product, /vendor
- Android 8.1 lub starszy:
/system
Dawniej producenci urządzeń nie mieli wpływu na to,
podpis | użytkownik z podwyższonymi uprawnieniami
aplikacji z podwyższonymi uprawnieniami. Począwszy od Androida 8.0, producenci mogą wprost przyznać
z podwyższonymi uprawnieniami w plikach XML konfiguracji systemu w pliku
Katalog /etc/permissions
. Od Androida 9 narzędzia implementujące mogą
wyraźnie przyznać lub odrzucić wszystkie uprawnienia z podwyższonymi uprawnieniami. Jeśli nie przyznano uprzywilejowanych uprawnień,
urządzenie się nie uruchomi.
Plik privapp-permissions.xml
może tylko przyznawać i odrzucać uprawnienia
aplikacji z podwyższonymi uprawnieniami na tej samej partycji. Na przykład, jeśli
aplikacja na partycji /product
prosi o uprawnienia uprzywilejowane,
tylko privapp-permissions.xml
może zaakceptować lub odrzucić prośbę
/product
.
Dodaj listę dozwolonych
Listy dozwolonych uprawnień aplikacji mogą być wymienione w pojedynczym pliku XML lub w wielu
Pliki XML w katalogu frameworks/base/etc/permissions
:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Organizowanie treści nie obejmuje żadnej ścisłej reguły. Implementacje kodu na urządzeniu
Określ strukturę treści, dopóki wszystkie aplikacje z /system/priv-app
znajdują się na liście dozwolonych. Na przykład firma Google opracowała jedną listę dozwolonych dla wszystkich aplikacji z podwyższonymi uprawnieniami.
Zalecamy tę organizację:
- Uprawnienia aplikacji uwzględnionych już w tabeli
Projekt Android Open Source Project (AOSP)
drzewo znajduje się na liście
/etc/permissions/privapp-permissions-platform.xml
. - W przypadku innych aplikacji użyj plików formularza,
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Dostosowywanie listy dozwolonych
AOSP zawiera wdrożenie z listy dozwolonych, które można dostosować w razie potrzeby.
Jeśli musisz odmówić przyznania uprawnień, zmodyfikuj plik XML, tak aby używał tagu deny-permission
.
zamiast tagu permission
. Na przykład:
<!-- 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> ...
Znajdowanie brakujących uprawnień
Aby znaleźć brakujące uprawnienia podczas uruchamiania nowego urządzenia, włącz tryb dziennika przejściowy:
ro.control_privapp_permissions=log
Naruszenia są zgłaszane w pliku dziennika. Przyznano uprawnienia bez podwyższonych uprawnień. Dzięki temu urządzenie pozostanie w stanie działania, a jednocześnie będzie wyświetlana lista naruszenia zasad. Komunikat o błędzie ma taki format:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Wszystkie naruszenia należy rozwiązać, dodając brakujące uprawnienia do odpowiednich list dozwolonych. Pamiętaj, że w sekcji:
- w Androidzie 9 i nowszych, naruszenia uprzywilejowanych uprawnień uniemożliwiają urządzeniu od uruchomienia. Zamiast tego musisz wyraźnie przyznać lub odrzucić wszystkie uprzywilejowane uprawnienia.
- Android 8.0 i starsze wersje nie są przyznawane aplikacjom, których dotyczy problem, pomimo
na ścieżce
priv-app
.
Wymuszanie listy dozwolonych
Po utworzeniu list dozwolonych włącz wymuszanie w czasie działania przez ustawienie kompilacji
usłudze ro.control_privapp_permissions=enforce
.
Lista dozwolonych jest wymagana tylko w przypadku uprawnień zadeklarowanych przez aplikacje –
package="android"
ro.control_privapp_permissions
stan właściwości musi być zgodny z
Sekcja 9.1 Uprawnienia
w dokumencie Compatibility Definition Document (CDD).