Aplikasi istimewa adalah aplikasi sistem yang terletak di direktori priv-app
pada partisi image sistem. Partisi yang digunakan untuk rilis Android adalah:
- Android 9 dan lebih tinggi:
/system, /product, /vendor
- Android 8.1 dan lebih rendah:
/system
Secara historis, produsen perangkat memiliki sedikit kendali atas tanda tangan | izin istimewa dapat diberikan kepada aplikasi yang memiliki hak istimewa. Mulai Android 8.0, produsen dapat secara eksplisit memberikan izin istimewa pada file XML konfigurasi sistem di direktori /etc/permissions
. Mulai Android 9, pelaksana dapat secara eksplisit memberikan atau menolak semua izin istimewa. Jika izin istimewa tidak diberikan, perangkat tidak akan bisa boot.
File privapp-permissions.xml
hanya dapat memberikan atau menolak izin untuk aplikasi yang memiliki hak 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
di /product
.
Tambahkan daftar yang diizinkan
Daftar izin yang diizinkan untuk aplikasi dapat dicantumkan dalam satu file XML atau 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 mengenai cara konten diatur. Pelaksana perangkat dapat menentukan struktur konten selama semua aplikasi dari /system/priv-app
diizinkan. Misalnya, Google telah mengembangkan satu daftar yang diizinkan untuk semua aplikasi yang memiliki hak istimewa. Kami merekomendasikan organisasi berikut:
- Izin untuk aplikasi yang sudah termasuk dalam pohon Proyek Sumber Terbuka Android (AOSP) tercantum di
/etc/permissions/privapp-permissions-platform.xml
. - Untuk aplikasi lain, gunakan file dalam bentuk
/etc/permissions/privapp-permissions- DEVICE_NAME .xml
.
Sesuaikan 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
. Misalnya:
<!-- 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> ...
Temukan izin yang hilang
Untuk menemukan izin yang hilang saat memulai perangkat baru, aktifkan mode log transisi:
ro.control_privapp_permissions=log
Pelanggaran dilaporkan dalam file log. Izin non-hak istimewa diberikan. Hal ini memastikan perangkat tetap dalam kondisi berfungsi sambil tetap memberikan daftar pelanggaran. Format pesan kesalahannya 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 hilang ke daftar yang diizinkan. Perhatikan bahwa di:
- Android 9 dan lebih tinggi, pelanggaran izin istimewa mencegah perangkat untuk memulai. Sebaliknya, Anda harus secara eksplisit mengizinkan atau menolak semua izin istimewa.
- Android 8.0 dan lebih rendah, izin yang hilang tidak diberikan kepada aplikasi yang terpengaruh meskipun berada di jalur
priv-app
.
Terapkan daftar yang diizinkan
Setelah Anda membuat daftar yang diizinkan, aktifkan penegakan waktu proses dengan menyetel properti build ro.control_privapp_permissions=enforce
.
Daftar yang diizinkan hanya diperlukan untuk izin yang dinyatakan oleh aplikasi dengan package="android"
. Status properti ro.control_privapp_permissions
harus mematuhi Bagian 9.1 Izin dalam Dokumen Definisi Kompatibilitas (CDD).