Як зашифрувати весь диск і операційну систему linux

Думаю кожен коли небудь замислювався як же убезпечити себе або свій сервер на випадок якщо прийдуть несподівані «гості» в масках. Ось і мені підвернулася завдання захистити локальний медиасервер від зазіхань, провівши пару днів за гугленніем і читанням мінлива / howto - мені вдалося це реалізувати. Скажу відразу, статей щодо шифрування дуже багато, але в основному вони розраховані на шифрування тільки певних розділів, або застаріли / містять багато помилок.

1. Весь гвинт (гвинти) повинні бути надійно зашифровані
2. На гвинтах не повинно бути абсолютно ніякої розбивки, так як ніби це новий (або стертий) гвинт
3. ОС повинна стояти на зашифрованих розділах
4. Повинна бути можливість збільшення дискового простору, шляхом додавання нових гвинтів
5. Завантаження системи без введення ключа від шифрованих даних

Для початку коротко поясню теорію як це все буде працювати: завантажувач системи і ключ доступу будуть зберігатися на невеликому (<50Mb) разделе флешки, при включении загрузчик разблокирует доступ к шифрованному винту, загружает ядро, подключает виртуальные разделы(LVM), далее происходит обычная загрузка системы. В качестве операционной системы был выбран Ububtu Server 9.10, но реализовать эту задачу можно на любой UNIX-like системе. Сразу оговорюсь, в самом инсталляторе есть возможность шифрования системы на этапе установки, но там нельзя реализовать пункты 1 и 2 из списка выше потому будем действовать в ручную.

Нам знадобиться:
1. Образ Ubuntu Server 9.10
2. LiveCD дистрибутив. Я взяв звичайний Ubuntu Desktop CD, так як він вміє працювати з шифрованими розділами «з коробки».
3. Флешка яка буде використовуватися для завантаження системи
4. Базовий знання з * nix систем
5. Прямі руки

ЕТАП 1. Підготовка флешки і жорсткого диска

а) Поділ флешки на розділи і створення ключа

Підключаємо флешку до комп'ютера на якому буде шифруватися гвинт і завантажується з LiveCD. Наше завдання створити на нашій флешці 2 розділи: перший займе майже весь простір і буде відформатований в FAT16, FAT32, NTFS (на ваш вибір), другий розділ робимо в кінці флешки на 50MB і форматіруем в ext2. Така розбивка виник не випадково - завдяки початкового розділу флешка буде повністю функціональна в будь-який ОС. Також в windows другий розділ буде недоступний - що є плюсом, якщо ваша флешка потрапить не в ті руки. Для створення розділів я скористався графічної утилітою GParted (була на LiveCD), але ніхто не заважає вам скористатися fdisk. Після створення розділів прімонтіруем їх в системі:

Тепер створимо файл-ключ за допомогою якого будемо шифрувати гвинт і зробимо його дублікат (про всяк випадок):

б) Підготовка гвинта для шифрування

Другий спосіб особисто я не перевірив так як знайшов вже після підготовки гвинта. У ньому використовується програма перевірки гвинта на BAD-блоки. Про швидкість даного способу і «як» рандомданних сказати нічого не можу.

Тепер, коли поверхню диска заповнена, пора його зашифрувати. Для цього скористаємося технологією LUKS.

Вас попередять про знищення даних, для підтвердження потрібно написати YES (великими літерами). Підключаємо шифрований диск:

Вводимо пароль і отримуємо нове блоковий пристрій / dev / mapper / drivespace. З отриманим пристроєм можна працювати як зі звичайним гвинтом.

в) Створення віртуальної розбивки на розділи (LVM)

Можна створити звичайні розділи і відформатувати їх, але такий спосіб не дозволить в майбутньому розширювати наші розділи (доведеться додавати нові) тому скористаємося технологією LVM. Коротко вона дозволяє в будь-який момент додати нові гвинти в пул і розширити логічні розділи на доданий вільне місце. Мій LiveCD завантажився без потрібних пакетів тому спочатку встановлюємо їх, а потім створюємо з нашого розшифрованого гвинта фізичний розділ і ділимо його на логічні.

Тепер у нас є ще 3 блочних пристрої / dev / mapper / vg-swap / dev / mapper / vg-root / dev / mapper / vg-data. Форматуємо їх в потрібні ФС.

Усе! Наш гвинт готовий до перенесення ОС на нього. Для підготовки системи нам знадобляться UUIDи гвинта і розділів тому збережемо їх у файл на флешці

ЕТАП 2. Підготовка операційної системи

а) Установка системи

Встановлювати нашу ОС потрібно або на окремий гвинт, або на другому комп'ютері (вирт. Машині). Перед установкою підключаємо нашу флешку. Установку краще робити в мінімальній конфігурації, налаштування вибираєте під свої потреби. Єдиний важливий момент - потрібно вказати щоб / boot встановлювався на другий розділ флешки відразу ж (щоб потім не переносити).

б) Встановлення додаткових пакетів, зміна налаштувань

