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:
- Android 9 lub nowszy:
/system, /product, /vendor
- Android 8.1 lub starszy:
/system
W przeszłości producenci urządzeń mieli niewielką kontrolę nad tym, które podpis | uprawnienia zaawansowane mogły być przyznawane aplikacjom zaawansowanym. Od Androida 8.0 producenci mogą wyraźnie przyznawać uprawnienia w plikach XML konfiguracji systemu w katalogu /etc/permissions
. Od Androida 9 implementatorzy mogą wyraźnie przyznawać lub odrzucać wszystkie uprawnienia uprzywilejowane. Jeśli nie przyznasz uprawnień uprzywilejowanych, urządzenie się nie uruchomi.
Plik privapp-permissions.xml
może przyznawać lub odrzucać uprawnienia tylko w przypadku aplikacji uprzywilejowanych w tym samym wydzielonym miejscu. Jeśli na przykład aplikacja na partycji /product
poprosi o uprawnienia, prośba może zostać zaakceptowana lub odrzucona tylko przez plik privapp-permissions.xml
na partycji /product
.
Dodawanie listy dozwolonych
Listy dozwolonych uprawnień dla aplikacji mogą być wymienione w pojedynczym pliku XML lub w kilku plikach XML znajdujących się w katalogu frameworks/base/etc/permissions
:
/etc/permissions/privapp-permissions-OEM_NAME.xml
/etc/permissions/privapp-permissions-DEVICE_NAME.xml
Nie ma ścisłych zasad dotyczących porządkowania treści. Implementatorzy 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 aplikacji z przywilejami.
Zalecamy tę organizację:
- Uprawnienia aplikacji już uwzględnionych 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 dostosować w razie potrzeby.
Jeśli musisz odmówić udzielenia uprawnień, zmodyfikuj plik XML, aby użyć tagu deny-permission
zamiast tagu permission
. 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 logowania przejściowego:
ro.control_privapp_permissions=log
Naruszenia są zgłaszane w pliku dziennika. Przyznano uprawnienia bez przywilejów. Dzięki temu urządzenie będzie nadal działać, a Ty będziesz mieć dostęp do listy naruszeń. Format komunikatu o błędzie:
PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist
Wszystkie naruszenia muszą zostać naprawione przez dodanie brakujących uprawnień do odpowiednich list dozwolonych. Pamiętaj, że w przypadku:
- W Androidzie 9 i nowszych wersjach naruszenia uprawnień uprzywilejowanych uniemożliwiają uruchomienie urządzenia. Zamiast tego musisz wyraźnie zezwolić na wszystkie uprawnienia lub je odrzucić.
- Na Androidzie 8.0 i starszych brakujące uprawnienia nie są przyznawane do aplikacji, mimo że znajdują się one na ścieżce
priv-app
.
Wymuś stosowanie listy dozwolonych
Po utworzeniu list dozwolonych włącz egzekwowanie w czasie wykonywania, ustawiając właściwość build ro.control_privapp_permissions=enforce
.
Dodanie do listy dozwolonych jest wymagane tylko w przypadku uprawnień zadeklarowanych przez aplikacje z uprawnieniem package="android"
. Stan właściwości ro.control_privapp_permissions
musi być zgodny z sekcją 9.1 Pozwolenia w dokumentacji dotyczącej zgodności (CDD).