Akses istimewa ke file dan direktori sebenarnya ditentukan oleh kemampuan, bukan hanya dengan menjadi root
atau tidak. Dalam praktiknya, root
biasanya 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 x
bit 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_OVERRIDE
memungkinkan pengeditan /etc/shadow
dan hal-hal seperti itu, jadi kira-kira sama untuk hanya memiliki akses root penuh.)
Ada juga CAP_DAC_READ_SEARCH
kemampuan yang memungkinkan untuk membaca file dan mengakses direktori apa pun, tetapi tidak untuk mengeksekusi atau menulis kepada mereka; dan CAP_FOWNER
itu 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_OVERRIDE
tidak cukup untuk mengabaikannya. (Ini akan memberi Anda izin menulis, tetapi biasanya dalam direktori lengket Anda memilikinya, dan +t
membatasi 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
/proc
dan /sys
, karena mereka bukan file yang sebenarnya
- SELinux dan modul keamanan lainnya yang mungkin membatasi root
chattr
tidak berubah +i
dan hanya menambahkan +a
flag 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_squash
dalam 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!