Jika saya membuat file dan kemudian mengubah izinnya 444
(hanya baca), bagaimana rm
bisa menghapusnya?
Jika saya melakukan ini:
echo test > test.txt
chmod 444 test.txt
rm test.txt
... rm
akan bertanya apakah saya ingin menghapus file yang dilindungi tulis test.txt
. Saya berharap bahwa rm
tidak dapat menghapus file seperti itu dan saya harus melakukan yang chmod +w test.txt
pertama. Jika saya melakukannya rm -f test.txt
maka rm
akan menghapus file tanpa meminta, meskipun itu hanya baca.
Adakah yang bisa menjelaskan? Saya menggunakan Ubuntu 12.04 / bash.
permissions
files
rm
readonly
Magnus
sumber
sumber
Jawaban:
Semua
rm
kebutuhan adalah menulis + menjalankan izin pada direktori induk. Izin file itu sendiri tidak relevan.Berikut adalah referensi yang menjelaskan model izin lebih jelas daripada yang pernah saya bisa:
sumber
+t
sehingga orang tidak dapat lagi memodifikasi atau menghapus file dalam direktori itu yang tidak mereka miliki walaupun mereka memiliki akses tulis ke direktori?chattr
untuk menambahkan flag yang tidak dapat diubah ke file. Jika tidak, maka ire_and_curses cukup benar.Oke, menurut komentar Anda pada ire_and_curses, yang benar-benar ingin Anda lakukan adalah membuat beberapa file tidak dapat diubah. Anda dapat melakukannya dengan
chattr
perintah. Sebagai contoh:misalnya
Anda tidak dapat melakukan apa pun pada file yang tidak dapat diubah - Anda tidak bisa menghapusnya, mengeditnya, menimpanya, mengganti namanya, chmod atau chown, atau apa pun. Satu-satunya hal yang dapat Anda lakukan dengannya adalah membacanya (jika izin unix memungkinkan) dan (sebagai root)
chattr -i
untuk menghapus bit yang tidak dapat diubah.Tidak semua sistem file mendukung semua atribut. AFAIK, immutable didukung oleh semua sistem file linux yang umum (termasuk ext2 / 3/4 dan xfs. Zfsonlinux tidak mendukung atribut sama sekali saat ini)
sumber
lsattr
untuk membuat daftar atribut.rm
hal ini yang bahkan tidak pernah terpikir oleh saya ...Satu jawaban untuk pertanyaan ini menyatakan bahwa Anda dapat menghapus file dari direktori hanya jika
write
izinnya benar-benar salah! Cobalah! Berikanwrite
izin pada direktori saja dan coba hapus, Anda tidak bisa!Untuk menghapus file di dalam direktori, Anda memerlukan keduanya
write
danexecute
izin pada direktoriSekarang kembali ke pertanyaan: untuk menghapus file menggunakan
rm
Anda hanya menghapus informasi inode-nya dari direktori yaitu Anda bukanshredding
dari disk. Jika informasi inode file tidak ada di direktori Anda tidak dapat mengakses (juga karena Anda tidak dapat melihatnya karena tidak terdaftar oleh direktori induknya) yaitu dihapus untuk Anda.Dengan demikian untuk menghapus file dari direktori semua yang Anda izin pada direktori; izin pada file itu tidak relevan
sumber