Akses istimewa ke file dan direktori sebenarnya ditentukan oleh kemampuan, bukan hanya dengan menjadi rootatau tidak. Dalam praktiknya, rootbiasanya memiliki semua kemampuan yang mungkin, tetapi ada situasi di mana semua / banyak dari mereka dapat dijatuhkan, atau beberapa diberikan kepada pengguna lain (proses mereka).
Secara singkat, Anda sudah menjelaskan bagaimana kontrol akses memeriksa bekerja untuk proses istimewa. Inilah bagaimana sebenarnya berbagai kemampuan memengaruhinya:
KemampuanCAP_DAC_OVERRIDE utama di sini adalah , sebuah proses yang dapat "memotong file membaca, menulis, dan menjalankan pemeriksaan izin". Itu termasuk membaca dan menulis ke file apa pun, serta membaca, menulis dan mengakses direktori.
Itu sebenarnya tidak berlaku untuk mengeksekusi file yang tidak ditandai sebagai executable. The komentar digeneric_permission ( fs/namei.c), sebelum pemeriksaan akses untuk file, mengatakan bahwa
Baca / tulis DAC selalu bisa ditimpa. DAC yang dapat dieksekusi dapat ditimpa ketika ada setidaknya satu set bit exec.
Dan kode memeriksa bahwa setidaknya ada satu xbit yang diatur jika Anda mencoba untuk mengeksekusi file. Saya menduga itu hanya fitur kenyamanan, untuk mencegah tidak sengaja menjalankan file data acak dan mendapatkan kesalahan atau hasil yang aneh.
Bagaimanapun, jika Anda bisa mengesampingkan izin, Anda bisa membuat salinan yang dapat dieksekusi dan menjalankannya. (Meskipun mungkin membuat perbedaan dalam teori untuk file setuid dari suatu proses mampu mengesampingkan izin file ( CAP_DAC_OVERRIDE), tetapi tidak memiliki kemampuan terkait lainnya ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Tetapi memiliki CAP_DAC_OVERRIDEmemungkinkan pengeditan /etc/shadowdan hal-hal seperti itu, jadi kira-kira sama untuk hanya memiliki akses root penuh.)
Ada juga CAP_DAC_READ_SEARCHkemampuan yang memungkinkan untuk membaca file dan mengakses direktori apa pun, tetapi tidak untuk mengeksekusi atau menulis kepada mereka; dan CAP_FOWNERitu memungkinkan proses untuk melakukan hal-hal yang biasanya disediakan hanya untuk pemilik file, seperti mengubah bit izin dan grup file.
Mengganti bit lengket pada direktori hanya disebutkan di bawah CAP_FOWNER, jadi sepertinya itu CAP_DAC_OVERRIDEtidak cukup untuk mengabaikannya. (Ini akan memberi Anda izin menulis, tetapi biasanya dalam direktori lengket Anda memilikinya, dan +tmembatasi itu.)
(Saya pikir perangkat khusus dianggap sebagai "file" di sini. Setidaknya generic_permission()hanya memiliki pemeriksaan jenis direktori, tapi saya tidak memeriksa di luar itu.)
Tentu saja, masih ada situasi di mana bahkan kemampuan tidak akan membantu Anda memodifikasi file:
- beberapa file dalam
/procdan /sys, karena mereka bukan file yang sebenarnya
- SELinux dan modul keamanan lainnya yang mungkin membatasi root
chattrtidak berubah +idan hanya menambahkan +aflag pada ext2 / ext3 / ext4, keduanya menghentikan bahkan root, dan mencegah juga file mengubah nama dll.
- sistem file jaringan, di mana server dapat melakukan kontrol aksesnya sendiri, misalnya
root_squashdalam NFS mem-root peta kepada siapa pun
- FUSE, yang saya anggap bisa melakukan apa saja
- mount hanya baca
- perangkat hanya-baca
capabilities(7)halaman manual - pertimbangkan untuk mengajukan laporan bug!