суббота, 12 апреля 2008 г.

Шифрование домашнего раздела в GNU/Linux. Ещё одна инструкция.

Решил на днях поиграться с шифрованием разделов. Но не нашёл инструкции, которая была бы мне понятно и содержала нужные и правильные для меня советы и объяснения. Как известно, в мире свободного ПО хорошо действует принцип "если тебе чего-то не хватает, то сделай это сам". Потому и пишу эту инструкцию - не только для других, но и для себя.

Итак, имеется следующая задача:
- зашифровать домашний раздел - при его монтировании система запрашивает пароль.
- при подключении жесткого диска с домашним разделом к другому компьютеру, операционной системе и программам по разметке жестких дисков раздел должен видиться как пустой неразмеченный.
Один из минусов данного подхода - если ноутбук (для десктопа я считаю это не актуальным) переводится в режим гибернации (hibernate), то при возвращении его к жизни запроса пароля, к сожалению (а хотелось бы), ещё раз не происходит - т.к. домашний раздел уже подмонтирован. Возможно, проблему решит шифрование swap-раздела.

Update
: танцы с бубном вокруг шифрования swap-раздела к успеху не привели...

Примечание. Перед началом операции во-первых, НАСТОЯТЕЛЬНО рекомендуется сбэкапить все важные данные. Во-вторых, перед вводом команд необходимо перейти в режим суперпользователя. Думаю, если Вы решили зашифровать раздел, Вам не надо рассказывать, что такое режим суперпользователя и как в этот самый режим перейти.

В попытках найти уже существующие решения, наткнулся на три статьи, но ни одна из них не покрывала мою задачу так, как это нужно мне:
Tuxedo Live - ряд ошибок, в том числе грубых; некоторые команды и применённые принципы не пояснены.
Прикладная Дебианавтика - инструкция правильная, но слишком исчерпывающая; решение описано скорее для серверных машин с применением LVM-разделов.
Продвинутый способ шифрования разделов в Linux@Форум "Античат" - пособие грамотное, но слишком уж параноидальное. Единственное, что оттуда подчерпнул - инструкция о том, как забить раздел случайными данными и как узнать, сколько ещё осталось:
узнаём PID процесса: ps ax | grep "dd if"; а затем получаем информацию о том, сколько случайных данных уже записано: kill -USR1 pid

Возможно, структура этой заметки покажется читателю странной, но, как было сказано выше, заметка в первую очередь публикуется для автора, а так автору понятней всего.
Приступим.
0. Устанавливаем необходимые пакеты. Для шифрования будут использоваться cryptsetup и dm-crypt.
1. Форматируем будущий домашний раздел в целевую файловую систему.
2. Забиваем раздел случайными данными, чтобы в обычном состоянии раздел казался пустым - если Вам это не надо, то можете пропустить этот шаг.

Примечание: наполнение раздела случайными данными - очень длительная процедура. В моём случае домашний раздел на 60GB наполнился за 5-8 часов. Т.е. в этом случае имеет смысл сделать такую процедуру перед сном. Тогда на утро раздел будет готов.

Если же Вам не нужно делать раздел "неработающим", тогда будет наблюдаться интереснейшая вещь - если Вы после этого подключите зашифрованный, но не забитый случайными данными раздел к компьютеру, на котором установлена ОС GNU/Linux с пакетами для шифрования, то выскочет окно с сообщением о том, что этот раздел зашифрован и необходимо ввести пароль. Если пароль правильный, то раздел подмонтируется и Вы получите к разделу доступ.

3. Шифруем домашний раздел; с необходимыми параметрами шифрования и паролем.
4. Редактируем любимым текстовым редактором файл /etc/crypttab в соответствии с параметрами шифрования.
5. Перезапускаем службу шифрования дисков cryptdisks. Если всё правильно, то появится предложение ввести LUKS-пароль. Если пароль введён правильно и нигде нет ошибок, то служба шифрования успешно перезапустится. Если нет, то появится предупреждение или ошибка. Значит где-то что-то неправильно.
6. Форматируем уже зашифрованный домашний раздел в целевую файловую систему.
7. Редактируем, опять же, любимым текстовым редактором, /etc/fstab таким образом, чтобы в качестве домашнего раздела монтировался свежезашифрованный раздел.
8. Монтируем зашифрованный будущий домашний раздел.
9. Копируем на него структуру раздела /home без изменений.
10. Перезагружаем систему, вводим при загрузке пароль и работаем с домашним зашифрованным разделом на отдельном логическом диске.

Подведём итоги. Магические слова:
{
/dev/sdaN - раздел, который будет зашифрован и станет домашним;
name - имя, эдакая метка зашифрованного раздела.
В моём случае N=3; name=home; файловая система - ext3; текстовый редактор - gedit
}
0. apt-get install dmsetup cryptsetup fuse-utils
1. mkfs -t ext3 /dev/sdaN
2. dd if=/dev/urandom of=/dev/sdaN
3. cryptsetup -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/sdaN
4. gedit /etc/crypttab
добавляем строчку:
name /dev/sdaN none luks,cipher=aes-cbc-essiv:sha256
5. /etc/init.d/cryptdisks restart
6. mkfs -t ext3 /dev/mapper/name
7. gedit /etc/fstab
комментируем строку с /home, если она была;
добавляем другую:
/dev/mapper/name /home ext3 defaults
8. mkdir /mnt/home; mount /dev/mapper/name /mnt/home
9. cp -axv /home/* /mnt/home/
10. reboot

И помните, если Вы не страдаете паранойей, то это ещё вовсе не означает, что ОНИ за Вами не наблюдают... :-)

Комментариев нет: