Як безпечно видалити файли в Linux

Позбавляйтеся від застарілих даних так само ретельно, як і від старих паперових документів. Ми розповімо вам про нюанси безпечного видалення файлів у Linux. У цьому докладному керівництві ми розглянемо команду `shred` та набір утиліт для надійного знищення даних.

Чому видалені файли можна відновити?

Коли ви видаляєте файл, він насправді не зникає з вашого жорсткого диска. Це пов’язано з тим, як файлова система працює з inode – структурами даних, що містять метадані про файли. Інформація про ім’я файлу, його розташування на диску, атрибути та дозволи зберігається в inode. Каталог, по суті, є файлом, що містить імена та inode файлів у ньому.

Коли ви використовуєте команду `rm` для видалення файлу, файлова система просто звільняє відповідний inode і змінює файл каталогу. Місце на диску, що займав файл, позначається як “вільне”. Це можна порівняти з тим, як у бібліотеці картку з каталогу книги видаляють, але сама книга залишається на полиці. Її все ще можна знайти.

Іншими словами, простір, який раніше займав файл, тепер доступний для запису нових даних. Однак вміст старого файлу залишається на своєму місці. Якщо ця ділянка диска не буде перезаписана, існує висока ймовірність відновлення видалених файлів.

Просте перезаписування файлів – це лише частина процесу повного їх знищення.

Важливо: не використовуйте ці методи для SSD

Ці методи призначені для традиційних електромеханічних жорстких дисків (HDD). Не застосовуйте їх до твердотільних накопичувачів (SSD). Це не тільки неефективно, але й призведе до зайвих циклів запису та зносу SSD. Для безпечного видалення даних з SSD використовуйте утиліти, надані виробником вашого накопичувача.

Команда `shred`: надійне стирання файлів

Команда `shred` розроблена для того, щоб перезаписувати файли, унеможливлюючи їх відновлення. Вона присутня в усіх основних дистрибутивах Linux, таких як Ubuntu, Fedora і Manjaro.

Для ілюстрації ми працюватимемо в каталозі `~/research`, де зберігаються текстові файли та підкаталоги з іншими файлами. Ми будемо вважати, що ці дані є конфіденційними і потребують повного видалення.

За допомогою команди `tree` ми можемо переглянути структуру каталогів. Параметр `-d` дозволяє відобразити лише каталоги, ігноруючи файли. Ось приклад структури:

tree -d

Подрібнення одного файлу за допомогою `shred`

Щоб безпечно видалити один файл, використовуємо команду `shred` з такими параметрами:

  • `u`: видалення файлу після перезапису.
  • `v`: виведення процесу стирання в термінал.
  • `z`: завершальне перезаписування нулями.
shred -uvz Preliminary_Notes.txt_01.txt

За замовчуванням `shred` перезаписує файл чотири рази: тричі випадковими даними, а потім нулями. Після цього файл видаляється, а метадані в inode перезаписуються.

Налаштування кількості проходів перезапису

За допомогою параметра `-n` можна задати кількість додаткових проходів перезапису (мінімально 1). Для трьох проходів загалом, потрібно задати `-n 2`.

shred -uvz -n 2 Preliminary_Notes.txt_02.txt

Як і очікувалося, `shred` виконав три проходи.

Менша кількість проходів означає швидше виконання, але чи це впливає на безпеку? Зазвичай трьох проходів достатньо для більшості випадків.

Стирання кількох файлів

Можна використовувати символи підстановки для обробки декількох файлів одночасно. Наприклад, `*` позначає будь-яку кількість символів, а `?` – один символ. Наступна команда видалить усі файли, що починаються з “Preliminary_Notes” у поточному каталозі.

shred -uvz -n 2 Preliminary_Notes_*.*

`shred` по черзі обробить кожен файл.

Команда `shred` не має рекурсивної опції, тому вона не підходить для видалення дерев каталогів.

Проблема з безпечним видаленням файлів

Попри всі переваги `shred`, існує важлива проблема. Сучасні журнальні файлові системи, такі як ext3 та ext4, використовують механізми, що запобігають втраті та пошкодженню даних. Через це немає гарантії, що перезаписування `shred` дійсно відбувається саме в тому місці на жорсткому диску, де зберігався видалений файл.

Якщо вам просто потрібно трохи ретельніше видалити файли, ніж це робить `rm`, то `shred` – хороший варіант. Але не варто вважати, що дані зникли назавжди і їх неможливо відновити.

Комплекс утиліт secure-delete

Утиліти `secure-delete` намагаються обійти механізми журналювання файлових систем і забезпечити надійне перезаписування даних. Але слід пам’ятати про ті ж самі застереження. Немає гарантії, що перезаписування відбувається саме там, де потрібно. Шанси на це вищі, але гарантії немає.

Утиліти `secure-delete` використовують таку послідовність дій:

  1. Перезапис байтами зі значенням `0xFF`.
  2. 5 перезаписів випадковими даними.
  3. 27 перезаписів спеціальними значеннями Пітера Гутманна.
  4. Ще 5 перезаписів випадковими даними.
  5. Перейменування файлу у випадкове значення.
  6. Обрізання файлу.

Якщо це здається надмірним, ви не самотні. Пітер Гутманн, автор цих методів, також вважає їх надмірними. У 1996 році він опублікував статтю про ці методи, що породила міф про необхідність застосування всіх їх одночасно.

