Почему dd не защищен от записи на активный диск?

Почему dd не защищен от записи на активный диск?

Я часто использую dd. Я живу в постоянном страхе совершить ошибку в один прекрасный день, например, записать на sda (компьютерный диск) вместо sdb (USB-диск) и затем стереть все, что у меня есть на компьютере.

Я знаю, что dd считается инструментом для опытных пользователей, но все равно мне не кажется логичным, что можно испортить весь компьютер, нажав не ту клавишу.

Почему нет меры безопасности, которая не позволяет dd записывать на диск, с которого он получает команду? Не уверен, что кто-то мог сделать это намеренно.

Обратите внимание, что я сам этого не пробовал, я только читал об этом, так что могу ошибаться.

решение1

Я знаю, что dd считается инструментом для опытных пользователей, но все равно мне не кажется логичным, что можно испортить весь компьютер, нажав не ту клавишу.

Подумайте о видах электроинструментов, используемых в гражданском строительстве, и о том, что вы можете испортить, сделав одну маленькую ошибку. Можно ли сделать эти вещи более предотвратимыми? Вероятно, но противовесом будет то, в какой степени повышение предотвратимости несчастных случаев делает инструмент менее полезным и/или более неудобным.

Вождение автомобиля — похожая аналогия с потенциально гораздо более ужасными последствиями, и все же люди умудряются делать это постоянно (даже слишком часто, на самом деле). Конечно, было бы безопаснее, если бы они делали это медленнее, но мы коллективно решаем, на какие риски стоит пойти. Аналогично, компьютер был бы безопаснее, если бы его ddне было, но поскольку его полезность считается перевешивающей его риски, он есть.

Почему нет мер безопасности, которые не позволяют dd записывать данные на диск, с которого он получает команду?

На самом деле есть, так как по умолчанию файлы устройств (такие как /dev/sda1) требуют привилегий суперпользователя для записи. Так что если вы не работаете как rootили через sudo, вы на самом деле не можете испортить весь свой компьютер одной кнопкой, используя dd.

Что приводит нас кпочему существуют все эти предостережения относительно запуска команд с привилегиями суперпользователя. Эти предупреждения очень распространены, и я думаю, что было бы трудно работать с *nix-системой, не увидев их, это как попасть в зону строительства и не заметитьЗОНА КАСКИзнаки.

Если у вас нет причин находиться в зоне строительства, уходите. Если у вас есть, примите соответствующие меры предосторожности. Мир может быть опасным местом, и некоторые места опаснее других. Не действуйте необдуманно. Степень безопасности, которая гарантирует, что ничего плохого не произойдет — так что вам не нужно беспокоиться о размышлениях — подразумевает, что вы также не можете сделать многого. Иногда это желательно, иногда нет.

решение2

Разумно спросить, почему команда dd сначала не проверяет, содержит ли ее цель смонтированную файловую систему, а затем не запрашивает подтверждение или не требует специального флага. Один простой ответ заключается в том, что это сломает любые скрипты, которые ожидают возможности использовать dd таким образом и которые не предназначены для обработки интерактивного ввода. Например, может быть разумно изменить таблицу разделов необработанного устройства, пока раздел того же устройства смонтирован; вам просто нужно быть осторожным и изменить только первый сектор.

Существует огромное количество систем Linux, и невозможно узнать, какие безумные настройки придумали люди. Поэтому маловероятно, что разработчики dd внесут обратно-несовместимое изменение, которое вызовет проблемы для неизвестного количества сред.

решение3

Чтобы «добавить небольшой шаг, например опцию или сообщение с подтверждением», вы можете сделать то, что artm предложил в комментариях к вашему вопросу: использовать скрипт-оболочку.

Другими словами, вместо того, чтобы иметь дело напрямую с несколько пугающими аргументами командной строки dd, создайте скрипт в bash (или Python и т. д.), который берет аргументы dd, которые вам интересны, используя синтаксис опций, который вам более удобен. Скрипт проверяет, что аргументы разумны, и выводит аргументы (и, возможно, окончательную командную строку dd), чтобы вы могли убедиться, что все так, как должно быть. А затем скрипт спрашивает вас "OK to continue? [y/N]", поэтому вам нужно ввести, yесли вы хотите, чтобы скрипт действительно запустил командную строку dd, которую он для вас сконструировал.

Так что если вы никогда не хотите, чтобы скрипт писал в /dev/sda или его разделы, вы можете сделать так, чтобы это было невозможно. Чтобы помочь вам убедиться, что вы действительно выбрали устройства ввода и вывода, которые вы хотели, скрипт может использовать команду blkid, чтобы получить UUID и метку диска для этих устройств. И т. д.

Связанный контент