Что происходит, когда я использую 'dd' для перезаписи диска, с которого работает Ubuntu?

Что будет, если я буду использовать

sudo dd if=/dev/zero of=/dev/sda

из установки Ubuntu, запущенной из /dev/sda?


Я попробовал это на виртуальной машине, и, кажется, правильно стер диск. Будет ли так каждый раз? Это безопасный способ "стереть" установку Ubuntu и все данные?

Мой вопрос несколько вдохновлен:

  1. Как удалить Ubuntu с компьютера?
  2. Как 'rm -rf /' может удалить все файлы в системе?,

5 ответов

Решение

Фактически, файловая система все еще смонтирована, и некоторые записи буферизуются, что означает, что они все еще находятся в ОЗУ и ожидают записи на диск. Скажем dd правильно перезаписывает все, и сразу за ним буферы сбрасываются, а некоторые потенциально конфиденциальные данные записываются обратно на диск. Так что нет, это не безопасный способ очистки диска.

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

Если вы хотите использовать какую-то функцию удаления паники, я предлагаю зашифровать ваш диск с помощью LUKS (это может сделать установщик Ubuntu), а затем следуйте моему ответу на Security Stack Exchange. Это включает в себя очистку шифровального заголовка, размер которого составляет всего 2 МБ, и для его перезаписи требуется менее секунды. Затем перезапустите систему, и ключи шифрования диска исчезнут из памяти, и их невозможно будет восстановить, поскольку сам криптхедер также исчез.

Я пожертвовал виртуальной машиной, используя немного более продвинутое использование dd заимствовано и немного изменено со страниц Arch Wiki.

Сначала установите хороший индикатор прогресса:

sudo apt-get install pv

А затем запустить "расширенный" dd команда

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null \
| base64)" -nosalt </dev/zero \
| pv -bartpes "$(sudo blockdev --getsize64 /dev/sda)" \
| sudo dd bs=64K of=/dev/sda

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

И ты должен мне одну ВМ:)

Рекомендации:

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

Большинство команд, которые вы должны выполнить после этого - в том числе reboot - не будет в кеше и так не будет работать. Так что, если вы находитесь в однопользовательском режиме, это будет очень хорошо, если вы находитесь в многопользовательском режиме, это сотрет подавляющее большинство данных. В идеале вы должны загружаться с другого носителя (возможно, даже с initrd), чтобы вы могли быть уверены, откуда поступают все записи.

Если вам нужна безопасная очистка, это не сработает, потому что все равно останутся следы исходных данных, если вы просто обнуляете их. Обычно вам требуется до трех случайных записей, что означает копирование с /dev/urandom вместо /dev/zero - намного медленнее, но безопаснее. Некоторые могут предложить вам использовать /dev/random который является устройством для "чистых" случайных данных - не псевдослучайных - но для этой цели вероятность того, что кому-то удастся взломать начальное число PRNG и успешно замаскировать данные, по существу незначительна.

Если вы действительно параноик, вам нужно бросить устройство хранения в печь, чтобы оно размагничивалось / разряжалось.

Он, как и в вашей виртуальной машине, сотрет диск и сделает вашу систему непригодной для использования.

Однако, если вы имеете в виду своего рода "удаление паники" dd может быть недостаточно быстрым для этого, и я не уверен, есть ли более быстрые команды или программы, обеспечивающие это в этом случае.

Должно работать, процесс запуска проходит в Ram и не нуждается в диске. В любом случае, я бы использовал живую систему, работающую с CD или USB. Существует даже dban, специализированный live linux для очистки дисков.

Перезапись диска нулями - это сохранение, но если вы достаточно параноидальны или у вас есть законные правила, вы можете перезаписывать случайные данные несколько раз.

Будьте осторожны при использовании перезаписи ssd не гарантирует удаление всех данных из-за выравнивания износа.

Если вы используете полное шифрование диска (luks), вам не нужно удалять полный диск, достаточно удалить заголовок luks.

Другие вопросы по тегам