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