Aplikasi 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
Sebelumnya, produsen perangkat memiliki sedikit kontrol atas izin tanda tangan | istimewa yang dapat diberikan kepada aplikasi istimewa. Mulai Android 8.0, produsen dapat memberikan izin istimewa secara eksplisit dalam file XML konfigurasi sistem di direktori /etc/permissions
. Mulai Android 9, pengimplementasi dapat
memberikan atau menolak semua izin istimewa secara eksplisit. Jika izin istimewa tidak diberikan,
perangkat tidak akan melakukan booting.
File privapp-permissions.xml
hanya dapat memberikan atau menolak
izin untuk aplikasi istimewa di partisi yang sama. Misalnya, jika
aplikasi di partisi /product
meminta izin istimewa,
permintaan hanya dapat diberikan atau ditolak oleh file privapp-permissions.xml
di /product
.
Menambahkan daftar yang diizinkan
Daftar aplikasi yang diizinkan untuk menggunakan izin dapat dicantumkan dalam satu file XML atau dalam beberapa file XML yang berada di direktori /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. Pengembang perangkat dapat
menentukan struktur konten selama semua aplikasi dari /system/priv-app
masuk dalam daftar yang 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
Android Open Source Project (AOSP)
dicantumkan 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
alih-alih 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. Dengan melakukannya, perangkat akan tetap dalam status berfungsi sambil 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 ditangani dengan menambahkan izin yang tidak ada ke daftar yang diizinkan yang sesuai. Perhatikan bahwa di:
- Android 9 dan yang lebih tinggi, pelanggaran izin hak istimewa mencegah perangkat dimulai. Sebagai gantinya, Anda harus mengizinkan atau menolak semua izin 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 menyetel properti build
ro.control_privapp_permissions=enforce
.
Pengizinan diperlukan hanya untuk izin yang dideklarasikan oleh aplikasi dengan
package="android"
. Status properti ro.control_privapp_permissions
harus mematuhi
Bagian 9.1 Izin
dalam Compatibility Definition Document (CDD).