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

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

Sé que se supone que dd es una herramienta para usuarios avanzados, pero aún así, no tiene sentido para mí que básicamente puedas atornillar tu computadora al presionar la tecla equivocada.

¿Por qué no hay una medida de security que impida que dd escriba en el disco desde el que recibe el command? No estoy seguro de cómo alguien haría esto a propósito.

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

Es razonable preguntar por qué el command dd no comtesting primero si su destino contiene un sistema de files montado, y luego solicita confirmación o requiere un indicador especial. Una respuesta simple es que rompería todos los scripts que esperan poder usar dd de esta manera, y que no están diseñados para manejar inputs interactivas. Por ejemplo, puede ser razonable modificar la tabla de particiones de un dispositivo en bruto mientras se monta una partición de ese mismo dispositivo; solo debes tener cuidado de solo modificar el primer sector.

Hay una gran cantidad de sistemas Linux en la naturaleza, y es imposible saber qué tipo de locas configuraciones se han creado. Por lo tanto, es muy poco probable que los mantenedores de dd realicen un cambio incompatible con versiones anteriores que causaría problemas en una cantidad desconocida de entornos.

Sé que se supone que dd es una herramienta para usuarios avanzados, pero aún así, no tiene sentido para mí que básicamente puedas atornillar tu computadora al presionar la tecla equivocada.

Considere los types de herramientas eléctricas utilizadas en la construcción civil y lo que puede estropear haciendo una pequeña cosa mal. ¿Podrían esas cosas ser más prevenibles? Probablemente, pero el contra balance es en qué medida hacer los crashs más prevenibles hace que la herramienta sea less útil y / o más incómoda.

Conducir automobilees es una analogía similar con consecuencias potencialmente mucho más nefastas, y sin embargo los seres humanos logran hacer esto todo el time (de hecho, demasiado). Por supuesto, sería más seguro si lo hicieran más lento, pero colectivamente hemos decidido qué riesgos merecen la pena. De manera similar, la computadora estaría más segura si dd no existiera, pero como se considera que su utilidad supera sus riesgos, sí lo hace.

¿Por qué no hay una medida de security que impida que dd escriba en el disco desde el que recibe el command?

De hecho, existe, ya que por defecto los files del dispositivo (como /dev/sda1 ) necesitan privilegios de superusuario para escribir. Entonces, a less que esté trabajando como root o vía sudo , en realidad no puede atornillar toda su computadora con un button usando dd .

Lo cual nos lleva a explicar por qué existen todas las advertencias sobre ejecutar commands con privilegios de superusuario. Estas advertencias son muy frecuentes y creo que sería difícil terminar operando un sistema * nix sin haberlas visto, como entrar en una zona de construcción sin notar las señales de HARD HAT AREA .

Si no tiene una razón para estar en una zona de construcción, váyase. Si lo hace, tome las precauciones de security adecuadas. El mundo puede ser un lugar peligroso y algunos lugares más peligrosos que otros. No actúes sin pensar Un grado de security que garantice que nada malo pueda pasar, para que no tenga que molestarse en pensar, implica que tampoco puede hacer mucho. A veces eso es deseable, a veces no lo es.

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

En otras palabras, en lugar de tratar directamente con los arguments de la command-line algo desalentadores de dd directamente, cree un script en bash (o Python, etc.) que tome los arguments dd que le interesan, usando una syntax de opción que usted más cómodo con. El script verifica que los arguments sean razonables e imprime los arguments (y posiblemente la línea de command final dd) para que pueda verificar que todo esté como debe ser. Y luego, la secuencia de commands le pregunta "¿OK para continuar? [Y / N]", por lo que debe ingresar y si desea que la secuencia de commands realmente ejecute la línea de command dd que ha creado para usted.

Por lo tanto, si nunca desea que el script escriba en / dev / sda o sus particiones, puede hacer que sea imposible hacerlo. Para ayudarlo a verificar que ha seleccionado realmente los dispositivos de input y salida que pretendía, el script podría usar el command blkid para get el UUID y la label del disco para esos dispositivos. Etc.