È possibile creare un file con permessi completi per tutti ma impossibile da eliminare?

15

Senza usare sudo, preferibilmente?

    
posta Evan 25.02.2013 - 18:52

4 risposte

3

Prova:

chattr +i filename

Se lo fai, renderà il file undelete-able anche da root user - usa con cautela.

    
risposta data user135564 25.02.2013 - 19:28
23

No, questo non è possibile. Impossibile per gli utenti normali cancellare un file: sicuro.

  1. Avrai bisogno di sudo per impedire agli utenti di eliminare file. L'amministratore sarà sempre in grado di eliminare un file.

  2. sudo chattr +i test può impedire la cancellazione ma richiede sudo . Un semplice sudo chattr -i test rende possibile rimuovere il file. Nessun altro utente oltre a admin può utilizzare chattr .

E ... il semplice riavvio e la modalità di ripristino consentiranno a quella persona di eliminare quel file. Sarebbe un rischio per la sicurezza se esistesse un metodo per non essere mai in grado di cancellare un file.

    
risposta data Rinzwind 25.02.2013 - 19:58
8

È un po 'grezzo, ma questo è vicino - se si rimuove l'accesso in scrittura sulla directory, i file al suo interno non possono essere cancellati. E non richiede sudo se lo possiedi:

=^_^= [email protected]:~$ mkdir test
=^_^= [email protected]:~$ touch test/delme
=^_^= [email protected]:~$ chmod a-w test
=^_^= [email protected]:~$ echo 'Hello' > test/delme 
=^_^= [email protected]:~$ cat test/delme 
Hello
=^_^= [email protected]:~$ rm test/delme 
rm: cannot remove 'test/delme': Permission denied

Quindi puoi impostare le autorizzazioni sul file stesso come desideri.

Inoltre, come dichiarato da @Rinzwind, ci sono sicuramente molti modi per aggirarlo.

    
risposta data Izkata 25.02.2013 - 23:43
8

Per eliminare un file, è necessario il permesso di scrittura per tutte le directory a cui è collegato il file. Per scollegarlo da una directory, è necessario disporre dell'autorizzazione alla scrittura per tale directory.

Quindi, se dai il permesso di scrittura (o anche la proprietà) al file ma non alla directory o alle directory a cui quel file è collegato, quel file non può essere cancellato.

Il modo migliore per ottenerlo sarebbe quello di collegare quel file a una directory che appartiene a root e che non è scrivibile da nessuno. Potresti renderlo di tua proprietà invece che significherebbe sia tu che root potresti eliminarlo.

Ciò consentirebbe comunque agli altri utenti di collegare quel file ad altre directory e di scollegarlo da lì in poi, ma non sarebbero comunque in grado di eliminare il file in quanto sarebbero in grado di scollegarlo dalla propria directory.

Si noti che per far funzionare tutto ciò, il permesso di scrittura di ogni componente del percorso nel file dovrebbe essere controllato. Perché ad esempio se il file è /a/b/the-file e hai /a/b non è scrivibile da nessuno ma tutti hanno accesso in scrittura a /a , quindi potrebbero rinominare /a/b in qualcos'altro e ricreare il proprio /a/b e crearne il loro proprio /a/b/the-file lì.

    
risposta data Stéphane Chazelas 25.02.2013 - 23:57

Leggi altre domande sui tag