Aplikasi istimewa adalah aplikasi sistem yang terletak di direktori priv-app
pribadi di salah satu partisi citra sistem. Partisi yang digunakan untuk rilis Android adalah
- Android 8.1 dan lebih rendah -
/system
- Android 9 dan lebih tinggi -
/system, /product, /vendor
Sepanjang halaman ini, /etc/permissions/priv-app
memutuskan untuk partition /etc/permissions/priv-app
.
Secara historis, produsen perangkat memiliki sedikit kendali atas tanda tangan|izin istimewa mana yang dapat diberikan ke aplikasi istimewa. Mulai Android 8.0, produsen harus secara eksplisit memberikan izin istimewa dalam file XML konfigurasi sistem di direktori /etc/permissions
. Mulai Android 9, pelaksana harus secara eksplisit memberikan atau menolak semua izin istimewa atau perangkat tidak dapat 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 tersebut hanya dapat diberikan atau ditolak oleh file privapp-permissions.xml
yang juga ada di /product
.
Menambahkan daftar yang diizinkan
Daftar izin yang diizinkan untuk aplikasi dapat dicantumkan dalam satu XML atau dalam beberapa file XML yang terletak di direktori frameworks/base/etc/permissions
sebagai berikut:
-
/etc/permissions/privapp-permissions- OEM_NAME .xml
-
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
Tidak ada aturan ketat untuk mengatur konten. Pelaksana perangkat dapat menentukan struktur konten selama semua aplikasi dari /system/priv-app
diizinkan. Misalnya, Google memiliki satu daftar yang diizinkan untuk semua aplikasi istimewa yang dikembangkan oleh Google, dan merekomendasikan organisasi berikut:
- Izin untuk aplikasi yang sudah disertakan dalam pohon Android Open Source Project (AOSP) tercantum di
/etc/permissions/privapp-permissions-platform.xml
. - Izin untuk aplikasi Google tercantum di
/etc/permissions/privapp-permissions-google.xml
. - Untuk aplikasi lain, gunakan file berbentuk:
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Menyesuaikan daftar yang diizinkan
AOSP menyertakan implementasi daftar yang diizinkan yang dapat disesuaikan sesuai kebutuhan. Izin untuk aplikasi yang disertakan dalam AOSP sudah diizinkan di /etc/permissions/privapp-permissions-platform.xml
.
Jika ada izin yang 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 hilang
Untuk menemukan izin yang hilang saat membuka perangkat baru, aktifkan mode log transisi:
ro.control_privapp_permissions=log
Pelanggaran dilaporkan dalam file log, tetapi izin nonprivileged masih diberikan. Ini membuat perangkat dalam keadaan bekerja sambil memberikan daftar pelanggaran. Ini adalah format pesan kesalahan:
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.
- Di Android 8.0 dan yang lebih rendah, aplikasi yang terpengaruh tidak diberikan izin yang hilang meskipun berada di jalur
priv-app
pribadi. - Di Android 9 dan lebih tinggi, pelanggaran (izin istimewa ) berarti perangkat tidak bisa boot . Anda harus secara eksplisit mengizinkan atau menolak semua izin istimewa
Menegakkan daftar yang diizinkan
Setelah daftar yang diizinkan diterapkan, aktifkan penegakan waktu proses dengan menyetel properti build ro.control_privapp_permissions=enforce
.