Згодом Пітер Гутманн наголошував, що “достатньо надійного перезапису випадковими даними”.

Однак набір утиліт `secure-delete` використовує саме ці методи. Спочатку їх потрібно встановити.

Встановлення `secure-delete`

Для встановлення пакета на Ubuntu або Debian використовуйте `apt-get`. Для інших дистрибутивів застосовуйте відповідний менеджер пакетів.

sudo apt-get install secure-delete

Пакет `secure-delete` включає чотири команди:

  • `srm`: безпечна версія `rm` для видалення файлів з перезаписом.
  • `sfill`: інструмент для перезапису вільного місця на диску.
  • `sswap`: перезаписує розділ підкачки.
  • `sdmem`: очищує оперативну пам’ять (RAM).

Команда `srm`

Команда `srm` використовується подібно до `rm`. Параметр `-z` задає перезапис нулями, а `-v` – виведення інформації про процес. Для видалення одного файлу введіть:

srm -vz Chapter_One_01.txt

Ви помітите, що `srm` працює повільно. Він виводить інформацію про свій прогрес, але процес займає певний час.

Опція `-l` (зменшення безпеки) зменшує кількість проходів до двох, що прискорює процес.

srm -lvz Chapter_One_02.txt

`srm` повідомляє, що такий варіант менш безпечний, але видалення і перезапис все одно відбудуться.

Опція `-l` може бути використана двічі (`-ll`) для зменшення кількості проходів до одного.

srm -llvz Chapter_One_03.txt

Використання `srm` для кількох файлів

З `srm` можна використовувати символи підстановки. Ця команда видалить файли “Chapter_One_0?.txt”:

srm -vc Chapter_One_0?.txt

Файли будуть оброблятися `srm` по черзі.

Видалення каталогів та їх вмісту за допомогою `srm`

Параметр `-r` (рекурсивний) дозволяє `srm` видаляти підкаталоги та їх вміст. Передайте шлях до потрібного каталогу.

В цьому прикладі ми видаляємо весь каталог `~/research` та його вміст.

srm -vz *

srm почне обробляти файли і каталоги.

Процес може зайняти певний час. На тестовій машині видалення 200 файлів в трьох підкаталогах зайняло близько години.

В результаті всі файли та підкаталоги будуть видалені.

Команда `sfill`

Що робити, якщо ви стурбовані файлами, що були видалені за допомогою `rm`? Команда `sfill` перезаписує весь вільний простір на жорсткому диску.

Під час її виконання, вільне місце на диску зменшуватиметься. Коли процес закінчиться, все вільне місце знову стане доступним. На багатокористувацьких системах цей процес може призвести до проблем, тому його варто виконувати в неробочий час.

Навіть на комп’ютері одного користувача втрата місця на диску означає, що він стане непридатним для використання, поки `sfill` не завершить роботу. Ви можете запустити цю команду і залишити її на деякий час.

Щоб пришвидшити процес, використовуйте параметр `-l`. Також доступні параметри `-v` (докладний) та `-z` (нулі). Ось приклад безпечного перезапису вільного простору в каталозі `/home`:

sudo sfill -lvz /home

Процес може тривати дуже довго. На тестовому комп’ютері з жорстким диском 10 Гб, `sfill` працював всю ніч.

Процес може зайняти багато годин, навіть з опцією `-l`. Але в кінці кінців, ви повернетеся до командного рядка.

Команда `sswap`

Команда `sswap` перезаписує вміст розділу підкачки. Спочатку потрібно визначити цей розділ. Це можна зробити за допомогою команди `blkid`:

sudo blkid

Знайдіть слово “swap” та запам’ятайте блочний пристрій, до якого він підключений.

В цьому прикладі розділ підкачки знаходиться на `/dev/sda5`.

На час перезапису потрібно вимкнути розділ підкачки. Це робиться за допомогою команди `swapoff`:

sudo swapoff /dev/sda5

Тепер можна скористатися командою `sswap`:

Використовуємо `/dev/sda5` як аргумент, а також параметри `-v` (докладний) та `-ll` (зменшення безпеки):

sudo sswap -llv /dev/sda5

`sswap` почне перезаписувати розділ підкачки. Цей процес зазвичай займає менше часу, ніж `sfill`.

Після завершення процесу, потрібно знову активувати розділ підкачки за допомогою команди `swapon`:

sudo swapon /dev/sda5

Команда `sdmem`

Пакет `secure-delete` також має інструмент для очищення оперативної пам’яті (RAM).

Атака “холодного завантаження” вимагає фізичного доступу до комп’ютера невдовзі після його вимкнення. За допомогою цієї атаки можна спробувати отримати дані з мікросхем RAM.

Якщо вам потрібно захиститися від таких атак, то можна очистити RAM перед вимкненням комп’ютера. Для цього знову використаємо параметри `-v` та `-ll`:

sudo sdmem -vll

Термінал заповниться зірочками, що свідчить про роботу `sdmem`.

Простий варіант: шифрування диска

Замість безпечного видалення файлів, можна захистити жорсткий диск або домашню папку шифруванням.

В такому випадку ніхто не зможе отримати доступ до файлів, незалежно від того, видалені вони чи ні. Вам не потрібно буде постійно турбуватися про безпечне видалення даних, оскільки всі файли вже захищені.

Більшість дистрибутивів Linux пропонують шифрування під час встановлення. Якщо ви плануєте продати або передати комп’ютер іншому користувачу, шифрування також спростить процес.