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.
sumber
vim
sebenarnya mengubah izin dan kemudian mengembalikannya.root
?Jawaban:
Anda dapat mengatur atribut "tidak berubah" dengan sebagian besar sistem file di Linux.
Untuk menghapus atribut yang tidak dapat diubah, Anda menggunakan
-
alih-alih+
:Untuk melihat atribut file saat ini, Anda dapat menggunakan lsattr:
Halaman chattr (1) menyediakan deskripsi semua atribut yang tersedia. Berikut ini deskripsi untuk
i
:sumber
chattr
perintah itu adalah bagian darie2fsprogs
paket di sistem saya. Itu sebabnya saya membuat pernyataan itu. Saya telah memperbarui jawabannya berdasarkan komentar Anda.Kamu bisa:
root
atau pengguna tiruan yang baru dibuatchmod 440
untuk memungkinkan membaca berdasarkan grup (yaitu Anda).Jika pengguna yang benar bukan satu-satunya di grup ini, Anda harus membuat grup baru dan menambahkannya saja di dalamnya, dan gunakan grup ini untuk itu. Namun, Anda bukan pemilik file, karena itu Anda
vi
tidak dapat mengubah pemilik file.sumber
:w!
). vim tidak pergi sejauh mengubah izin direktori sementara. Jadi menjaga direktori tidak bisa ditulisi harus aman.Untuk membuat seluruh pohon direktori hanya baca:
Untuk membuatnya dapat dibaca lagi, ubah
+i
ke-i
.sumber