Saat masuk, saya dapat melakukan hal berikut:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Kemudian saya dapat membuka vim (bukan sebagai root
), mengedit bar
, memaksa menulis w!
, dan file tersebut dimodifikasi.
Bagaimana saya bisa membuat sistem operasi melarang modifikasi file?
UPDATE 02 Mar 2017
chmod 500 foo
adalah herring merah: izin menulis pada direktori tidak ada hubungannya dengan kemampuan untuk mengubah konten file - hanya kemampuan untuk membuat dan menghapus file.chmod 400 foo/bar
sebenarnya mencegah isi file dari diubah. Tapi , itu tidak mencegah perizinan file dari berubah - pemilik file selalu dapat mengubah izin file-nya (dengan asumsi mereka dapat mengakses file yaitu mengeksekusi izin pada semua direktori leluhur). Faktanya, strace (1) mengungkapkan bahwa inilah yang sedang dilakukan vim (7.4.576 Debian Jessie) - vim memanggil chmod (2) untuk sementara menambahkan izin menulis untuk pemilik file, memodifikasi file, dan kemudian memanggil chmod ( 2) lagi untuk menghapus izin menulis. Itulah sebabnya menggunakanchattr +i
karya - hanya root yang bisa memanggilchattr -i
. Secara teoritis, vim (atau program apa pun) dapat melakukan hal yang sama dengan chattr seperti halnya dengan chmod pada file yang tidak dapat diubah jika dijalankan sebagai root.
root
?
vim
sebenarnya mengubah izin dan kemudian mengembalikannya.