Gentoo Way Linux, Gentoo, Kubuntu, Ubuntu, Debian … компилируем всё!

17Ноя/09Off

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) установка шифрованного раздела происходит очень быстро.

Подготовка

Установим необходимые пакеты:

apt-get install cryptsetup libpam-mount

device-mapper должен быть активирован (если нет - перезагрузитесь):

ls -l /dev/mapper/
итого 0
crw-rw---- 1 root root 10, 60 2009-11-16 21:12 control

...с поддержкой шифрования:

dmsetup targets | grep crypt
crypt            v1.7.0

Отлично. Всё готово, приступим.

Часть 1. Шифруем swap.

1) Отключаем swap.

swapoff /dev/sda5

2) Заполняем swap случайными данными.

dd if=/dev/urandom of=/dev/sda5 bs=1M
957+0 записей считано
956+0 записей написано
скопировано 1003450368 байт (1,0 GB), 179,14 c, 5,6 MB/c

Этот процесс занимает некоторое время...

3) настраиваем шифрованный swap.

Добавьте в /etc/crypttab

cryptoswap /dev/sda5 /dev/urandom cipher=aes-cbc-essiv:sha256,size=256,hash=sha256,swap

Почему /dev/urandom, а не /dev/random? Потому что последний остановит загрузку пока не накопит достаточно энтропии (нажатие на клавиши ускорит этот процесс), а urandom не остановит.

Далее нужно заменить запись swap в /etc/fstab:

/dev/mapper/cryptoswap none swap sw 0 0

При каждой загрузке swap будет шифроваться разным ключом.

4) Проверяем.

Для проверки нужно перезагрузиться.
Теперь у нас есть зашифрованный swap:

cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/mapper/cryptoswap                  partition       979924  0       -1
cryptsetup status cryptoswap
/dev/mapper/cryptoswap is active:
cipher:  aes-cbc-essiv:sha256
keysize: 256 bits
device:  /dev/sda5
offset:  0 sectors
size:    1959867 sectors
mode:    read/write

Готово.

Часть 2. Создание и подключение зашифрованного home раздела.

Я выбрал путь минимальных разрушений и выделил для домашней директории новый раздел на который потом скопировал данные с текущего.

1) Заполним будущий home всякой всячиной:

dd if=/dev/urandom of=/dev/sdb5
4080385+0 записей считано
4080384+0 записей написано
скопировано 2089156608 байт (2,1 GB), 639,055 c, 3,3 MB/c

Это может занять очень много времени (в зависимости от размера нового диска)

cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sdb5
WARNING!
========
Данные на /dev/sdb5 будут перезаписаны без возможности восстановления.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Команда выполнена успешно.

Мы используем шифр "aes-cbc-essi" т.к. дефолтный подвержен так называемой атаке "по следам" (Watermarking attack)

2) Создаём раздел

cryptsetup luksOpen /dev/sdb5 cryptohome
Enter LUKS passphrase:
key slot 0 unlocked.

Проверим что получилось

ls -l /dev/mapper/
итого 0
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

или так:

dmsetup ls
cryptoswap      (252, 0)
cryptohome      (252, 1)

3) Создадим файловую систему.

mkfs.ext4 -j -m 1 -O dir_index,filetype,sparse_super /dev/mapper/cryptohome
mke2fs 1.41.9 (22-Aug-2009)
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 luksClose cryptohome
cryptsetup luksOpen /dev/sdb5 cryptohome
Enter LUKS passphrase:
Enter LUKS passphrase:
key slot 0 unlocked.
Команда выполнена успешно.
mkdir -p /mnt/cryptohome
mount /dev/mapper/cryptohome /mnt/cryptohome
touch /mnt/cryptohome/testfile
ls /mnt/cryptohome/
lost+found/  testfile

Также убедиться в работе можно посмотрев на вывод команды:

cryptsetup status cryptohome
/dev/mapper/cryptohome is active:
cipher:  aes-cbc-essiv:sha256
keysize: 256 bits
device:  /dev/sdb5
offset:  2056 sectors
size:    4078328 sectors
mode:    read/write

Самое время скопировать текущий home на новый раздел.
После всего - размонтируем:

umount /mnt/cryptohome
cryptsetup luksClose cryptohome

5) Монтируем cryptohome при загрузке или при авторизации?

Теперь нужно сделать выбор. Можно монтировать раздел при загрузке системы, но тогда загрузка будет останавливаться и вам нужно будет каждый раз водить пароль. Если вы хотите чтобы раздел автоматически подключался при авторизации то пропустите этот пункт.

Избежать ручного ввода пароля можно сохранив ключ на usb носителе, как это сделать читайте тут (на английском).
Хотите включить подключение при загрузке?
Тогда добавьте в /etc/crypttab следующее:

cryptohome /dev/sdb5 none luks

и в /etc/fstab:

/dev/mapper/cryptohome  /home ext4 relatime,errors=remount-ro 0 2

Если теперь вы перезагрузитесь то загрузка будет прервана с требованием ввести пароль LUKS. Если вы верно введёте пароль то подключится home раздел. Когда вы авторизуетесь то уже будете работать с шифрованным home.

Часть 3. Автоматическое подключение при авторизации.

Более элегантным будет подключение раздела при авторизации. Это подразумевает что у вас должен быть такой же пароль на вход, каким вы шифровали раздел. (На самом деле это не true и лучше было бы использовать внешний носитель для хранения ключа расшифровки но, в этой инструкции подразумевается что пароли одинаковые.)

1) Удаляем запись из /etc/fstab

Если в /etc/fstab есть запись для подключения зашифрованного раздела её нужно удалить:

/dev/mapper/cryptohome  /home ext4 relatime,errors=remount-ro 0 2 # вот это нужно удалить

2) Изменяем /etc/crypttab

Убедитесь что в /etc/crypttab у вас записано именно это:

cryptohome /dev/sdb5 noauto luks

3) настраиваем pam_mount

Добавьте следующую строчку в /etc/security/pam_mount.conf.xml. Файл достаточно хорошо прокомментирован так что найти куда именно добавить не составит труда.

<volume cipher="aes-cbc-essiv:sha256" path="/dev/sdb5" mountpoint="/home" />

Также нужно отредактировать ещё одну строчку таким образом:

<logout wait="5000" hup="0" term="0" kill="yes" />

Это связано с тем, что при выходе не все процессы освобождают блокировку home от размонтирования.

4) Проверяем!

Входим и авторизуемся - у вас должен подключиться домашний раздел.

dmsetup ls
cryptoswap (252, 0)
_dev_sdb5 (252, 1)

и:

df -h
...
/dev/sdb5 2,0G 36M 1,9G 2% /home

Поздравляю. Теперь у вас есть зашифрованные swap и home.

Не забывайте делать бэкапы 🙂

Share
Метки записи: , , Комментарии
Комментарии (7) Пинги (0)
  1. Отличная статья, огрномное спасибо.

  2. А зачем шифровать swap?

    • Это для совсем параноиков 🙂
      Однако если swap не шифровать то в него тоже может быть записана конфиденциальная информация, а при выключении питания swap не удаляется так что его легко можно «снять».

  3. В ubuntu 10.10 зашифровал по инструкции раздел (не /home) /dev/sdb2. Настроил монтирование раздела через pam_mount. При входе в систему раздел монтируется нормально, НО через некоторое время (5-20 минут) раздел сам размонтируется. После продолжительного гугления выяснил следующее. Для исправления данной проблемы нужно в файле

    /etc/pam.d/common-session-noninteractive

    закомментарить строчку:

    session optional    pam_mount.so

    Пруф:
    Надеюсь, информация будет полезной.

  4. Спасибо, очень пригодилось


Trackbacks are disabled.