thumb Когда вы удаляете файлы с помощью rm или в вашем любимом файловом менеджере, они не удаляются в прямом смысле этого слова, а только исключаются из индекса файловой системы и занятое ими место добавляется в список свободного места ОS, а сам файл находится всё там же где и был, пока занятое им место, не потребуется для другого файла или директории. Т.е. восстановить данный файл или директорию, не составит труда если на это место ничего не записывалось. Linux предлагает много инструментов для надёжного удаления данных.

Secure Delete Tools

Самым универсальным инструментом является пакет “Secure Delete Tools”.

По умолчанию утилиты пакета secure-delete используют алгоритм стирания, предложенный в докладе криптографа Питера Гутмана (Secure Deletion of Data from Magnetic and Solid-State Memory by Peter Gutmann, 1996).

Сначало все данные затираются значением 0xff. Пять раз данные перезаписываются значениями из /dev/urandom (случайные данные). 27 раз происходит перезапись специальным шаблоном разработанным Гутманом. Снова пять раз перезаписывается значением из /dev/urandom и наконец удаляется обычной командой rm.

В состав secure-delete входят:

  • srm — используется для удаления файлов или каталогов на жестком диске.
  • sdmem — уничтожает следы из оперативной памяти (RAM).
  • sswap — уничтожает следы данных из раздела подкачки (SWAP).
  • sfill — уничтожает следы данных из свободного пространства на жестком диске.

Примеры использования

Устанавливаем пакет:

sudo apt-get install secure-delete

  ##### srm

Использование srm аналогично rm. Соответственно, чтобы надёжно стереть директорию просто используйте srm вместо rm:

srm -r /home/user/private-photos

Для одного прохода надо добавить ключ s (--simple):

srm -sr /home/user/private-photos

Кроме режима -s есть ещё один упрощенный режим -m, делающий 7 проходов.

  ##### sdmem

Запуск в однопроходном режиме:

sudo sdmem -l -l

  ##### sswap

Узнаем где раздел с swap:

cat /proc/swaps

Отключаем swap (при условии, что он на /dev/sda2):

sudo swapoff /dev/sda2

Очищаем swap в однопроходном режиме:

sudo sswap -l -l /dev/sda2

Включаем swap:

sudo swapon /dev/sda2

  ##### sfill

Очистим всё свободное место в директории/точке монтирования:

sudo sfill -l -l /

Примечание! sfill создаст файл, который займёт всё свободное место.

  ### Shred

Можно воспользоваться стандартной утилитой shred. По умолчанию shred 25 раз заполняет место случайными значениями, но не удаляет файл. Для удаления нужно использовать параметр --remove или -u.

Удалить файл (25 проходов):

shred -u file

Удалить файл произвольным количеством проходов (например 35):

shred -u -n 35 file

Для удаления нескольких файлов можно указать их подряд, или удалить по маске:

shred -u -n 35 file1 file2 file3
shred -u -n 35 *.txt

Чтобы спрятать следы зачистки, можно использовать параметр -z, который добавит в конце файла нули. Это так же сделает файл непохожим на зашифрованный. Ещё иногда бывает полезен ключ -v (verbose), для подробного вывода прогресса.

Для удаления всего содержимого жёсткого диска:

shred /dev/sda

Примечание: Эта операция займёт много времени.

К сожалению, shred не умеет удалять каталоги.

  ### wipe

Установим wipe:

sudo apt-get install wipe

Для удаления каталога:

wipe -rf catalog
  • -r - рекурсивно.
  • -f - не спрашивая подтверждения (force).

  ### dd

Программа dd отлично подходит для безопасной очистки накопителей.

Примечание: Операции по очистке накопителей большого обьёма займут много время.

Узнаем раздела который необходимо очистить:

sudo fdisk -l

Для заполнения раздела накопителя нулями:

sudo dd if=/dev/zero of=/dev/<disk identifier> bs=4k

Или произвольными значениями (/dev/urandom):

sudo dd if=/dev/urandom of=/dev/<disk identifier> bs=4k

Но лучше использовать dd совместно с программой pv (pipe viewer), чтобы можно было видеть прогресс выполнения.

Установим pv:

sudo apt-get install pv

Заполним раздел накопителя нулями:

pv /dev/zero -s <disk size> | dd of=/dev/<disk identifier> bs=4k
  • обьём раздела для вычисления оставшегося время. Можно указать в байтах (например 80026361856) или в гигабайтах (например 80G). Узнать обьём можно также с помощью fdisk:
sudo fdisk -l

Теперь мы можем видеть прогресс выполнения и знаем сколько осталось ждать до конца процесса.

Ещё, с помощью dd, можно безопасно очистить свободное место на накопителе.

Очистить свободное место на разделе с корнем файловой системы заполнив его нулями:

dd if=/dev/zero of=/zerofile bs=4K

Или произвольными числами:

dd if=/dev/urandom of=/zerofile bs=4K

Примечание: Выполнять от обычного юзера.

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

А когда место на разделе закончится нужно удалить этот файл:

rm /zerofile

Примечание: В dd используется 512-байтный bs по умолчанию, который можно и нужно менять на оптимальный (у каждого свой) с помощью параметра bs=xx. С оптимально подобранным bs скорость работы dd может многократно увеличится.

  ### Вывод

Использование данных инструментов даёт определённую гарантию безопасного удаления данных, но для 100% гарантии, всё-таки, рекомендуется полное физическое уничтожение накопителя.

Примечание! Эти методы не подходят для твердотельных накопителей (SSD).


Arthur Gareginyan

Arthur Gareginyan

Arthur is a designer and full stack software engineer. He is the founder of MyCyberUniverse.com. His personal website can be found at arthurgareginyan.com. Check out his free WordPress plugins at wordpress.org.

Follow Arthur: