Daftar Izin Istimewa yang Diizinkan

Aplikasi istimewa adalah aplikasi sistem yang terletak di direktori priv-app pada partisi citra sistem. Partisi yang digunakan untuk rilis Android adalah:

  • Android 9 dan lebih tinggi: /system, /product, /vendor
  • Android 8.1 dan lebih rendah: /system

Secara historis, produsen perangkat memiliki sedikit kendali atas tanda tangan | izin istimewa dapat diberikan kepada aplikasi yang memiliki hak istimewa. Mulai Android 8.0, produsen dapat secara eksplisit memberikan izin istimewa pada file XML konfigurasi sistem di direktori /etc/permissions . Mulai Android 9, pelaksana dapat secara eksplisit memberikan atau menolak semua izin istimewa. Jika izin istimewa tidak diberikan, perangkat tidak akan bisa boot.

File privapp-permissions.xml hanya dapat memberikan atau menolak izin untuk aplikasi yang memiliki hak istimewa di partisi yang sama. Misalnya, jika aplikasi di partisi /product meminta izin istimewa, permintaan tersebut hanya dapat diberikan atau ditolak oleh file privapp-permissions.xml di /product .

Tambahkan daftar yang diizinkan

Daftar izin yang diizinkan untuk aplikasi dapat dicantumkan dalam satu file XML atau beberapa file XML yang terletak di direktori frameworks/base/etc/permissions :

  • /etc/permissions/privapp-permissions- OEM_NAME .xml
  • /etc/permissions/privapp-permissions- DEVICE_NAME .xml

Tidak ada aturan ketat yang berlaku mengenai cara konten diatur. Pelaksana perangkat dapat menentukan struktur konten selama semua aplikasi dari /system/priv-app diizinkan. Misalnya, Google telah mengembangkan satu daftar yang diizinkan untuk semua aplikasi yang memiliki hak istimewa. Kami merekomendasikan organisasi berikut:

  • Izin untuk aplikasi yang sudah termasuk dalam pohon Proyek Sumber Terbuka Android (AOSP) tercantum di /etc/permissions/privapp-permissions-platform.xml .
  • Untuk aplikasi lain, gunakan file dalam bentuk /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Sesuaikan daftar yang diizinkan

AOSP menyertakan implementasi daftar yang diizinkan yang dapat disesuaikan sesuai kebutuhan.

Jika izin harus ditolak, edit XML untuk menggunakan tag deny-permission , bukan tag permission . Misalnya:

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

Temukan izin yang hilang

Untuk menemukan izin yang hilang saat memulai perangkat baru, aktifkan mode log transisi:

ro.control_privapp_permissions=log

Pelanggaran dilaporkan dalam file log. Izin non-hak istimewa diberikan. Hal ini memastikan perangkat tetap dalam kondisi berfungsi sambil tetap memberikan daftar pelanggaran. Format pesan kesalahannya adalah sebagai berikut:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Semua pelanggaran harus diatasi dengan menambahkan izin yang hilang ke daftar yang diizinkan. Perhatikan bahwa di:

  • Android 9 dan lebih tinggi, pelanggaran izin istimewa mencegah perangkat untuk memulai. Sebaliknya, Anda harus secara eksplisit mengizinkan atau menolak semua izin istimewa.
  • Android 8.0 dan lebih rendah, izin yang hilang tidak diberikan kepada aplikasi yang terpengaruh meskipun berada di jalur priv-app .

Terapkan daftar yang diizinkan

Setelah Anda membuat daftar yang diizinkan, aktifkan penegakan waktu proses dengan menyetel properti build ro.control_privapp_permissions=enforce .

Daftar yang diizinkan hanya diperlukan untuk izin yang dinyatakan oleh aplikasi dengan package="android" . Status properti ro.control_privapp_permissions harus mematuhi Bagian 9.1 Izin dalam Dokumen Definisi Kompatibilitas (CDD).