Після завершення установки нам потрібно додати в систему пакети для підтримки шифрування і LVM і підправити деякі конфіги. Встановлюємо пакети (при підключенні інеті):

Правимо конфиг GRUB. В Ubuntu використовується GRUB2, тому правимо /boot/grub/grub.cfg. Шукаємо menuentry «Ubuntu, Linux 2.6.31-14-server» і трохи нижче міняємо
linux /vmlinuz-2.6.31-14-server root = UUID = 9a651089-88fa-46d6-b547-38d3e10d4e67 ro quiet splash
на
linux /vmlinuz-2.6.31-14-server root = / dev / mapper / vg-root ro quiet splash

Для / boot точку монтування вказуємо у вигляді UUID другого розділу флешки (можна взяти з файлу на флешці або подивитися заново в системі), це потрібно щоб система завжди монтувала правильний розділ незалежно від кількості підключених флешок / гвинтів.

Правимо / etc / crypttab
drivespace UUID = 090d14c1-e3c8-48e7-b123-6d9b8b2e502b / boot / mykey luks, cipher = aes-cbc-essiv: sha256
тут вказуємо UUID від нашого шифрованого гвинта (дивимося його в файлі на флешці)

в) Зміна initrd

Готуємо initrd для роботи з шифруванням і LVM. У файлі / etc / initramfs-tools / modules додаємо:

dm_mod
dm_crypt
sha256
aes_generic
Створюємо файл / etc / initramfs-tools / hooks / cryptokeys з таким скриптом:
PREREQ = ""

prereqs ()
echo "$ PREREQ"
>

case $ 1 in
prereqs)
prereqs
exit 0
;;
esac

if [. -x / sbin / cryptsetup]; then
exit 0
fi

Він скопіює наш файл-ключ в незвичайне місце всередині образу initrd, щоб зайвий раз флешки не монтувати. Створюємо файл / etc / initramfs-tools / scripts / local-top / cryptokeys зі скриптом:
PREREQ = "udev"

prereqs ()
echo "$ PREREQ»
>

case $ 1 in
# Get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
modprobe -b dm_crypt
modprobe -b aes_generic
modprobe -b sha256

while. / Sbin / cryptsetup -d = / etc / console / mykey luksOpen / dev / disk / by-uuid / 090d14c1-e3c8-48e7-b123-6d9b8b2e502b drivespace; do
echo «Try again. »
done
Він виконається в процесі завантаження initrd, завантажить потрібні модулі ядра і буде намагатися відкрити наш зашифрований гвинт з UUID = 090d14c1-e3c8-48e7-b123-6d9b8b2e502b. (Цикл був зроблений для випадку з пральний фразою замість ключа). Вам потрібно вписати сюди свій UUID від зашифрованого гвинта.
Тепер виконуємо:
sudo update-initramfs -u ALL

г) Упаковка системи для перенесення

Змонтуємо наш розділ з кореневої ФС в окрему папку і спакуємо на перший розділ флешки:

Тепер можна переносити систему.

ЕТАП 3. Перенесення системи

Тут все просто: підключаємо нашу флешку з бекапу, завантажується з LiveCD, підключаємо шифрований гвинт, встановлюємо пакет підтримки LVM, монтуємо віртуальний кореневий розділ (можливо спочатку доведеться виконати vgscan і vgmknodes щоб система побачила розділи), монтуємо флешку і розпаковуємо архів з системою.

Ну ось і все, перезавантажуємо комп'ютер і завантажується з флешки. Якщо все зроблено правильно, то через кілька секунд ви побачите напис Key slot 0 unlocked, значить ваш гвинт розшифрувати і підключився, після цього піде стандартне завантаження системи.

У разі домашнього комп'ютера така система дає вам можливість надійно захистити свою особисту інформацію та не дозволить нікому користуватися комп'ютером без вашого відома (без флешки); в разі сервера в організації, якщо до вас прийшла перевірка - висмикнули флешку і тицьнули reset і для експертів у вас неробочий / новий комп'ютер; для сервера у хостера я б ускладнив систему і зберігав ключ десь в мережі, якщо сервер відключать і заберуть, він не завантажиться без инета (а вам потрібно швидко прибрати доступ до ключа - щоб взагалі не завантажився).

Якщо у вас все запрацювало з першого разу, то можна сміливо видаляти всі файли з першого розділу флешки.

Обов'язково зробіть копію свого ключа, щоб не втратити доступ до своїх даних. Також непоганою ідеєю буде додати другий ключ у вигляді пароля (як це зробити можна прочитати в документації LUKS / cryptsetup). Організація стійкого до збоїв сховища на основі RAID1,5,6 також буде не зайвою при зберіганні цінної інформації.

При налаштуванні всієї цієї системи я спочатку змоделював її на віртуальній машині, а потім тільки переніс на реальний комп'ютер. Ще дуже хотілося б дізнатися думку юристів (бажано з України) на рахунок доказовою провини в поширенні піратського контенту, якщо експерти не зможуть дістатися до інформації (а це неможливо без ключа), але виявлять що гвинт зашифрований.

Схожі статті