GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué se permite incluso el terrible 'rm -rf /'?

¿Por qué no existe tal protección en el comando rm?

Ya hay tres garantías:

  • El -r conmutador, sin el cual no se puede eliminar un directorio.
  • El -i switch, que verifica que realmente desea eliminar lo que solicitó eliminar. Alias ​​rm a rm -i activa esa protección a menos que agregue el -f interruptor para apagarlo.
  • Propiedad de archivos, lo que impide que todos los usuarios menos root de eliminar el directorio raíz.

El conjunto de herramientas de Unix es como una motosierra:fue diseñado para hacer cosas muy poderosas y ser manejado por personas que entienden lo que están haciendo. Aquellos que pisan descuidadamente pueden terminar lastimándose. Esto no quiere decir que los experimentados no cometan errores, y obviamente Sun y otros sienten que los usuarios con root necesitan ser protegidos de sí mismos.

Sin embargo, ¿no debería este caso específico ser una excepción a esa regla?

La gente ha estado preguntando por qué no podemos poner un protector de hoja sobre el rm motosierra desde al menos la década de 1980. (Probablemente más tiempo, pero mi historia con Unix no se remonta más allá de eso). Tienes que hacerte más preguntas:

  • Dado que estamos agregando excepciones, ¿qué más debería considerarse sagrado? ¿Deberíamos evitar la eliminación recursiva de cualquier cosa en el directorio raíz para evitar errores igualmente devastadores como rm -rf /*? ? ¿Qué pasa con el directorio de inicio del usuario? ¿Qué pasa con /lib? o /bin ? ¿Tendríamos que tener una versión especial de rm? para evitar estos errores en sistemas con un diseño de sistema de archivos no tradicional?

  • ¿Dónde ponemos la aplicación de estas prohibiciones? Solo en rm ¿O le damos al kernel ese trabajo? Desde rm en realidad no elimina nada (hace muchas llamadas a unlink(2) y rmdir(2) basado en los argumentos), no habría forma de que el kernel detectara que rm realmente estaba buscando / hasta que llegó el momento de borrarlo. Desde la única llamada a rmdir(2) que alguna vez tendría éxito es cuando el directorio de destino está vacío, alcanzando ese punto con / significaría que el sistema ya está listo.


Depende de la distribución. El Linux anterior en el que estoy ahora lo permite (creo que no lo probé :-)) y los estados en man rm :

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

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

En muchas distribuciones recientes, debe agregar explícitamente --no-preserve-root para desactivar la protección. De lo contrario, no se ejecutará.

Con respecto a Ubuntu, consulte este problema donde se analiza este comportamiento.

La historia de esta protección según Wikipedia:

Sun Microsystems presentó rm -rf / protección en Solaris 10, lanzado por primera vez en 2005. Al ejecutar el comando, el sistema ahora informa que la eliminación de / No se permite. Poco después, se introdujo la misma funcionalidad en la versión FreeBSD de rm utilidad. GNU rm se niega a ejecutar rm -rf / si el --preserve-root se da la opción, que ha sido la predeterminada desde que se lanzó la versión 6.4 de GNU Core Utilities en 2006.


Linux
  1. ¿Por qué el servidor bloqueó mi IP?

  2. ¿Cómo Instalar R 3.3.1 En El Directorio Propio?

  3. Linux:¿por qué el directorio raíz se indica con un signo /?

  4. ¿Por qué no puedo usar Cd en un script Bash?

  5. ¿La forma más rápida de extraer un Iso?

Cómo obtener el tamaño de un directorio en Linux

El comando find Directory de Linux:Explicación

¿Por qué una carpeta debe ser ejecutable?

¿Por qué no funciona sftp rmdir?

No se permite usar chown para cambiar el propietario del grupo de un directorio... ¿Por qué?

¿Por qué el directorio raíz se indica con un signo /?