Daftar izin dengan hak istimewa

Aplikasi dengan hak istimewa adalah aplikasi sistem yang berada di direktori priv-app di partisi image sistem. Partisi yang digunakan untuk rilis Android adalah:

  • Android 9 dan yang lebih baru: /system, /product, /vendor
  • Android 8.1 dan yang lebih lama: /system

Sebelumnya, produsen perangkat hanya memiliki sedikit kontrol terhadap tanda tangan | izin istimewa dapat diberikan kepada aplikasi dengan hak istimewa. Mulai Android 8.0, produsen dapat secara eksplisit memberikan dalam file XML konfigurasi sistem di Direktori /etc/permissions. Mulai Android 9, pengimplementasi dapat secara eksplisit memberikan atau menolak semua izin hak istimewa. Jika izin akses istimewa tidak diberikan, perangkat tidak mau melakukan {i>booting<i}.

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

Menambahkan daftar yang diizinkan

Daftar izin yang diizinkan untuk aplikasi dapat dicantumkan dalam satu file XML atau dalam beberapa File XML yang berada 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 pada cara pengaturan konten. Pengimplementasi perangkat dapat menentukan struktur konten asalkan semua aplikasi dari /system/priv-app telah masuk daftar yang diizinkan. Misalnya, Google telah mengembangkan satu daftar aplikasi yang diizinkan untuk semua aplikasi dengan hak istimewa. Sebaiknya gunakan organisasi berikut:

  • Izin untuk aplikasi yang sudah disertakan dalam Project Open Source Android (AOSP) hierarki tercantum dalam /etc/permissions/privapp-permissions-platform.xml.
  • Untuk aplikasi lain, gunakan file formulir, /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

Menyesuaikan 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. Contoh:

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

Menemukan izin yang tidak ada

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

ro.control_privapp_permissions=log

Pelanggaran dilaporkan dalam file log. Izin yang tidak memiliki hak istimewa diberikan. Tindakan ini akan memastikan perangkat tetap dalam keadaan berfungsi sambil tetap menyediakan daftar pelanggaran data. Format pesan error adalah sebagai berikut:

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

Semua pelanggaran harus ditangani dengan menambahkan izin yang tidak ada ke daftar yang diizinkan yang sesuai. Perhatikan bahwa dalam:

  • Android 9 dan yang lebih tinggi, pelanggaran izin dengan hak istimewa mencegah perangkat memulai. Sebagai gantinya, Anda harus secara eksplisit mengizinkan atau menolak semua izin dengan hak istimewa.
  • Android 8.0 dan yang lebih rendah, izin yang tidak ada tidak diberikan ke aplikasi yang terpengaruh meskipun berada di jalur priv-app.

Menerapkan daftar yang diizinkan

Setelah membuat daftar yang diizinkan, aktifkan penerapan runtime dengan menyetel build properti ro.control_privapp_permissions=enforce.

Pemberian izin hanya diperlukan untuk izin yang dideklarasikan oleh aplikasi dengan package="android". ro.control_privapp_permissions status properti harus mematuhi Bagian 9.1 Izin dalam {i>Compatibility Definition Document<i} (CDD).