Aplikacje z podwyższonymi uprawnieniami to aplikacje systemowe znajdujące się w katalogu priv-app
na partycji obrazu systemu. Partycje używane w przypadku wersji Androida to:
- Android 9 lub nowszy:
/system, /product, /vendor
- Android 8.1 i starsze:
/system
W przeszłości producenci urządzeń mieli niewielką kontrolę nad tym, które uprawnienia podpisu | uprzywilejowane można było przyznać aplikacjom uprzywilejowanym. Od Androida 8.0 producenci mogą wyraźnie przyznawać uprawnienia uprzywilejowane w plikach XML konfiguracji systemu w katalogu /etc/permissions
. Od Androida 9 implementatorzy mogą wyraźnie przyznawać lub odmawiać wszystkich uprawnień uprzywilejowanych. Jeśli uprawnienia uprzywilejowane nie zostaną przyznane, urządzenie nie uruchomi się.
Plik privapp-permissions.xml
może przyznawać lub odmawiać uprawnień
tylko w przypadku aplikacji z uprawnieniami na tej samej partycji. Jeśli na przykład aplikacja na partycji /product
poprosi o uprawnienia z poziomu uprzywilejowanego, prośbę może zaakceptować lub odrzucić tylko plik privapp-permissions.xml
na partycji /product
.
Dodawanie listy dozwolonych
Listy dozwolonych uprawnień aplikacji mogą być wymienione w jednym lub kilku plikach XML znajdujących się w katalogu /etc/permissions
:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Nie ma ścisłych reguł dotyczących organizacji treści. Producenci urządzeń mogą określać strukturę treści, o ile wszystkie aplikacje z /system/priv-app
są na liście dozwolonych. Na przykład Google opracowało jedną listę dozwolonych dla wszystkich aplikacji z uprawnieniami.
Zalecamy taką organizację:
- Uprawnienia aplikacji, które są już uwzględnione w drzewie Projektu Android Open Source (AOSP), są wymienione w
/etc/permissions/privapp-permissions-platform.xml
. - W przypadku innych aplikacji używaj plików w formacie
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
.
Dostosowywanie listy dozwolonych
AOSP zawiera implementację listy dozwolonych, którą można w razie potrzeby dostosować.
Jeśli uprawnienia muszą zostać odrzucone, zmień kod XML, 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ściowego:
ro.control_privapp_permissions=log
Naruszenia są zgłaszane w pliku dziennika. Przyznano uprawnienia bez uprzywilejowania. Dzięki temu urządzenie pozostanie w stanie roboczym, a jednocześnie będzie można wyświetlić listę naruszeń. Format komunikatu o błędzie jest następujący:
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:
- W przypadku Androida 9 i nowszych naruszenia uprawnień uprzywilejowanych uniemożliwiają uruchomienie urządzenia. Zamiast tego musisz wyraźnie zezwolić na wszystkie uprawnienia z dostępem do informacji chronionych lub je odrzucić.
- W przypadku Androida 8.0 i starszych wersji brakujące uprawnienia nie są przyznawane aplikacjom, których to dotyczy, mimo że znajdują się one na ścieżce
priv-app
.
Wymuszanie listy dozwolonych
Po utworzeniu list dozwolonych włącz egzekwowanie w czasie działania, ustawiając właściwość buildro.control_privapp_permissions=enforce
.
Wymagane jest tylko w przypadku uprawnień zadeklarowanych przez aplikacje z package="android"
. Stan właściwości ro.control_privapp_permissions
musi być zgodny z sekcją 9.1 Uprawnienia dokumentu CDD.