Belirli dosyaların kullanıcı dizininden silinmesini engellemenin bir yolu var mı?


42

Hadi diyelim ki, kullanıcının sahip dizin1 ve içerdiği File1 File2 CantBeDeletedFile kullanıcı silmek için izin asla şekilde nasıl yapmak CantBeDeletedFile ?

Directory1'in mülkiyetini değiştirip yazma izinlerini kaldırırsam kullanıcılar herhangi bir dosyayı silemezler. Ayrıca yeni dosyalar ekleyemezlerdi.

Sadece asla silinmeyecek bazı dosyaları ayarlayabilmek istiyorum.

Daha spesifik bir açıklama.

Kullanıcı profilleri oluşturuyorum. Masaüstünde uygulama başlatıcısı dosyaları oluşturuyorum . Bu yüzden bazı başlatıcı dosyalarını (.desktop) ayarlamak ve kullanıcının sadece onları başlatabilmesi ve yeniden adlandıramaması veya silememesi, sadece başlatması için yapmak istiyorum.

Şu anda kullanıcı herhangi bir dosyayı içeren dizinin sahibi ise. Silebilir.

Tüm * nix için genel bir yol yoksa, bu bir Linux ve ext4 FS'dir.

Yanıtlar:


40

(İzinsiz kullanıcıların evinden hoşlanmıyorum, evleriyle ne yapmak istediklerini yapmalarına izin vermeleri gerektiğini düşünüyorum… ama yine de…)

Bu Linux üzerinde çalışmalı (en azından). Sanırım userzaten grubun bir üyesiydi user. Çözüm Directory1dizindeki yapışkan bitin sahipliğini değiştirmek ve ayarlamaktır:

chown root:user Directory1
chmod 1775 Directory1

Sonra kullan:

chown root Directory1/CantBeDeletedFile

Şimdi, useryapışkan bit¹ nedeniyle bu dosyayı kaldıramazsınız. userHala kendi dosyalarını eklemek / kaldırmak mümkün Directory1. Ancak silinebileceklerini unutmayın, Directory1çünkü asla boşaltılmayacak.

-
1. Yapışkan bit bir dizinde etkin olduğunda, kullanıcılar (sahip dışındaki kullanıcılar) yalnızca bir dizindeki kendi dosyalarını kaldırabilir. Bu, /tmpizinleri 1777= gibi dizinlerde kullanılır rwxrwxrwt.


Ben de beğenmedim, ama kullanıcılar Linux dünyasına yeniler. Eğer bir fırlatıcıyı tesadüfen
silerlerse

Teşekkürler işe yarıyor! Nasıl ilerleyeceğimden emin değilim. Chattr ile veya bu arada. Yoluna gidersen. Dizini hala bir kök olarak silebilirim. Üst çözümde (chattr) root bile klasörü silemez.
bakytn

@ bakytn: Bu sadece bir önlem mi, yoksa gerçekten destek çağrısını aldınız mı? Çünkü çoğu yeniler muhtemelen bilmedikleri dosyalarla uğraşmaktan korkacaklar.
Yalan Ryan

@Lie Ryan% 100 destek arayacaklarından emin. Ama evet, şu anda bu sadece bir önlem.
bakytn

Er ya da geç antreman tekerlekleri patlamak zorunda ... ve bisiklet sürmeyi öğrenmedilerse, kaza yapılacak bir şey olacak. Cevabı kabul ediyorum, muhtemelen çevrimiçi yardım ve istenmeyen posta destekliydi. "Yanlışlıkla 'ThisDesktopFile' sildiyseniz, ilk önce en yakın duvara gidin ve başınızı sertçe vurun (şans için), sonra imzalayın cp /here/is/the/master/ThisDesktopFile $HOME. : BOfH "
vonbrand

63

Dosyayı iözniteliği ile değişmez yapın .

chattr +i file.desktop

man chattrdaha fazla bilgi için bkz .


8
Bu notu, belirtilen man sayfasından çıkaramadığım için ekliyorum: chattryalnızca ext2 / ext3 / ext4 dosya sistemlerinde çalışır.
Manatwork

Bu çok havalı! İşe yaradı! Teşekkürler bayım! Zarif çözüm, ancak bir sınırlama. Kök bile bu dosyaları ilk çalıştırılabilir hale getirmeden silemez. Ama bu aslında çok havalı. Hangi cevabı kabul edeceğinden emin değildim. Daha genel bir yöntem olarak kabul edildi, ancak daha az hızlı
bakytn

@manatwork en azından XFS'de de çalışıyor, diğer bazı dosya sistemlerinin de bu özellikleri desteklediğini tahmin ediyorum.
Ruslan

Bu komutu 'geri almak' için, sadece yapınchattr -i file.desktop
GreenRaccoon23

1
Bunu Linux'ta zfs üzerinde test ettim ve işe yaradı. Yedekleme programına baculaklasörü ihmal etmesi talimatını vermek için kullanılan bir dosyanın silinmesini önlemek istedim .
drescherjm

2

Tek bir dosyanın Unix dosya izinleriyle silinmesini önlemenin bir yolu olduğunu sanmıyorum, ancak geçici bir çözüm bulabilirim: Kaldırıldığında değiştiren bir arka plan programı yaz. inotify-toolsLinux kullanıyorsanız bu tür şeyler için mükemmel.

Silinen öğeyi değiştirmenin birkaç yolu vardır: yenisini kopyalayın veya gerçek dosyayı güvenli bir yerde saklayın ve sadece bir kullanıcının bağlantısını kopyalayın. Bağlantı için, bir sembolik bağlantı veya sert bir bağlantı kullanabilirsiniz. Bir link link ile başlardım, ancak bazı (çok az sayıda) program, link linkleri doğru işlemez. Kullanıcının böyle bir programla karşılaştığını tespit ederseniz, bunun yerine sabit bir bağlantı kullanın.


0

Basit

chmod -i filename

Bu dosyayı silme işlemine karşı "koruyacak".

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

Hala silebilirsiniz, ancak en azından ne yaptığınız konusunda yeterince emin olmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.