Bagaimana mencegah pengguna menghapus direktori?

9

Saya mencoba "chattr + i DIRNAME", itu hebat, tetapi saya tidak dapat membuat file di DIR setelah chattr. Apa lagi yang ada untuk mencegah pengguna menghapus direktori?

root@HOST ~] mkdir test
[root@HOST ~] chattr +i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
touch: cannot touch `sth': Permission denied
[root@HOST ~/test] cd ..
[root@HOST ~] chattr -i test
[root@HOST ~] cd test
[root@HOST ~/test] touch sth
[root@HOST ~/test] 

UPDATE: hanya penghapusan direktori yang penting, jadi saya masih perlu file yang akan dihapus di dalamnya

peter gasko
sumber
Lihatlah /tmpdan /var/tmp. Meskipun setiap pengguna dapat membuat file di sana, ia hanya dapat menghapus file / direktori sendiri, tetapi tidak pada direktori itu sendiri.
Nils

Jawaban:

3

Jadi apa yang salah dengan chown / chmod yang sederhana ?:

cd /tmp
mkdir question
sudo chown root:root question
[sudo] password for user: 
chmod 777 ./question
touch sth
rm sth
cd ..
rm question -rf
rm: cannot remove `question': Operation not permitted

OK, izinkan saya memberi tahu Anda apa yang salah dengan ini: setiap pengguna memiliki semua akses ke setiap file dalam questiondirektori karena 777izin. Lebih baik untuk

  • buat grup baru groupadd question
  • mkdir question
  • chown root:question ./question
  • chmod 770 ./question
  • tambahkan pengguna yang harus memiliki akses ke file ke grup baru: usermod -G group user

Trik penting di sini adalah direktori tersebut memiliki pemilik yang berbeda dari pengguna mana pun yang akan mencoba menghapusnya.

jippie
sumber
2
Tergantung juga di mana direktori ini berada. Jika seseorang dari grup pertanyaan memiliki hak rwx pada direktori yang berisi direktori pertanyaan, ia akan dapat menghapusnya.
Laurentiu Roescu
Tambahkan ekstra sudo chmod o+t ..untuk mengatur tbendera pada direktori induk. The tbendera akan melarang untuk menghapus file yang tidak dimiliki oleh pengguna. tbiasanya digunakan /tmpuntuk melakukan hal itu. UserA tidak dapat menghapus file yang dimiliki oleh UserB.
jippie
Atau sekali lagi cukup masukkan kepemilikan yang benar bit izin pada direktori.
jippie
Itu tidak bekerja dalam wadah buruh pelabuhan. :(
Kirby
13

Buat file ".protected" dan lakukan sebagai root

chattr +i .protected

Anda kemudian dapat menghapus semua file kecuali .protecteddalam direktori ini, sehingga direktori tidak dapat dihapus oleh pengguna lain.

Magnus
sumber
Sederhana, dan efektif. Jawaban yang bagus
Wug
Itu tidak bekerja dalam wadah buruh pelabuhan. :(
Kirby
1
Untuk menghapusnya, gunakan "chattr -i [nama file]" untuk menghapus atribut yang tidak dapat diubah.
emeraldhieu
3
chattr +a

harus melakukan pekerjaan. Anda dapat membuat file di dalamnya tetapi Anda tidak akan bisa menghapusnya.

Laurentiu Roescu
sumber
saya memperbarui pertanyaan
gasko peter