Ubuntu — Шифруем home и swap в Ubuntu 9.10 Karmic
При установке (K)Ubuntu 9.10 Karmic (alternate) на очередную виртуальную машину обратил внимание на вопрос системы о том, желаю ли я зашифровать домашнюю директорию, я конечно же ответил "Да". Но при этом вспомнил что у самого домашняя машина была установлена без данной опции (давно устанавливалась, ещё 8.10 кажется была). Вобщем решил и себе сделать "апгрейд", а заодно зашифровать home и swap разделы...
Стоит заметить, что, проще наверное было бы переустановить систему с включенной опцией шифрования, но это же не "gentoo way" 🙂
К тому же стандартная поставка использует для шифрования eCryptfs и не шифрует swap. В чём разница? Это два разных подхода - eCryptfs шифрует на уровне файлов, а LUKS это блочное устройство (/dev/sdb5). Это как SSL и IPSec. У каждого есть свои плюсы и минусы.
Так что инструкция только для ознакомления. Внимание, при неосторожных действиях вы можете потерять весь домашний раздел...вобщем, вы предупреждены.
Используя Linux Unified Key Setup (LUKS) установка шифрованного раздела происходит очень быстро.
Подготовка
Установим необходимые пакеты:
device-mapper должен быть активирован (если нет - перезагрузитесь):
crw-rw---- 1 root root 10, 60 2009-11-16 21:12 control
...с поддержкой шифрования:
Отлично. Всё готово, приступим.
Часть 1. Шифруем swap.
1) Отключаем swap.
2) Заполняем swap случайными данными.
956+0 записей написано
скопировано 1003450368 байт (1,0 GB), 179,14 c, 5,6 MB/c
Этот процесс занимает некоторое время...
3) настраиваем шифрованный swap.
Добавьте в /etc/crypttab
Почему /dev/urandom, а не /dev/random? Потому что последний остановит загрузку пока не накопит достаточно энтропии (нажатие на клавиши ускорит этот процесс), а urandom не остановит.
Далее нужно заменить запись swap в /etc/fstab:
При каждой загрузке swap будет шифроваться разным ключом.
4) Проверяем.
Для проверки нужно перезагрузиться.
Теперь у нас есть зашифрованный swap:
/dev/mapper/cryptoswap partition 979924 0 -1
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/sda5
offset: 0 sectors
size: 1959867 sectors
mode: read/write
Готово.
Часть 2. Создание и подключение зашифрованного home раздела.
Я выбрал путь минимальных разрушений и выделил для домашней директории новый раздел на который потом скопировал данные с текущего.
1) Заполним будущий home всякой всячиной:
4080384+0 записей написано
скопировано 2089156608 байт (2,1 GB), 639,055 c, 3,3 MB/c
Это может занять очень много времени (в зависимости от размера нового диска)
========
Данные на /dev/sdb5 будут перезаписаны без возможности восстановления.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Команда выполнена успешно.
Мы используем шифр "aes-cbc-essi" т.к. дефолтный подвержен так называемой атаке "по следам" (Watermarking attack)
2) Создаём раздел
key slot 0 unlocked.
Проверим что получилось
crw-rw---- 1 root root 10, 60 2009-11-16 23:02 control
brw-rw---- 1 root disk 252, 1 2009-11-16 23:38 cryptohome
brw-rw---- 1 root disk 252, 0 2009-11-16 23:02 cryptoswap
или так:
cryptohome (252, 1)
3) Создадим файловую систему.
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
127488 inodes, 509791 blocks
5097 blocks (1.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=524288000
16 block groups
32768 blocks per group, 32768 fragments per group
7968 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
4) Проверяем!
Начнём с того, что закроем раздел и откроем его заново, а затем примонтируем.
cryptsetup luksOpen /dev/sdb5 cryptohome
Enter LUKS passphrase:
key slot 0 unlocked.
Команда выполнена успешно.
mount /dev/mapper/cryptohome /mnt/cryptohome
touch /mnt/cryptohome/testfile
ls /mnt/cryptohome/
Также убедиться в работе можно посмотрев на вывод команды:
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/sdb5
offset: 2056 sectors
size: 4078328 sectors
mode: read/write
Самое время скопировать текущий home на новый раздел.
После всего - размонтируем:
cryptsetup luksClose cryptohome
5) Монтируем cryptohome при загрузке или при авторизации?
Теперь нужно сделать выбор. Можно монтировать раздел при загрузке системы, но тогда загрузка будет останавливаться и вам нужно будет каждый раз водить пароль. Если вы хотите чтобы раздел автоматически подключался при авторизации то пропустите этот пункт.
Избежать ручного ввода пароля можно сохранив ключ на usb носителе, как это сделать читайте тут (на английском).
Хотите включить подключение при загрузке?
Тогда добавьте в /etc/crypttab следующее:
и в /etc/fstab:
Если теперь вы перезагрузитесь то загрузка будет прервана с требованием ввести пароль LUKS. Если вы верно введёте пароль то подключится home раздел. Когда вы авторизуетесь то уже будете работать с шифрованным home.
Часть 3. Автоматическое подключение при авторизации.
Более элегантным будет подключение раздела при авторизации. Это подразумевает что у вас должен быть такой же пароль на вход, каким вы шифровали раздел. (На самом деле это не true и лучше было бы использовать внешний носитель для хранения ключа расшифровки но, в этой инструкции подразумевается что пароли одинаковые.)
1) Удаляем запись из /etc/fstab
Если в /etc/fstab есть запись для подключения зашифрованного раздела её нужно удалить:
2) Изменяем /etc/crypttab
Убедитесь что в /etc/crypttab у вас записано именно это:
3) настраиваем pam_mount
Добавьте следующую строчку в /etc/security/pam_mount.conf.xml. Файл достаточно хорошо прокомментирован так что найти куда именно добавить не составит труда.
Также нужно отредактировать ещё одну строчку таким образом:
Это связано с тем, что при выходе не все процессы освобождают блокировку home от размонтирования.
4) Проверяем!
Входим и авторизуемся - у вас должен подключиться домашний раздел.
_dev_sdb5 (252, 1)
и:
/dev/sdb5 2,0G 36M 1,9G 2% /home
Поздравляю. Теперь у вас есть зашифрованные swap и home.
Не забывайте делать бэкапы 🙂
11 апреля, 2010 - 13:39
Отличная статья, огрномное спасибо.
19 июля, 2010 - 20:46
А зачем шифровать swap?
20 июля, 2010 - 11:02
Это для совсем параноиков 🙂
Однако если swap не шифровать то в него тоже может быть записана конфиденциальная информация, а при выключении питания swap не удаляется так что его легко можно «снять».
23 апреля, 2011 - 19:41
В ubuntu 10.10 зашифровал по инструкции раздел (не /home) /dev/sdb2. Настроил монтирование раздела через pam_mount. При входе в систему раздел монтируется нормально, НО через некоторое время (5-20 минут) раздел сам размонтируется. После продолжительного гугления выяснил следующее. Для исправления данной проблемы нужно в файле
закомментарить строчку:
Пруф:
Надеюсь, информация будет полезной.
23 апреля, 2011 - 20:33
Да, конечно, спасибо.
А если Вы делаете Logout раздел размонитруется?
24 апреля, 2011 - 04:56
Да, размонтируется. Выхожу из системы «нужным» пользователем, захожу другим — раздела нет.
30 июня, 2011 - 07:34
Спасибо, очень пригодилось