Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Izin Istimewa yang Diizinkan

Aplikasi istimewa adalah aplikasi sistem yang terletak di priv-app pada salah satu partisi sistem gambar. 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 resolve ke partition /etc/permissions/priv-app .

Secara historis, produsen perangkat memiliki sedikit kontrol atas yang tanda tangan | izin istimewa dapat diberikan kepada aplikasi istimewa. Mulai di Android 8.0, produsen harus secara eksplisit memberikan izin istimewa dalam konfigurasi sistem file XML di /etc/permissions direktori. Mulai Android 9, pelaksana harus secara eksplisit memberikan atau menolak semua izin istimewa atau perangkat tidak bisa boot.

The privapp-permissions.xml file yang hanya dapat memberikan atau menolak izin untuk aplikasi istimewa pada partisi yang sama. Sebagai contoh, jika sebuah aplikasi pada /product partisi meminta izin istimewa, permintaan hanya dapat diberikan atau ditolak oleh privapp-permissions.xml file yang juga di /product .

Menambahkan daftar yang diizinkan

Allowlists izin untuk aplikasi dapat terdaftar dalam XML tunggal atau dalam beberapa file XML yang terletak di frameworks/base/etc/permissions direktori 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 asalkan semua aplikasi dari /system/priv-app yang allowlisted. Misalnya, Google memiliki satu daftar yang diizinkan untuk semua aplikasi istimewa yang dikembangkan oleh Google, dan merekomendasikan organisasi berikut:

  • Izin untuk aplikasi yang sudah termasuk dalam Android Open Source Project (AOSP) pohon tercantum dalam /etc/permissions/privapp-permissions-platform.xml .
  • Izin untuk aplikasi Google tercantum di /etc/permissions/privapp-permissions-google.xml .
  • Untuk aplikasi lain, gunakan file dalam bentuk: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Membuat daftar yang diizinkan

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

  1. Membangun sistem image:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Jalankan privapp_permissions.py script untuk menghasilkan privapp-permissions.xml file yang daftar semua tanda tangan | izin istimewa yang diperlukan untuk allowlisted:
    development/tools/privapp_permissions/privapp_permissions.py
    ini alat cetak konten XML yang dapat digunakan baik sebagai file tunggal, atau dibagi menjadi beberapa file di /etc/permissions jalur direktori. Jika perangkat sudah termasuk allowlists di /etc/permissions direktori, alat satu-satunya mencetak perbedaan (seperti tanda tangan yang hilang | istimewa izin Anda perlu menambahkan untuk allowlist yang). Ini juga berguna untuk tujuan audit: Saat versi baru aplikasi ditambahkan, alat mendeteksi izin tambahan yang diperlukan.
  3. Salin file yang dihasilkan ke tepat /etc/permissions direktori, di mana sistem membaca file saat boot.

Menyesuaikan daftar yang diizinkan

AOSP menyertakan implementasi daftar yang diizinkan yang dapat disesuaikan sesuai kebutuhan. Izin untuk aplikasi termasuk dalam AOSP sudah allowlisted di /etc/permissions/privapp-permissions-platform.xml .

Secara default, privapp_permissions.py naskah menghasilkan output yang secara otomatis memberikan setiap izin yang diminta oleh aplikasi istimewa. 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.

  • Pada Android 8.0 dan lebih rendah, aplikasi yang terkena dampak tidak diberikan izin hilang bahkan jika mereka berada di priv-app path.
  • Pada Android 9 dan lebih tinggi, pelanggaran (hak akses istimewa) berarti perangkat tidak booting. Anda harus secara eksplisit baik membolehkan atau menolak semua izin istimewa

Menegakkan daftar yang diizinkan

Setelah allowlists berada di tempat, memungkinkan runtime penegakan dengan menetapkan membangun properti ro.control_privapp_permissions=enforce .