Questo potrebbe non riguardare davvero il rm
comando, poiché ci sono modi semplici per eliminare i file senza usarlo . Se il problema è che i tuoi amici rm
usano involontariamente il comando, le soluzioni che limitano l'uso specifico di quel comando o lo fanno funzionare in modo diverso potrebbero essere di aiuto. Al contrario, se il problema è che i tuoi amici trattano deliberatamente i tuoi dati in un modo che non desideri, allora devi implementare misure di sicurezza effettive e nessuna soluzione che si concentri sul rm
comando stesso (o su qualsiasi set discreto di comandi) ti terrà al sicuro.
Devi controllare l'accesso o semplicemente prevenire errori onesti?
Supponendo che i tuoi amici sappiano che non vuoi che cancellino i tuoi file, ci sono due possibilità:
Potrebbero farlo apposta. In questo scenario, i tuoi amici eliminano deliberatamente i tuoi file e non puoi nemmeno fidarti di loro per provare a soddisfare i tuoi desideri su come trattano i tuoi dati quando usano il tuo computer. L'unica soluzione a questo problema è utilizzare un'effettiva misura di sicurezza efficace , come Thomas Ward ha spiegato in dettaglio . Spesso la misura migliore è impedire loro di utilizzare il computer. Ma farli utilizzare i propri account utente può fornire una certa protezione.
Potrebbero farlo per errore. In questo scenario, i tuoi amici sono estremamente inclini agli incidenti e continuano a eseguire rm
comandi che non avrebbero voluto. Vogliono trattare te e i tuoi dati con rispetto, ma sono davvero cattivi nel farlo in pratica perché continuano a eseguire il comando sbagliato, a eliminare il file sbagliato ... o qualcosa del genere. Anche se sarebbe bello credere che questo è ciò che sta accadendo, ti avverto di non dare per scontato che le persone che continuano a eliminare i tuoi dati dopo che hai detto loro di smettere stanno funzionando senza cattiva volontà.
Inoltre, anche se le loro intenzioni sono buone, fornire loro account utente separati è ancora il modo più infallibile per impedire loro di eliminare i file, oltre a non consentire loro di utilizzare il computer.
Se la situazione è davvero n. 2 - i tuoi amici non stanno cercando di eliminare i tuoi file ma hanno solo bisogno di aiuto per non cancellarli accidentalmente , e l'unico modo in cui li cancellano accidentalmente è attraverso l'uso involontario di un piccolo numero di comandi (come rm
) che hanno particolari problemi nell'utilizzare correttamente, quindi le tecniche nella risposta di Videonauth potrebbero essere di qualche utilità. Ma devi capire che non sono misure di sicurezza, perché il rm
comando è solo uno dei tanti modi semplici per eliminare i file . Vedi sotto per i dettagli.
Ti consiglio di chiederti: "La mia situazione è sostanzialmente la stessa di se io, piuttosto che le altre persone che usano il mio computer, stavo usando in rm
modo errato?"
Se la risposta è no , questa è una questione di sicurezza delle informazioni e devi impedire ai tuoi amici di utilizzare il tuo account utente. Se la risposta è sì , allora è possibile utilizzare gli stessi approcci usereste se si fossi quello abuso rm
:
- Formazione scolastica. I tuoi amici devono sapere cosa stanno facendo e come evitarlo.
- Modifiche all'interfaccia. Senza togliere l'effettiva capacità di eliminare i file (che richiede account utente separati), puoi rendere più difficile l' eliminazione accidentale dei file rendendola così in esecuzione da sola, senza ulteriori azioni, non eliminerà immediatamente . La risposta di Videonauth fornisce un approccio a questo. In questa risposta, ne presento un altro.
rm file
file
Ma anche se i tuoi amici non stanno provando a fare qualcosa di sbagliato, dovresti comunque considerare di farli usare i loro account utente separati . Ciò risolverà comunque il problema: le stesse misure di sicurezza che proteggono i dati dalla distruzione intenzionale li proteggeranno anche dalla distruzione involontaria. Anche senza intenti maliziosi, se qualcuno continua a fare qualcosa che non vuoi che faccia, non puoi fidarti che si astengano dal fare quella cosa.
Fare una rm
richiesta prima dell'eliminazione può aiutare a prevenire alcuni errori.
Per aiutare le persone a evitare l' eliminazione accidentale di file rm
, è possibile creare rm
un alias di shell che viene effettivamente eseguito rm -i
. Passando il -i
flag per rm
indurlo a richiedere all'utente prima di eliminare ogni file (vedi man rm
).
Puoi farlo (per il tuo account utente) aggiungendo alias rm='rm -i'
al tuo .bash_aliases
o al .bashrc
file. Vedi questa domanda e quella per i dettagli. Questo avrà effetto per le tue shell bash appena aperte.
Ciò non fornisce alcuna sicurezza effettiva e non è nemmeno infallibile nel prevenire errori, perché:
- Possono scegliere di procedere con l'eliminazione, quando richiesto.
- Possono bypassare l'alias in numerosi modi, anche eseguendolo
/bin/rm
o annullandolo ( unalias rm
).
- Esistono molte situazioni in cui non si verifica l'espansione dell'alias e in queste situazioni
rm
non verranno eseguite -i
.
- Possono ancora eliminare i file usando una delle tecniche per farlo che non richiedono
rm
(come nel caso dell'approccio di Videonauth - vedi sotto).
- Possono comunque danneggiare i dati senza eliminare alcun file, ad esempio sovrascrivendoli o modificandone in altro modo il contenuto (come nel caso dell'approccio di Videonauth).
Ma se non hai bisogno di sicurezza effettiva (vedi sopra), allora questa potrebbe essere la strada da percorrere. In confronto all'approccio di impedire ai tuoi amici di utilizzare il rm
comando fornito dal sistema :
Aliasing rm
a rm -i
è meno efficace nel prevenire gli errori - fino a quando si muovono su di utilizzare qualche altra tecnica per rimuovere i file. A quel punto, impedirgli di usare rm
sarà del tutto inefficace, anche se non stanno provando a fare qualcosa di sbagliato, dal momento che presumibilmente useranno unlink
(o uno qualsiasi degli innumerevoli altri comandi che rimuovono un file) con uguale spensieratezza.
D'altra parte, poiché l'espansione dell'alias si verifica solo in alcune situazioni - approssimativamente parlando, un uso interattivo ordinario della shell - i tuoi amici potrebbero pensare che verrà loro richiesto quando non sono realmente richiesti (perché il comando è in uno script, ad esempio, o rilasciato da una shell diversa). Il modo di Videonauth non ha questo problema, che è un vantaggio oggettivo di quel metodo alias rm='rm -i'
.
Quando viene eseguito uno script, a meno che non sia scritto deliberatamente per utilizzare gli alias, i tuoi alias non vengono espansi in esso. Ciò significa che aliasing rm
a rm -i
è molto improbabile che rompere nulla. Questo è un vantaggio oggettivo di alias rm='rm -i'
.
rm
non può fare nulla che nessun altro programma perfettamente normale non possa fare.
Non c'è davvero niente di speciale rm
. È un modo conveniente e auto-documentante per rimuovere i file, quindi limitare l'accesso ad esso rischia di rompere numerosi script che si basano su di esso. Ma è tutt'altro che l'unico modo per eliminare i file: è solo un normale programma.
Alcuni comandi eseguono attività che un utente limitato (non root ) non può eseguire senza eseguirle. Ad esempio, sudo
ti consente di eseguire programmi come un altro utente, dopo aver verificato che ti sia permesso farlo. passwd
modifica il database in cui sono archiviate le password degli utenti, ma ti consente solo di cambiare la tua password (a meno che tu non sia root, nel qual caso puoi cambiare la password di chiunque).
/usr/bin/sudo
e /usr/bin/passwd
può farlo perché hanno il bit setuid impostato, come mostrato da quello s
che appare nella colonna più a sinistra quando si esegue ls -l
:
ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root 60272 Feb 18 2016 /bin/rm
-rwsr-xr-x 1 root root 54256 Mar 29 2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo
Si noti che /bin/rm
non ha s
: i suoi permessi sono -rwxr-xr-x
, mentre /usr/bin/passwd
e /usr/bin/so
hanno -rwsr-xr-x
invece. Questo lo rende tale, indipendentemente da chi esegue passwd
o sudo
, in realtà viene eseguito come utente root, poiché root è il proprietario dell'eseguibile. (Esiste anche un bit setgid che, se impostato, fa eseguire gli eseguibili con l'identità del gruppo del proprietario del gruppo piuttosto che quella del chiamante.)
Ad eccezione di eventuali vulnerabilità di sicurezza che non sono state ancora scoperte (o che sono state scoperte ma non sono ancora state patchate), sudo
e passwd
sono sicure perché tali utilità sono scritte con molta attenzione in modo che possano fare solo cose che il chiamante dovrebbe essere autorizzato fare.
/bin/rm
non funziona in questo modo. Non è impostato perché non deve essere. I permessi della directory (e occasionalmente i permessi dei file ) controllano quali file un utente può cancellare e non hanno bisogno di diventare root per farlo. Solo per essere perfettamente chiari, per favore non impostare mai il bit setuidrm
. Le implicazioni per la sicurezza sarebbero disastrose, da allora, indipendentemente da chi corre rm
, è come se fosse stato root! (Ai programmi di utilità piacciono sudo
e passwd
controllano chi li sta realmente eseguendo e controllano che qualcosa sia permesso prima di farlo; rm
non fa nulla del genere.)
Controllare se il bit setuid (o setgid) è impostato su un eseguibile ti dirà se limitare chi può eseguirlo può migliorare la sicurezza. Gli eseguibili che non sono setuid (o setgid) non hanno alcuno stato speciale e chiunque può semplicemente copiarli ed eseguire la copia, portare la propria copia da un'altra macchina, scrivere uno script o un programma che fa la stessa cosa, o usare un altro programma per farlo.
Eliminazione di file senza rm
Il modo ovvio per eliminare un file senza rm
Ubuntu è quello di navigare fino alla sua posizione nel browser di file grafico (Nautilus, se si utilizza Unity o GNOME Shell) ed eliminare il file. Esistono anche numerosi comandi che possono essere utilizzati per eliminare un file da un terminale, senza mai utilizzarlo rm
.
Ad esempio, per rimuovere un file chiamato foo.txt
nella directory corrente, i seguenti comandi, che funzionano immediatamente su Ubuntu e non richiedono l'accesso rm
, lo faranno. (Per essere sicuro, li ho testati su un sistema minimo 16.04 installato con solo le utility di sistema standard, dopo l'eliminazione /bin/rm
.)
unlink foo.txt
busybox rm foo.txt
perl -e 'unlink("foo.txt")'
python3 -c 'import os; os.remove("foo.txt")'
( python
anziché python3
nelle versioni precedenti)
Tale elenco, ovviamente, non è affatto completo. Non è possibile un elenco completo di tali comandi. Prevenire l'eliminazione dei file è una delle cose che esistono account utente separati e autorizzazioni per file e directory da raggiungere. Funzionano molto bene per prevenirlo. Al contrario, cambiando il rm
comando (per renderlo necessario una password, o in qualsiasi altro modo) o limitando l'accesso per rm
non impedirlo affatto.