Esiste un modo per impedire la cancellazione di alcuni file dalla directory di proprietà dell'utente?


42

Supponiamo che l'utente abbia Directory1 e contenga File1 File2 CantBeDeletedFile Come fare in modo che l'utente non possa mai eliminare CantBeDeletedFile ?

Se cambio la proprietà di Directory1 e rimuovo le autorizzazioni di scrittura, gli utenti non sarebbero in grado di eliminare alcun file. Inoltre non sarebbero in grado di aggiungere nuovi file ecc.

Voglio solo essere in grado di impostare alcuni file che non verrebbero mai eliminati.

Descrizione più specifica.

Sto creando profili utente. Sto creando i file di avvio dell'applicazione nel loro desktop . Quindi voglio impostare alcuni file di avvio (.desktop) e renderli così l'utente può solo avviarli e non possono rinominare né eliminare, basta avviare.

Attualmente se l'utente possiede la directory che contiene qualsiasi file. Può cancellare.

Se non esiste un modo generico per tutti * nix, si tratta di un FS Linux ed ext4.

Risposte:


40

(Non mi piace intromettermi nella casa degli utenti, penso che dovrebbero essere autorizzati a fare tutto ciò che vogliono fare con le loro case ... ma comunque ...)

Questo dovrebbe funzionare su Linux (almeno). Suppongo usersia già un membro del gruppo user. Una soluzione è cambiare la proprietà Directory1e impostare il bit appiccicoso nella directory:

chown root:user Directory1
chmod 1775 Directory1

Quindi utilizzare:

chown root Directory1/CantBeDeletedFile

Ora, usernon sarà possibile rimuovere questo file a causa del bit appiccicoso¹. Il userè ancora in grado di aggiungere / rimuovere i propri file in Directory1. Ma nota che non saranno in grado di eliminarli Directory1perché non verranno mai svuotati.

-
1. Quando il bit sticky è abilitato su una directory, gli utenti (diversi dal proprietario) possono solo rimuovere i propri file all'interno di una directory. Questo è usato su directory come le /tmpcui autorizzazioni sono 1777= rwxrwxrwt.


Anche a me non piace, ma gli utenti sono principianti nel mondo Linux. Se cancellano un lanciatore per coincidenza stanno iniziando a
inviare

Grazie funziona! Non sono sicuro di come procederò. Con chattr o in questo modo. Se fai per la tua strada. Posso ancora cancellare la Directory come root. Con la soluzione superiore (chattr) anche root non può cancellare la cartella.
Bakytn,

@bakytn: è solo una precauzione o hai effettivamente ricevuto la chiamata di supporto? Perché la maggior parte dei neofiti probabilmente avrà troppa paura di pasticciare con file che non conoscono.
Lie Ryan,

@Lie Ryan è sicuro al 100% che avrebbe richiesto assistenza. Ma sì, attualmente è solo una precauzione.
Bakytn,

Prima o poi le ruote di allenamento devono staccarsi ... e se non hanno imparato a guidare la bici l'incidente sarà qualcosa da vedere. Sono d'accordo con la risposta, probabilmente completato withcopious aiuto on-line e lo spam in scatola "Se 'accidentalmente' cancellato ThisDesktopFile, prima andare alla parete più vicina e sbattere la testa dura contro di esso 3 volte (per fortuna), e poi fare cp /here/is/the/master/ThisDesktopFile $HOME. Firmato : BOfH "
vonbrand,

63

Rendi il file immutabile con l' iattributo.

chattr +i file.desktop

vedi man chattrper maggiori informazioni.


8
Aggiungo questa nota perché non sono riuscito a dedurla dalla menzionata pagina man: chattrfunziona solo su filesystem ext2 / ext3 / ext4.
arte

Questo è veramente forte! Ha funzionato! Grazie Signore! Soluzione elegante, ma una limitazione. Perfino il root non può cancellare quei file senza prima renderlo mutabile. Ma in realtà è così bello. Non ero sicuro di quale risposta accettare. Accettato in modo più generico ma meno veloce
bakytn,

@manatwork funziona anche su XFS almeno, immagino che anche alcuni altri filesystem supportino questi attributi.
Ruslan,

Per 'annullare' questo comando, basta farechattr -i file.desktop
GreenRaccoon23

1
Ho appena provato questo su ZFS su Linux e ha funzionato. Volevo impedire la cancellazione di un file utilizzato per indicare al programma di backup baculadi ignorare la cartella.
drescherjm,

2

Non penso che ci sia un modo per impedire la cancellazione di un singolo file con le autorizzazioni dei file Unix, ma posso pensare a una soluzione alternativa: scrivere un demone che lo sostituisce quando viene rimosso. inotify-toolsè perfetto per questo genere di cose se sei su Linux.

Esistono alcuni modi per sostituire l'elemento eliminato: copiarne uno nuovo o conservare il file reale in un luogo sicuro e copiare semplicemente un collegamento nella directory dell'utente. Per il collegamento, è possibile utilizzare un collegamento simbolico o un collegamento reale. Vorrei iniziare con un collegamento simbolico, ma alcuni (pochissimi) programmi non gestiscono correttamente i collegamenti simbolici. Se scopri che l'utente incontra un programma come questo, usa invece un collegamento reale.


0

Un semplice

chmod -i filename

"proteggerà" quel file dall'eliminazione.

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

Puoi ancora eliminarlo, ma almeno devi essere abbastanza sicuro di quello che stai facendo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.