Aplikasi dengan hak istimewa adalah aplikasi sistem yang berada di direktori priv-app
pada
partisi image sistem. Partisi yang digunakan untuk rilis Android adalah:
- Android 9 dan yang lebih tinggi:
/system, /product, /vendor
- Android 8.1 dan yang lebih lama:
/system
Secara historis, produsen perangkat memiliki sedikit kontrol atas
izin tanda tangan | istimewa yang dapat diberikan ke
aplikasi dengan hak istimewa. Mulai Android 8.0, produsen dapat secara eksplisit memberikan
izin dengan hak istimewa dalam file XML konfigurasi sistem di
direktori /etc/permissions
. Mulai Android 9, implementor dapat
secara eksplisit memberikan atau menolak semua izin dengan hak istimewa. Jika izin dengan hak istimewa tidak diberikan,
perangkat tidak akan melakukan booting.
File privapp-permissions.xml
hanya dapat memberikan atau menolak
izin untuk aplikasi dengan hak istimewa di partisi yang sama. Misalnya, jika
aplikasi di partisi /product
meminta izin dengan hak istimewa,
permintaan tersebut hanya dapat diberikan atau ditolak oleh file
privapp-permissions.xml
di /product
.
Menambahkan daftar yang diizinkan
Daftar yang diizinkan izin untuk aplikasi dapat dicantumkan dalam satu file XML atau dalam 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 untuk cara konten diatur. Implementator perangkat dapat
menentukan struktur konten selama semua aplikasi dari /system/priv-app
diizinkan. Misalnya, Google telah mengembangkan satu daftar yang diizinkan untuk semua aplikasi dengan hak istimewa.
Sebaiknya gunakan organisasi berikut:
- Izin untuk aplikasi yang sudah disertakan dalam
hierarki
Project Open Source Android (AOSP) tercantum di
/etc/permissions/privapp-permissions-platform.xml
. - Untuk aplikasi lain, gunakan file dalam bentuk,
/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 non-hak istimewa diberikan. Tindakan ini memastikan perangkat tetap dalam status berfungsi sekaligus tetap memberikan daftar pelanggaran. Format pesan error 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 tidak ada ke daftar yang diizinkan yang sesuai. Perhatikan bahwa di:
- Android 9 dan yang lebih tinggi, pelanggaran izin dengan hak istimewa akan mencegah perangkat dimulai. Sebagai gantinya, Anda harus mengizinkan atau menolak semua izin dengan hak istimewa secara eksplisit.
- 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 menetapkan properti
build ro.control_privapp_permissions=enforce
.
Daftar yang diizinkan hanya diperlukan untuk izin yang dideklarasikan oleh aplikasi dengan
package="android"
. Status properti
ro.control_privapp_permissions
harus mematuhi
Izin Bagian 9.1
dalam Dokumen Definisi Kompatibilitas (CDD).