Lista dozwolonych uprawnień

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).