Aplikacje uprzywilejowane to aplikacje systemowe, które znajdują się w katalogu priv-app
na jednej z partycji obrazu systemu. Partycje używane w wydaniach Androida to
- Android 8.1 i niższy -
/system
- Android 9 i nowszy -
/system, /product, /vendor
Na tej stronie /etc/permissions/priv-app
rozpoznaje partition /etc/permissions/priv-app
.
Dawniej producenci urządzeń mieli niewielką kontrolę nad tym, które uprawnienia z podpisem|uprzywilejowane mogą być przyznawane uprzywilejowanym aplikacjom. Począwszy od systemu Android 8.0 producenci muszą jawnie udzielić uprzywilejowanych uprawnień w plikach XML konfiguracji systemu w katalogu /etc/permissions
. Począwszy od Androida 9, implementatorzy muszą jawnie przyznać lub odmówić wszystkich uprzywilejowanych uprawnień, w przeciwnym razie urządzenie nie uruchomi się.
Plik privapp-permissions.xml
może nadawać lub odmawiać uprawnień tylko uprzywilejowanym aplikacjom na tej samej partycji. Na przykład, jeśli aplikacja na partycji /product
żąda uprawnień uprzywilejowanych, żądanie można udzielić lub odrzucić tylko za pomocą pliku privapp-permissions.xml
, który również znajduje się w /product
.
Dodawanie list dozwolonych
Listy dozwolonych uprawnień dla aplikacji mogą być wymienione w pojedynczym pliku XML lub w wielu plikach XML znajdujących się w katalogu frameworks/base/etc/permissions
w następujący sposób:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
Nie ma ścisłych zasad porządkowania treści. Realizatorzy urządzeń mogą określić strukturę treści, o ile wszystkie aplikacje z /system/priv-app
są dozwolone na liście. Na przykład Google ma jedną listę dozwolonych dla wszystkich uprzywilejowanych aplikacji opracowanych przez Google i zaleca następującą organizację:
- Uprawnienia dla aplikacji, które są już uwzględnione w drzewie Android Open Source Project (AOSP) są wymienione w
/etc/permissions/privapp-permissions-platform.xml
. - Uprawnienia dla aplikacji Google są wymienione w
/etc/permissions/privapp-permissions-google.xml
. - W przypadku innych aplikacji użyj plików w postaci:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Dostosowywanie list dozwolonych
AOSP obejmuje implementację listy dozwolonych, którą można dostosować w razie potrzeby. Uprawnienia dla aplikacji zawartych w AOSP są już dozwolone w /etc/permissions/privapp-permissions-platform.xml
.
Jeśli istnieją uprawnienia, których należy odmówić, edytuj kod XML, aby użyć tagu „odmowa uprawnień” zamiast tagu „uprawnienia”. 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ściowego:
ro.control_privapp_permissions=log
Naruszenia są zgłaszane w pliku dziennika, ale nieuprzywilejowane uprawnienia są nadal przyznawane. Dzięki temu urządzenie jest w stanie roboczym, jednocześnie wyświetlając listę naruszeń. Oto format komunikatu o błędzie:
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.
- W systemie Android 8.0 i starszych aplikacje, których dotyczy problem, nie otrzymują brakujących uprawnień, nawet jeśli znajdują się w ścieżce
priv-app
. - W systemie Android 9 i nowszych naruszenia ( uprawnień uprzywilejowanych ) oznaczają, że urządzenie się nie uruchamia . Musisz jawnie zezwolić lub odmówić wszystkich uprzywilejowanych uprawnień
Egzekwowanie list dozwolonych
Po utworzeniu list dozwolonych włącz wymuszanie w czasie wykonywania, ustawiając właściwość build ro.control_privapp_permissions=enforce
.