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!root
memilikirw-
izin pada (hampir) file apa pun, dan untuk mendapatkanx
izin, makax
bit tersebut harus ditetapkan pada izin pengguna / grup / orang lain pada file tersebut. Tetapi bagaimana dengan direktori, apakahroot
memilikirwx
izin pada direktori apa pun (bahkan jika direktori tidak memiliki izin sama sekali (----------
))?CAP_DAC_OVERRIDE
memungkinkan mengesampingkan semua izin direktori, sehingga Anda bisa membaca, menulis, dan mengakses direktori (mis. Daftar konten, buat, dan hapus tautan file). Komentar yang saya kutip tentang exec bit adalah dalam konteks file (hanya).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 jelaskan di sini: chattr . Ini kemudian dikaitkan dengan kemampuan.
Jalankan:
Pengguna root tidak memiliki izin eksekusi kecuali setidaknya satu bit eksekusi diatur.
sumber
Itu
myFile.txt
diperoleh olehchmod 000 myFile.txt
.---------
berarti tidak ada izin untuk pengguna, grup, dan lainnya.Pengguna root memiliki kemampuan tidak terbatas untuk memodifikasi file ini. Baca / tulis diberikan. Untuk menjalankan file ini, pengguna root harus membuatnya dapat dieksekusi. (chmod 100, 010 atau 001)
sumber
Mode eksekusi diperlakukan sedikit berbeda dari mode lainnya.
Izin baca dan tulis digunakan untuk menegakkan kebijakan keamanan. The
root
pengguna umumnya kebal dari pembatasan keamanan (ada beberapa pengecualian, seperti file berubah, dan fitur-fitur modern seperti kemampuan telah membuat fine grained lebih), yang mengapa nama lain untuk akun ini adalah "superuser".Jalankan izin lebih dari mode penasehat, membedakan apakah file dimaksudkan untuk dapat dieksekusi atau hanya data. Karena itu, bahkan pengguna root mematuhinya - tidak ada gunanya dalam mengeksekusi file data. Jika tidak ada izin eksekusi yang ditetapkan, root tidak dapat mengeksekusi file; jika ada dari mereka yang ditetapkan, dia bisa. Tentu saja, karena root juga memiliki izin untuk mengubah izin file apa pun, akun dapat membuat file dapat dieksekusi jika diinginkan (kecuali jika sistem file hanya baca-saja).
BTW, skrip adalah kasus yang menarik dalam hal ini. Script adalah file data untuk juru bahasa yang relevan. Jika skrip memiliki
#!
garis, Anda dapat menjalankannya sebagai program - penerjemah yang disebutkan di shebang dijalankan dengan nama file skrip sebagai argumen. Tapi ini hanya akan dilakukan ketika izin dieksekusi diatur. Di sisi lain, Anda bisa menjalankan penerjemah secara langsung, mis/bin/bash scriptname
. Penerjemah hanya peduli jika mereka dapat membaca file, mereka tidak memeriksa izin eksekusi.sumber
Biarkan saya jelaskan secara teoretis.
Jika file atau direktori memiliki izin seperti X untuk dieksekusi tetapi tidak ada yang lain dan seseorang seperti Steve memiliki file sendiri maka root juga dapat mengeksekusi file tersebut.
Selalu ingat, di root Linux bisa melakukan apa saja, tidak ada batasan pada root.
sumber