Apakah ada cara untuk mencegah penghapusan file tertentu dari direktori milik pengguna?

42

Katakanlah pengguna memiliki Directory1 dan itu berisi File1 File2 CantBeDeletedFile Cara membuatnya sehingga pengguna tidak akan pernah diizinkan untuk menghapus CantBeDeletedFile ?

Jika saya mengubah kepemilikan Directory1 dan menghapus izin menulis, pengguna tidak akan dapat menghapus file apa pun. Mereka juga tidak akan dapat menambahkan file baru dll.

Saya hanya ingin dapat mengatur beberapa file yang tidak akan pernah dihapus.

Deskripsi yang lebih spesifik.

Saya membuat profil pengguna. Saya membuat file peluncur aplikasi di Desktop mereka . Jadi saya ingin mengatur beberapa file peluncur (.desktop) dan membuatnya jadi pengguna hanya dapat meluncurkannya dan mereka tidak dapat mengganti nama atau menghapus, luncurkan saja.

Saat ini jika pengguna memiliki direktori yang berisi file apa pun. Dia bisa menghapus.

Jika tidak ada cara umum untuk semua * nix, itu adalah Linux dan ext4 FS.

bakytn
sumber

Jawaban:

40

(Saya tidak suka mengganggu pengguna di rumah, saya pikir mereka harus diizinkan untuk melakukan apa pun yang mereka inginkan dengan rumah mereka ... tapi bagaimanapun ...)

Ini harus bekerja di linux (setidaknya). Saya berasumsi usersudah menjadi anggota grup user. Solusinya adalah mengubah kepemilikan Directory1dan mengatur bit sticky pada direktori:

chown root:user Directory1
chmod 1775 Directory1

Kemudian gunakan:

chown root Directory1/CantBeDeletedFile

Sekarang, usertidak akan dapat menghapus file ini karena bit yang lengket¹. The usermasih mampu menambah / menghapus file mereka sendiri di Directory1. Tetapi perhatikan bahwa mereka tidak akan dapat menghapus Directory1karena itu tidak akan pernah dikosongkan.

-
1. Ketika bit sticky diaktifkan pada direktori, pengguna (selain pemilik) hanya dapat menghapus file mereka sendiri di dalam direktori. Ini digunakan pada direktori seperti /tmpyang memiliki izin 1777= rwxrwxrwt.

Stéphane Gimenez
sumber
Saya juga tidak suka, tetapi pengguna adalah pemula di dunia Linux. JIKA mereka menghapus peluncur secara kebetulan mereka mulai mengirim spam pada dukungan teknis kami :)
bakytn
Terima kasih berhasil! Tidak yakin bagaimana saya akan melanjutkan. Dengan chattr atau dengan cara ini. Jika dilakukan di jalan Anda. Saya masih dapat menghapus Direktori sebagai root. Dengan solusi teratas (chattr) bahkan root tidak dapat menghapus folder.
bakytn
@bakytn: apakah ini hanya tindakan pencegahan atau apakah Anda benar-benar mendapatkan panggilan dukungan? Karena kebanyakan pemula mungkin akan terlalu takut untuk mengacaukan file yang tidak mereka ketahui.
Lie Ryan
@ Lie Ryan 100% yakin bahwa mereka akan meminta dukungan. Tapi ya, saat ini hanya tindakan pencegahan.
bakytn
Cepat atau lambat roda pelatihan harus lepas ... dan jika mereka belum belajar mengendarai sepeda, kecelakaan akan menjadi sesuatu yang patut dilihat. Saya setuju dengan jawabannya, mungkin dilengkapi withcopious on-line bantuan dan kaleng spam "Jika Anda 'tidak sengaja' dihapus ThisDesktopFile, pertama pergi ke dinding terdekat dan membenturkan kepala Anda keras menentangnya 3 kali (untuk keberuntungan), dan kemudian melakukan cp /here/is/the/master/ThisDesktopFile $HOME. Signed : BOfH "
vonbrand
63

Buat file tetap dengan iatribut.

chattr +i file.desktop

lihat man chattruntuk informasi lebih lanjut.

Keith
sumber
8
Saya menambahkan catatan ini karena saya tidak dapat menyimpulkannya dari halaman manual yang disebutkan: chattrhanya berfungsi pada filesystem ext2 / ext3 / ext4.
manatwork
Ini sangat keren! Berhasil! Terima kasih Pak! Solusi elegan, tetapi satu batasan. Bahkan root tidak dapat menghapus file-file itu tanpa terlebih dahulu membuatnya bisa berubah. Tapi sebenarnya ini sangat keren. Tidak yakin jawaban mana yang harus diterima. Diterima dengan cara yang lebih umum tetapi kurang cepat
bakytn
@manatwork juga berfungsi pada XFS setidaknya, saya kira beberapa filesystem lain juga mendukung atribut ini.
Ruslan
Untuk 'membatalkan' perintah ini, lakukan sajachattr -i file.desktop
GreenRaccoon23
1
Saya baru saja menguji ini di zfs di linux dan itu berhasil. Saya ingin mencegah penghapusan file yang digunakan untuk menginstruksikan program cadangan baculauntuk mengabaikan folder.
drescherjm
2

Saya tidak berpikir ada cara untuk mencegah penghapusan file individual dengan izin file Unix, tapi saya bisa memikirkan solusinya: menulis daemon yang menggantikannya ketika dihapus. inotify-toolssangat cocok untuk hal semacam ini jika Anda menggunakan Linux.

Ada beberapa cara Anda dapat mengganti item yang dihapus: salin yang baru di tempat, atau simpan file asli di tempat yang aman dan cukup salin tautan ke direktori pengguna. Untuk tautan, Anda bisa menggunakan symlink atau tautan keras. Saya akan mulai dengan symlink, tetapi beberapa (sangat sedikit) program tidak menangani symlink dengan benar. Jika ternyata pengguna menemukan program seperti ini, gunakan tautan keras.

Shawn J. Goff
sumber
0

Sederhana

chmod -i filename

agak akan "melindungi" file itu dari penghapusan.

rm filename
rm: remove write-protected regular file 'filename'?

Anda masih dapat menghapusnya, tetapi setidaknya Anda harus cukup yakin tentang apa yang Anda lakukan.

fiatjaf
sumber