Kemampuan memungkinkan proses Linux untuk melepaskan sebagian besar hak istimewa seperti root sambil mempertahankan subset hak istimewa yang mereka perlukan untuk menjalankan fungsinya. Implementasi asli dari kemampuan membuat proses fork + exec tidak mungkin mewarisi kemampuan kecuali file yang sedang dieksekusi memiliki kemampuan file yang dikonfigurasi. Kemampuan file, pada gilirannya, menghadirkan risiko keamanan karena proses apa pun yang menjalankan file dengan kapabilitas file akan dapat memperoleh kapabilitas tersebut.
Kemampuan ambien memungkinkan layanan sistem yang diluncurkan oleh init untuk mengonfigurasi kapabilitas dalam file .rc
mereka, membawa konfigurasi ke dalam satu file alih-alih memecah konfigurasi di file fs_config.c
. Ini berarti bahwa untuk layanan apa pun yang diluncurkan oleh init, Anda dapat menggunakan file .rc
terkait dengan layanan tersebut untuk mengonfigurasi kapabilitas layanan tersebut.
Kapabilitas ambien adalah mekanisme yang disukai untuk menyetel kapabilitas untuk layanan yang diluncurkan oleh init (metode ini menyimpan semua aspek untuk konfigurasi layanan dalam satu file .rc
). Kami merekomendasikan menggunakan kapabilitas ambient daripada mengonfigurasi kapabilitas sistem file menggunakan bagian caps di file config.fs
.
Saat mengatur kapabilitas untuk layanan yang tidak diluncurkan oleh init , lanjutkan untuk mengkonfigurasi kapabilitas sistem file menggunakan fs_config.c
.
Mengaktifkan kemampuan ambien
Untuk mengaktifkan kapabilitas ambien untuk layanan tertentu, gunakan kata kunci capabilities
di init. Untuk detail bahasa init saat ini, lihat init README.md .
Misalnya, untuk mengaktifkan kapabilitas ambien untuk wificond
layanan AOSP, file .rc untuk layanan wificond
menyiapkan pengguna dan grup yang sesuai dan memberikan layanan kapabilitas yang ditentukan menggunakan kata kunci capabilities
:
service wificond /system/bin/wificond class main user wifi group wifi net_raw net_admin capabilities NET_RAW NET_ADMIN
Implementasi referensi
Implementasi referensi adalah kernel umum Android https://android.googlesource.com/kernel/common/
Tambalan yang diperlukan
Tambalan yang diperlukan telah di-backport ke semua cabang kernel umum Android yang relevan.
Patch kemampuan ambien utama https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08 telah di-backport di:
- android-3.18:
- android-4.1:
Perbaikan keamanan kecil https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7f76ea2ef6739ee484a165ffbac98deb855d3d3 telah di-backport di:
- android-3.18:
- android-4.1:
Validasi
Pengujian unit bionik mencakup pengujian unit untuk kemampuan ambien. Selain itu, menggunakan kata kunci "kapabilitas" di Android init untuk suatu layanan, lalu memeriksa bahwa layanan tersebut mendapatkan kapabilitas yang diharapkan akan memungkinkan pengujian waktu proses fitur ini.