Kemampuan memungkinkan proses Linux untuk menjatuhkan sebagian besar hak istimewa seperti root sambil mempertahankan subset hak istimewa yang mereka perlukan untuk menjalankan fungsinya. Implementasi asli dari kapabilitas membuat proses fork+exec tidak mungkin mewarisi kapabilitas kecuali file yang dieksekusi memiliki kapabilitas file yang dikonfigurasi. Kemampuan file, pada gilirannya, menghadirkan risiko keamanan karena setiap proses yang mengeksekusi file dengan kemampuan file akan dapat memperoleh kemampuan tersebut.
Kemampuan ambien memungkinkan layanan sistem yang diluncurkan oleh init untuk mengonfigurasi kemampuan dalam file .rc
mereka, membawa konfigurasi ke dalam satu file alih-alih memecah konfigurasi dalam file fs_config.c
. Ini berarti bahwa untuk layanan apa pun yang diluncurkan oleh init, Anda dapat menggunakan file .rc
yang terkait dengan layanan untuk mengonfigurasi kemampuan layanan tersebut.
Kemampuan ambient adalah mekanisme yang lebih disukai untuk menyetel kemampuan untuk layanan yang diluncurkan oleh init (metode ini menyimpan semua aspek untuk konfigurasi layanan dalam satu file .rc
). Kami menyarankan untuk menggunakan kemampuan ambien alih-alih mengonfigurasi kemampuan sistem file menggunakan bagian caps di file config.fs
.
Saat menyetel kapabilitas untuk layanan yang tidak diluncurkan oleh init , lanjutkan konfigurasi kapabilitas sistem file menggunakan fs_config.c
.
Mengaktifkan kemampuan sekitar
Untuk mengaktifkan kemampuan ambien untuk layanan tertentu, gunakan kata kunci capabilities
di init. Untuk detail bahasa init saat ini, lihat init README.md .
Misalnya, untuk mengaktifkan kemampuan ambien untuk layanan AOSP wificond
, file .rc untuk layanan wificond
menyiapkan pengguna dan grup yang sesuai dan memberikan layanan kemampuan 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/
Patch yang diperlukan
Patch yang diperlukan telah di-backport ke semua cabang kernel umum Android yang relevan.
Tambalan kemampuan ambient 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 sekitar. Selain itu, menggunakan kata kunci "capabilities" di Android init untuk suatu layanan, dan kemudian memeriksa apakah layanan tersebut mendapatkan kemampuan yang diharapkan akan memungkinkan pengujian runtime fitur ini.