Kemampuan memungkinkan proses Linux menghapus sebagian besar hak istimewa seperti root sekaligus mempertahankan subset hak istimewa yang diperlukan untuk menjalankan fungsinya. Implementasi kemampuan asli membuat proses fork+exec tidak dapat mewarisi kemampuan kecuali jika file yang dijalankan telah mengonfigurasi kemampuan file. Kemampuan file, pada gilirannya, menimbulkan risiko keamanan karena setiap proses yang mengeksekusi file dengan kemampuan file dapat memperoleh kemampuan tersebut.
Kemampuan standby memungkinkan layanan sistem yang diluncurkan oleh init untuk mengonfigurasi
kemampuan dalam file .rc
, sehingga konfigurasi dimasukkan ke dalam
satu file, bukan memisahkan konfigurasi dalam
file fs_config.c
. Artinya, untuk layanan apa pun yang diluncurkan oleh
init, Anda dapat menggunakan file .rc
yang terkait dengan layanan untuk
mengonfigurasi kemampuan untuk layanan tersebut.
Kemampuan standby adalah mekanisme yang lebih disukai untuk menetapkan kemampuan
untuk layanan yang diluncurkan oleh init (metode ini menyimpan semua aspek untuk konfigurasi
layanan dalam satu file .rc
). Sebaiknya gunakan kemampuan
standby, bukan
mengonfigurasi kemampuan
sistem file menggunakan bagian caps dalam file config.fs
.
Saat menetapkan kemampuan untuk layanan yang tidak diluncurkan oleh init,
lanjutkan untuk mengonfigurasi kemampuan sistem file menggunakan
fs_config.c
.
Mengaktifkan kemampuan standby
Untuk mengaktifkan kemampuan standby untuk layanan tertentu, gunakan
kata kunci capabilities
di init. Untuk detail bahasa init
saat ini, lihat
init README.md.
Misalnya, untuk mengaktifkan kemampuan standby untuk layanan AOSP
wificond
, file.rc
untuk layanan wificond
menyiapkan pengguna dan grup
yang sesuai serta memberi 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
Penerapan 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.
Patch kemampuan standby 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 Bionic mencakup pengujian unit untuk kemampuan standby. Selain itu, menggunakan kata kunci "capabilities" di Android init untuk layanan, lalu memeriksa apakah layanan mendapatkan kemampuan yang diharapkan akan memungkinkan pengujian runtime fitur ini.