GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il terribile 'rm -rf /' è persino permesso?

Perché non esiste tale protezione nel comando rm?

Ci sono già tre salvaguardie:

  • Il -r switch, senza il quale una directory non può essere rimossa.
  • Il -i switch, che verifica che tu voglia effettivamente eliminare ciò che hai chiesto di eliminare. Alias ​​rm a rm -i attiva tale protezione a meno che tu non aggiunga il -f passare per spegnerlo.
  • Proprietà del file, che impedisce a tutti gli utenti tranne root dall'eliminazione della directory principale.

Il set di strumenti Unix è come una motosega:è stato progettato per fare cose molto potenti ed essere maneggiato da persone che capiscono cosa stanno facendo. Coloro che camminano con noncuranza rischiano di ferirsi. Questo non vuol dire che gli esperti non commettano errori, e ovviamente Sun e altri ritengono che gli utenti con root devono essere protetti da se stessi.

Tuttavia questo caso specifico non dovrebbe essere un'eccezione a questa regola?

La gente si è chiesta perché non possiamo mettere una protezione per la lama sul rm motosega almeno dagli anni '80. (Probabilmente più a lungo, ma la mia storia con Unix non va oltre.) Devi farti più domande:

  • Dal momento che stiamo aggiungendo eccezioni, cos'altro dovrebbe essere considerato sacro? Dovremmo impedire la cancellazione ricorsiva di qualsiasi cosa nella directory principale per evitare errori altrettanto devastanti come rm -rf /* ? E la home directory dell'utente? Che dire di /lib o /bin ? Dovremmo avere una versione speciale di rm prevenire questi errori su sistemi con un layout di file system non tradizionale?

  • Dove mettiamo l'applicazione di questi divieti? Solo in rm o diamo quel lavoro al kernel? Da rm in realtà non cancella nulla (fa molte chiamate a unlink(2) e rmdir(2) in base agli argomenti), non ci sarebbe modo per il kernel di rilevare quel rm stava davvero cercando / fino a quando non è arrivato il momento di cancellarlo. Poiché l'unica chiamata a rmdir(2) che avrebbe mai successo è quando la directory di destinazione è vuota, raggiungendo quel punto con / significherebbe che il sistema è già finito.


Dipende dalla distribuzione. Il vecchio Linux su cui mi trovo in questo momento lo consente (penso, non l'ho testato però :-) ) e indica in man rm :

   --no-preserve-root do not treat '/' specially (the default)

   --preserve-root
          fail to operate recursively on '/'

Su molte distribuzioni recenti, devi aggiungere esplicitamente --no-preserve-root per disabilitare la protezione. Altrimenti non verrà eseguito.

Per quanto riguarda Ubuntu, vedi questo numero in cui viene discusso questo comportamento.

La storia di questa protezione secondo Wikipedia:

Sun Microsystems ha introdotto rm -rf / protection in Solaris 10, rilasciato per la prima volta nel 2005. Dopo aver eseguito il comando, il sistema ora segnala che la rimozione di / non è permesso. Poco dopo, la stessa funzionalità è stata introdotta nella versione FreeBSD di rm utilità. GNU rm rifiuta di eseguire rm -rf / se --preserve-root viene data l'opzione, che è stata l'impostazione predefinita da quando la versione 6.4 di GNU Core Utilities è stata rilasciata nel 2006.


Linux
  1. Perché la dimensione di una directory è sempre di 4096 byte in unix?

  2. Perché una cartella deve essere eseguibile?

  3. perché sftp rmdir non funziona?

  4. L'utilizzo di chown per modificare il proprietario del gruppo di una directory non è consentito... Perché?

  5. Perché la directory principale è indicata da un segno /?

Come ottenere la dimensione di una directory in Linux

Linux:perché la directory principale è indicata con un segno /?

Perché non posso usare Cd in uno script Bash??

Rsync sta cambiando le autorizzazioni della directory?

Perché Rsync insiste sul fatto che c'è una differenza la seconda volta che lo eseguo?

Il comando Trova Directory di Linux:spiegato