Затираем диск безвозвратно в Linux.
Опубликовано 14.07.2015 пользователем Johhny
При передаче/продаже кому-либо накопителя невольно задумываешься: не полезут ли восстанавливать там стертую информацию и как удалить файлы безвозвратно. В статье будем использовать команду dd, которая есть практически в каждом популярном Linux-дистрибутиве, для полного затирания данных на флешке.
Возьмем для примера флешку, на которой записан файл: some_interesting.txt Посмотрим все подключенные накопители, зарегистрированные в системе:
sdb — это наш 8Гб USB Flash drive.
Теперь чистим ее как обычно. Вроде все хорошо, но существует множество программ, которые легко восстановят нам эту информацию. Чтобы убедиться, что ничего на самом деле не стерто воспользуемся командой:
dd if=/dev/sdb | hexdump -C
Бам! Вот и содержимое нашего текстового файла:
Для того чтобы правильно затереть диск потребуется его полная перезапись. Перезаписать можно случайными данными:
dd if=/dev/urandom of=/dev/sdb
dd if=/dev/zero of=/dev/sdb
После этого убедимся, что ничего уже не восстановить:
dd if=/dev/sdb | hexdump -C
Существует мнение об остаточной намагниченности после перезаписи данных и большое количество споров по этому поводу. Если паранойя не отпускает, можно перестраховаться и выполнить несколько циклов записи.
Источник
Уничтожение данных на жестком диске в Linux
Когда мы удаляем файл из файловой системы, данные физически не удаляются: операционная система просто отмечает область, ранее занятую файлом, как свободную и делает ее доступной для хранения новой информации. Единственный способ убедиться, что данные действительно удалены с устройства, – перезаписать их другими данными. Если диск с конфиденциальной информацией меняет владельца и вы боитесь, что она может попасть не в те руки необходимо предпринять определенные действия.
Многие криминалистические инструменты с открытым исходным кодом находятся в свободном доступе в Интернете, и их можно использовать для извлечения потерянных или удаленных данных с жесткого диска. Многие из них настолько просты в использовании, что обычные пользователи настольных компьютеров также могут загрузить их и достать данные.
Рассмотрим некоторые инструменты, которые мы можем использовать, чтобы полностью стереть данные на устройстве.
Стирание данных с использованием dd
Утилита dd – мощная программа, включенная по умолчанию во все основные дистрибутивы Linux. С ее помощью мы можем заполнить содержимое диска нулями или случайными данными. В обоих случаях мы можем использовать данные, сгенерированные специальными файлами: /dev/zero и dev/urandom (или /dev/random) соответственно. Первый возвращает нули каждый раз, когда над ним выполняется операция чтения; второй возвращает случайные байты, используя генератор случайных чисел ядра Linux.
Чтобы заполнить диск нулями, мы можем запустить:
Чтобы использовать случайные данные, вместо этого:
Стирание данных с помощью shred
Основное назначение данной утилиты состоит в том, чтобы перезаписать файлы и при необходимости удалить их. Утилита основана на предположении , что файловая система перезаписывает данные на месте. Однако приложение может не позволить нам достичь ожидаемого результата. Например, в журналируемой файловой системе, таких как ext4 (пожалуй наиболее часто используемая файловая система Linux), если она смонтирована с опцией data=journal.
При монтировании файловой системы ext4 с опциями data=ordered или data=writeback (первая используется по умолчанию) данные записываются в основную файловую систему после фиксации метаданных в журнале. В обоих случаях shred работает нормально, что дает ожидаемые результаты. При использовании опции data=journal помимо метаданных в журнал файловой системы записываются также и сами данные и лишь затем данные записываются в основную файловую систему. Легко понять, почему это может вызвать проблемы.
Рассмотрим несколько примеров использования приложения. Предположим, мы хотим безопасно содержимое файла с именем «test».
Все, что нам нужно сделать, это запустить следующую команду (здесь мы используем опцию -v, чтобы сделать программу более подробной):
Вот что мы можем видеть после выполнения команды:
По умолчанию приложение переписывает указанный файл случайными данными в три прохода. Количество проходов можно изменить с помощью опции -n. Чтобы переопределить файл 6 раз, мы запустим:
В некоторых случаях мы можем скрыть тот факт, что операция удаления была выполнена для файла или устройства. В этих ситуациях мы можем использовать опцию программы -z (сокращение от –zero), чтобы заставить программу выполнить дополнительный проход нулями:
Из подробного вывода команды мы действительно можем заметить, как выполняется последний проход, записав нули ( 000000).
Помимо работы с файлами shred позволяет производить такие же операции с разделами. Например, нам необходимо навсегда затереть информацию на диске sda:
Источник
Как стереть свободное место на диске в Linux?
Когда файл удален, его содержимое все равно может остаться в файловой системе, если явно не перезаписано чем-то другим. Команда wipe может безопасно удалять файлы, но не позволяет стереть свободное дисковое пространство, не используемое никакими файлами.
Что я должен использовать для достижения этой цели?
Предупреждение: Современное оборудование для дисков / SSD и современные файловые системы могут сжимать данные в местах, где вы не можете их удалить, поэтому этот процесс может все же оставить данные на диске. Единственными безопасными способами очистки данных являются команда ATA Secure Erase (если реализовано правильно) или физическое уничтожение. Также см. Как я могу надежно стереть всю информацию на жестком диске?
Вы можете использовать набор инструментов, который называется secure-delete.
Это имеет четыре инструмента:
srm — надежно удалить существующий файл
smem — надежно удалить следы файла из оперативной памяти
sfill — стереть все пространство, помеченное как пустое на вашем жестком диске
sswap — стереть все данные из пространства подкачки.
Из справочной страницы srm
srm предназначен для безопасного удаления данных на носителях, которые не могут быть восстановлены ворами, правоохранительными органами или другими угрозами. Алгоритм очистки основан на статье «Безопасное удаление данных из магнитной и твердотельной памяти», представленной на 6-м симпозиуме по безопасности Usenix Питером Гутманом, одним из ведущих гражданских криптографов.
Процесс безопасного удаления данных в srm выглядит следующим образом:
- 1 проход с 0xff
- 5 случайных проходов. /dev/urandom используется для безопасного RNG, если доступно.
- 27 проходов со специальными значениями, определенными Питером Гутманом.
- 5 случайных проходов. /dev/urandom используется для безопасного RNG, если доступно.
- Переименуйте файл в случайное значение
- Усекать файл
В качестве дополнительной меры безопасности файл открывается в режиме O_SYNC и после каждого прохода выполняется fsync() вызов. srm записывает 32k блоков с целью увеличения скорости, заполняя буферы дисковых кешей, чтобы заставить их сбрасывать и перезаписывать старые данные, которые принадлежали файлу.
Самый быстрый способ, если вам нужен только один проход и вы просто хотите заменить все на нули, это:
(запускается из каталога в файловой системе, которую вы хотите стереть)
(эта sync команда является мерой паранойи, которая обеспечивает запись всех данных на диск — интеллектуальный менеджер кэша может сработать, что он может отменить запись для любых ожидающих блоков, когда файл не связан )
Во время этой операции будет время, когда в файловой системе вообще не будет свободного места, которое может составить десятки секунд, если результирующий файл будет большим и фрагментированным, поэтому его удаление займет некоторое время. Чтобы уменьшить время, когда свободное пространство полностью равно нулю:
Этого должно быть достаточно, чтобы кто-то не мог прочитать содержимое старого файла без дорогостоящей криминалистической операции. Для более безопасного, но более медленного варианта замените /dev/zero на /dev/urandom . Для большей паранойи выполните несколько шагов с помощью /dev/urandom , хотя, если вам нужно столько усилий, shred утилита из пакета coreutils — это путь:
Обратите внимание, что в приведенном выше примере маленький файл измельчается перед созданием большего, поэтому его можно удалить, как только завершится создание большего, вместо того, чтобы ждать, пока он будет уничтожен, оставляя файловую систему с нулевым свободным пространством на время, которое требуется. Процесс уничтожения занимает много времени над большим файлом, и если вы не пытаетесь что-то скрыть от АНБ, на самом деле IMO не требуется.
Все вышеперечисленное должно работать на любой файловой системе.
Ограничения на размер файла:
Как отмечает DanMoulding в комментарии ниже, это может иметь проблемы с ограничением размера файла в некоторых файловых системах.
Для FAT32 это определенно будет проблемой из-за ограничения файла в 2 ГБ: большинство томов больше, чем это в наши дни (8 ТБ — это ограничение размера тома IIRC). Вы можете обойти эту проблему, cat /dev/zero пропуская большие выходные данные, split чтобы сгенерировать несколько небольших файлов и соответственно настроить этапы уничтожения и удаления.
С ext2 / 3/4 это не так важно: для стандартного / общего блока 4K ограничение размера файла составляет 2 ТБ, поэтому для этого потребуется большой объем (максимальный размер тома в этих условиях составляет 16 ТБ).
С (все еще экспериментальными) btrfs максимальные размеры файлов и томов составляют огромные 16EiB.
Под NTFS максимальная длина файла в некоторых случаях даже превышает максимальную длину тома.
Виртуальные устройства
Как недавно упоминалось в комментариях, существуют дополнительные соображения для виртуальных устройств:
Для редко выделяемых виртуальных дисков другие методы, такие как используемые, zerofree будут быстрее (хотя в отличие от этого, cat и dd это не стандартный инструмент, на который можно положиться в значительной степени в любой UNIX-подобной ОС).
Имейте в виду, что обнуление блока на разреженном виртуальном устройстве может не стереть блок на базовом физическом устройстве, на самом деле, я бы сказал, что это маловероятно — менеджер виртуальных дисков просто сделает блок больше не используемым. так что это может быть выделено для чего-то еще позже.
Даже для виртуальных устройств фиксированного размера вы не можете контролировать физическое расположение устройства, поэтому его можно перемещать вокруг текущего местоположения или на новый набор физических дисков в любое время, и самое большее, что вы можете стереть, это текущее местоположение, а не любые предыдущие местоположения, в которых блок мог находиться в прошлом.
Для перечисленных выше проблем на виртуальных устройствах: если вы не управляете хостами и не можете безопасно стереть их нераспределенное пространство после очистки дисков в ВМ или перемещения виртуального устройства, вы ничего не можете с этим сделать после факт. Единственный выход — использовать полное шифрование диска с самого начала.так что ничто в незашифрованном виде не записано на физическом носителе. Конечно, в VM все еще может потребоваться очистка свободного пространства. Также обратите внимание, что FDE может сделать разреженные виртуальные устройства намного менее полезными, так как уровень виртуализации не может реально увидеть, какие блоки не используются. Если уровень файловой системы ОС отправляет команды обрезки на виртуальное устройство (как если бы это был SSD), и виртуальный контроллер интерпретирует их, то это может решить эту проблему, но я не знаю каких-либо обстоятельств, где это действительно происходит, и более широких обсуждение этого вопроса в другом месте (мы уже близки к тому, чтобы не обсуждать первоначальный вопрос, поэтому, если это вызвало у вас интерес, возможно, стоит поэкспериментировать и / или последующие вопросы).
Источник
Удаляем все данные с дисков в системе Ubuntu
Узнаем количество дисков в системе:
[sudo] password for ekzorchik:
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ab0a7
Device Boot Start End Blocks Id System
/dev/sda1 * 1 2497 20051968 83 Linux
/dev/sda2 2497 2611 916481 5 Extended
/dev/sda5 2497 2611 916480 82 Linux swap / Solaris
, в данном выводе видно, что существует один диск /dev/sda размером 21.5Gb
Чтобы наблюдать за процессом выполнения работы утилиты нужно доустановить в систему пакет pv:
$ sudo aptitude install pv
Затираем диск/диск нулями с отображение процесса:
$ pv -c | sudo dd if=/dev/zero of=/dev/sda bs=1M
$ pv -c | sudo dd if=/dev/zero of=/dev/sda bs=1M && sync
Видим время затрачиваемое на процесс.
На затирание диска потребовалось 1min 36sec:
$ pv -c | sudo dd if=/dev/zero of=/dev/sda bs=1M
bs — задает размер блока, т.е. количество информации, считываемой/записываемой за один раз
sync — Дополнять каждый входной блок до размера ibs путем добавления нулевых байт.
После при перезагрузки системы на экране монитора:
Таким способом можно затирать важную информацию на жестких дисках к примеру отдаваемых по гарантии. На этом всё, удачи.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.
Источник