Google berkomitmen untuk memajukan ekuitas ras untuk komunitas kulit hitam. Lihat bagaimana.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Daftar Putih Izin Hak Istimewa

Aplikasi istimewa adalah aplikasi sistem yang terletak di direktori priv-app di salah satu partisi gambar 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 izin tanda tangan | istimewa yang dapat diberikan kepada aplikasi istimewa. Mulai di Android 8.0, pabrikan harus secara eksplisit memberikan izin istimewa dalam konfigurasi sistem file XML di direktori /etc/permissions . Pada Android 9, pelaksana harus secara eksplisit memberikan atau menolak semua izin istimewa atau perangkat tidak mau boot.

File privapp-permissions.xml hanya dapat memberikan atau menolak izin untuk aplikasi istimewa di partisi yang sama. Misalnya, jika aplikasi pada partisi /vendor meminta izin istimewa, permintaan hanya dapat diberikan atau ditolak oleh file privapp-permissions.xml yang juga ada di /vendor .

Menambahkan daftar putih

Daftar putih izin 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 masuk daftar putih. Misalnya, Google memiliki daftar putih tunggal untuk semua aplikasi istimewa yang dikembangkan oleh Google, dan merekomendasikan organisasi berikut:

  • Izin untuk aplikasi yang sudah termasuk 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 formulir: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Membuat daftar putih

Untuk secara otomatis menghasilkan daftar putih untuk semua aplikasi yang tersedia pada gambar sistem, gunakan alat baris perintah AOSP di development/tools/privapp_permissions/privapp_permissions.py . Untuk membuat versi awal privapp-permissions.xml khusus privapp-permissions.xml :

  1. Bangun citra sistem:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j 
  2. Jalankan skrip privapp_permissions.py untuk menghasilkan file privapp-permissions.xml yang mencantumkan semua tanda tangan | hak istimewa yang diperlukan untuk dimasukkan dalam daftar putih:
    development/tools/privapp_permissions/privapp_permissions.py
    Alat ini mencetak konten XML yang dapat digunakan sebagai file tunggal, atau dipecah menjadi beberapa file di jalur direktori /etc/permissions . Jika perangkat sudah memasukkan daftar putih di direktori /etc/permissions , alat ini hanya akan mencetak perbedaannya saja (seperti tanda tangan yang hilang | izin istimewa yang perlu Anda tambahkan ke daftar putih). Ini juga berguna untuk keperluan audit: Ketika versi baru aplikasi ditambahkan, alat mendeteksi izin tambahan yang diperlukan.
  3. Salin file yang dihasilkan ke direktori /etc/permissions , di mana sistem membaca file saat boot.

Menyesuaikan daftar putih

AOSP mencakup implementasi daftar putih yang dapat dikustomisasi sesuai kebutuhan. Izin untuk aplikasi yang termasuk dalam AOSP sudah masuk daftar putih di /etc/permissions/privapp-permissions-platform.xml .

Secara default, skrip privapp_permissions.py menghasilkan output yang secara otomatis memberikan izin yang diminta oleh aplikasi istimewa. Jika ada izin yang harus ditolak, edit XML untuk menggunakan tag "tolak-izin" alih-alih tag "izin". Contoh:

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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 permisison yang hilang saat memunculkan perangkat baru, aktifkan mode log transisi:

ro.control_privapp_permissions=log

Pelanggaran dilaporkan dalam file log, tetapi izin nonprivileged masih diberikan. Ini menjaga perangkat dalam kondisi aktif sambil memberikan daftar pelanggaran. Ini adalah format pesan kesalahan:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions whitelist

Semua pelanggaran harus diatasi dengan menambahkan izin yang hilang ke daftar putih yang sesuai.

  • Pada Android 8.0 dan lebih rendah, aplikasi yang terpengaruh tidak diberikan izin yang hilang bahkan jika mereka berada di jalur priv-app .
  • Pada 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 putih

Setelah daftar putih ada, aktifkan runtime enforcement dengan menetapkan build properti ro.control_privapp_permissions=enforce .