Questo potrebbe non riguardare davvero il rmcomando, poiché ci sono modi semplici per eliminare i file senza usarlo . Se il problema è che i tuoi amici rmusano 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 rmcomando 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 rmcomandi 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 rmcomando è 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 rmmodo 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 filefile
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 rmrichiesta prima dell'eliminazione può aiutare a prevenire alcuni errori.
Per aiutare le persone a evitare l' eliminazione accidentale di file rm, è possibile creare rmun alias di shell che viene effettivamente eseguito rm -i. Passando il -iflag per rmindurlo 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_aliaseso al .bashrcfile. 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/rmo annullandolo ( unalias rm).
- Esistono molte situazioni in cui non si verifica l'espansione dell'alias e in queste situazioni
rmnon 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 rmcomando fornito dal sistema :
Aliasing rma 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 rmsarà 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 rma 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, sudoti consente di eseguire programmi come un altro utente, dopo aver verificato che ti sia permesso farlo. passwdmodifica 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/sudoe /usr/bin/passwdpuò farlo perché hanno il bit setuid impostato, come mostrato da quello sche 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/rmnon ha s: i suoi permessi sono -rwxr-xr-x, mentre /usr/bin/passwde /usr/bin/sohanno -rwsr-xr-xinvece. Questo lo rende tale, indipendentemente da chi esegue passwdo 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), sudoe passwdsono sicure perché tali utilità sono scritte con molta attenzione in modo che possano fare solo cose che il chiamante dovrebbe essere autorizzato fare.
/bin/rmnon 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 sudoe passwdcontrollano chi li sta realmente eseguendo e controllano che qualcosa sia permesso prima di farlo; rmnon 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 rmUbuntu è 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.txtnella 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")'( pythonanziché python3nelle 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 rmcomando (per renderlo necessario una password, o in qualsiasi altro modo) o limitando l'accesso per rmnon impedirlo affatto.