¿Por qué dd no está protegido contra escritura en el disco activo?

¿Por qué dd no está protegido contra escritura en el disco activo?

Yo uso mucho dd. Vivo con el miedo constante de cometer un error algún día, por ejemplo escribir en sda (disco de computadora) en lugar de sdb (disco USB) y luego borrar todo lo que tengo en mi computadora.

Sé que se supone que dd es una herramienta de usuario avanzado, pero aún así, no tiene sentido para mí que básicamente puedas arruinar toda tu computadora presionando la tecla incorrecta.

¿Por qué no existe una medida de seguridad que impida que dd escriba en el disco del que obtiene el comando? No estoy seguro de cómo alguien podría hacer esto a propósito.

Tenga en cuenta que no lo intenté yo mismo, solo leí sobre ello, por lo que podría estar equivocado en todo eso.

Respuesta1

Sé que se supone que dd es una herramienta de usuario avanzado, pero aún así, no tiene sentido para mí que básicamente puedas arruinar toda tu computadora presionando la tecla incorrecta.

Considere los tipos de herramientas eléctricas que se utilizan en la construcción civil y lo que puede arruinar si hace algo mal. ¿Se podrían hacer esas cosas más prevenibles? Probablemente, pero el contrapeso es en qué medida hacer que los accidentes sean más prevenibles hace que la herramienta sea menos útil y/o más incómoda.

Conducir automóviles es una analogía similar con consecuencias potencialmente mucho más nefastas y, sin embargo, los seres humanos se las arreglan para hacerlo todo el tiempo (demasiado, de hecho). Por supuesto, sería más seguro si lo hicieran más lentamente, pero colectivamente debemos decidir qué riesgos vale la pena correr. De manera similar, la computadora sería más segura si ddno existiera, pero como se considera que su utilidad supera sus riesgos, existe.

¿Por qué no existe una medida de seguridad que impida que dd escriba en el disco del que obtiene el comando?

De hecho, lo hay, ya que, de forma predeterminada, los archivos del dispositivo (como /dev/sda1) necesitan privilegios de superusuario para escribir. Entonces, a menos que esté trabajando como rooto a través de sudo, en realidad no puede arruinar toda su computadora con un botón usando dd.

Lo que nos lleva aPor qué existen todas las advertencias sobre la ejecución de comandos con privilegios de superusuario. Estas advertencias son muy frecuentes y creo que sería difícil terminar operando un sistema *nix sin haberlas visto, algo así como entrar en una zona de construcción sin notar elZONA DE CASCOseñales.

Si no tienes ningún motivo para estar en una zona de construcción, vete. Si lo hace, tome las precauciones de seguridad adecuadas. El mundo puede ser un lugar peligroso y algunos lugares más peligrosos que otros. No actúes sin pensar. Un grado de seguridad que garantiza que no pueda pasar nada malo (para que no tengas que molestarte en pensar) implica que tampoco puedes hacer mucho. A veces eso es deseable, otras no.

Respuesta2

Es razonable preguntarse por qué el comando dd no verifica primero si su destino contiene un sistema de archivos montado y luego solicita confirmación o requiere una marca especial. Una respuesta simple es que rompería cualquier script que espere poder usar dd de esta manera y que no esté diseñado para manejar entradas interactivas. Por ejemplo, puede ser razonable modificar la tabla de particiones de un dispositivo sin formato mientras se monta una partición de ese mismo dispositivo; solo debes tener cuidado de modificar solo el primer sector.

Hay una gran cantidad de sistemas Linux disponibles y es imposible saber qué tipo de configuraciones locas se le han ocurrido a la gente. Por lo tanto, es muy poco probable que los mantenedores de dd realicen un cambio incompatible con versiones anteriores que pueda causar problemas en un número desconocido de entornos.

Respuesta3

Para "agregar un pequeño paso, como una opción o un mensaje de confirmación", puede hacer lo que artm sugirió en los comentarios a su pregunta: usar un script contenedor.

En otras palabras, en lugar de tratar directamente con los argumentos de línea de comando algo desalentadores de dd directamente, cree un script en bash (o Python, etc.) que tome los argumentos de dd que le interesan, usando una sintaxis de opción que esté más cómodo con. El script verifica que los argumentos sean sensatos e imprime los argumentos (y posiblemente la línea de comando dd final) para que pueda verificar que todo esté como debería ser. Y luego el script le pregunta "¿Está bien continuar? [sí/N]", por lo que debe ingresar ysi desea que el script realmente ejecute la línea de comando dd que fue construida para usted.

Entonces, si no desea que el script nunca escriba en /dev/sda o sus particiones, puede hacer que sea imposible que lo haga. Para ayudarlo a verificar que realmente ha seleccionado los dispositivos de entrada y salida que deseaba, el script podría usar el comando blkid para obtener el UUID y la etiqueta del disco para esos dispositivos. Etc.

información relacionada