Akses istimewa ke file dan direktori sebenarnya ditentukan oleh kemampuan, bukan hanya dengan menjadi root
atau tidak. Dalam praktiknya, root
biasanya memiliki semua kemungkinan kemampuan, tetapi ada situasi di mana semua/banyak dari kemampuan tersebut dapat dihapus, atau sebagian diberikan kepada pengguna lain (prosesnya).
Singkatnya, Anda telah menjelaskan cara kerja pemeriksaan kontrol akses untuk proses istimewa. Berikut adalah bagaimana kemampuan yang berbeda benar-benar memengaruhinya:
Kemampuan utama di sini adalah CAP_DAC_OVERRIDE
, sebuah proses yang memilikinya dapat "melewati file membaca, menulis, dan menjalankan pemeriksaan izin". Itu termasuk membaca dan menulis ke file apa pun, serta membaca, menulis, dan mengakses direktori.
Ini sebenarnya tidak berlaku untuk mengeksekusi file yang tidak ditandai sebagai dapat dieksekusi. Komentar di generic_permission
(fs/namei.c
), sebelum akses memeriksa file, katakan bahwa
Baca/tulis DAC selalu dapat diganti. DAC yang dapat dijalankan dapat diganti jika setidaknya ada satu set bit exec.
Dan kode memeriksa bahwa setidaknya ada satu x
bit disetel jika Anda mencoba menjalankan file. Saya menduga itu hanya fitur kenyamanan, untuk mencegah menjalankan file data acak secara tidak sengaja dan mendapatkan kesalahan atau hasil yang aneh.
Lagi pula, jika Anda dapat mengabaikan izin, Anda dapat membuat salinan yang dapat dieksekusi dan menjalankannya. (Meskipun itu 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 dengan hanya memiliki akses root penuh.)
Ada juga CAP_DAC_READ_SEARCH
kemampuan yang memungkinkan untuk membaca file apa pun dan mengakses direktori apa pun, tetapi tidak untuk mengeksekusi atau menulisnya; dan CAP_FOWNER
yang memungkinkan proses melakukan hal-hal yang biasanya hanya diperuntukkan bagi pemilik file, seperti mengubah bit izin dan grup file.
Mengganti sticky bit pada direktori hanya disebutkan di bawah CAP_FOWNER
, jadi sepertinya CAP_DAC_OVERRIDE
tidak akan cukup untuk mengabaikan itu. (Ini akan memberi Anda izin menulis, tetapi biasanya di direktori lengket Anda tetap memilikinya, dan +t
membatasinya.)
(Saya pikir perangkat khusus dihitung sebagai "file" di sini. Setidaknya generic_permission()
hanya memiliki pemeriksaan tipe untuk direktori, tetapi saya tidak memeriksa di luar itu.)
Tentu saja, masih ada situasi di mana bahkan kemampuan tidak akan membantu Anda mengubah file:
- beberapa file di
/proc
dan/sys
, karena itu bukan file sebenarnya - SELinux dan modul keamanan lain yang mungkin membatasi root
chattr
+i
yang tidak dapat diubah dan hanya menambahkan+a
flag pada ext2/ext3/ext4, keduanya bahkan menghentikan root, dan juga mencegah penggantian nama file, dll.- sistem file jaringan, di mana server dapat melakukan kontrol aksesnya sendiri, mis.
root_squash
di peta NFS mengakar ke siapa pun - FUSE, yang saya anggap bisa melakukan apa saja
- dudukan hanya baca
- perangkat hanya-baca
Persis seperti yang Anda perhatikan untuk izin default:
-
Baca &tulis:
Secara default, pengguna Root dapat mengakses file apa pun di sistem. Anda dapat menghapus akses ini dengan mengubah atribut seperti yang dijelaskan di sini:chattr. Ini kemudian ditautkan ke kemampuan. -
Jalankan:
Pengguna root tidak memiliki izin eksekusi kecuali setidaknya salah satu bit eksekusi disetel.
myFile.txt
diperoleh dengan chmod 000 myFile.txt
.
0 no permission
1 execute
2 write
3 execute + write
4 read
5 read + execute
6 read + write
7 all
---------
berarti tidak ada izin untuk pengguna, grup, dan lainnya.
Pengguna root memiliki tidak dibatasi kemampuan untuk memodifikasi file ini. Baca/tulis diberikan. Untuk mengeksekusi file ini, pengguna root harus tetap membuatnya dapat dieksekusi. (chmod 100 , 010 atau 001)