Шифрование корневого раздела на SSD диске Ubuntu 14.04 (пароль)
Модуль dm-crypt включен в ядро >=2.6.4
Статья рассматривает перенос Ubuntu на новый диск с зашифрованным корнем.
Диск SSD, без swap'a, с поддержкой TRIM
Дано:
- /dev/sda - текущей диск на котором установлена Ubuntu.
- /dev/sdb - новый чистый диск, который только что воткнули.
- Ввод пароля будет осуществятся с клавиатуры при включении компьютера.
Так же к ознакомлению : Шифрование разделов dm-crypt Ubuntu 8.04
Подготовка
Диск
Разобьем диск следующим образом:
Имя Флаги Тип раздела Тип ФС [Метка] Размер (МБ) ---------------------------------------------------------------- sdb1 Загрузочный Основной Linux 509,97 # Загрузочный ext2 sdb5 Основной Linux 100002,96 # Зашифрованный корень sdb6 Основной Linux 395597,46 # Не зашифрованный раздел для файл помойки
Утилиты и модули
Понадобятся cryptsetup
sudo apt-get install cryptsetup
Модуль dm_crypt
sudo modprobe dm_crypt
Форматирование
Создание шифрованного раздела ROOT
sudo cryptsetup luksFormat /dev/sdb5
Для тех кто не силен в английском
A you sure? (Type uppercase yes):
правильный ответ большими буквами: YES
Задать пароль
Введите пароль для LUKS: Verify passphrase:
Подключение
sudo cryptsetup luksOpen /dev/sdb5 root
Форматирование
sudo mkfs.ext2 /dev/sdb1 sudo mkfs.ext4 -E discard /dev/mapper/root
Перенос системы
Монтирование
sudo mkdir /tmp/root sudo mount /dev/mapper/root /tmp/root/ sudo mkdir /tmp/root/boot sudo mount /dev/sdb1 /tmp/root/boot/
Копирование
Скопировать корень системы на новый диск
sudo rsync -AaHSxv / /tmp/root/
Команда rsync скопирует данные с сохранением всех прав.
Копирование с ключом x, это значит, содержимое каталогов примантированных в текущей момент к корню не будет скопировано в корень новой системы.
Будьте внимательны если /boot, /usr, /home и т.п. каталоги у вас примантированны с других разделов.
Папка /tmp/root/dev/ сейчас пуста, создать устройства
sudo mknod /tmp/root/dev/console -m 0600 c 5 1 sudo mknod /tmp/root/dev/null -m 0666 c 1 5
FSTAB
<note warning > Переход в окружение новой системы
sudo mount -t proc none /tmp/root/proc/ sudo mount -o bind /dev/ /tmp/root/dev/ sudo mount -o bind /sys/ /tmp/root/sys/ sudo chroot /tmp/root/ /bin/bash
</WRAP>
Посмотрим UUID
sudo blkid
/dev/sdb1: UUID="179dde80-2397-49ab-afd1-a156e2d8d3c2" TYPE="ext2" /dev/sdb5: UUID="33c0f114-23c3-43ad-832e-3170d4d43c47" TYPE="crypto_LUKS" /dev/mapper/root: UUID="c4e1b954-e7e1-4bc0-bd17-22e594592151" TYPE="ext4"
Внесем изменения
/etc/fstab
... UUID=c4e1b954-e7e1-4bc0-bd17-22e594592151 / ext4 errors=remount-ro 0 1 UUID=179dde80-2397-49ab-afd1-a156e2d8d3c2 /boot ext2 noauto,noatime 1 2
/etc/crypttab
root UUID=33c0f114-23c3-43ad-832e-3170d4d43c47 none luks,discard
В Ubuntu опция discard, в других дистрибутивах может быть allow-discards, см. OPTIONS
man crypttab
INITRAMFS
По прежнему находимся в окружении новой системы
Добавить модули (зависят от выбранных алгоритмов шифрования)
/etc/initramfs-tools/modules
dm_mod dm_crypt cryptoloop sha256 sha512 aes cbc xts
Создать
/etc/initramfs-tools/conf.d/cryptroot
target=root,source=UUID=33c0f114-23c3-43ad-832e-3170d4d43c47,key=none,rootdev
/etc/default/cryptdisks
CRYPTDISKS_ENABLE=Yes CRYPTDISKS_MOUNT="" CRYPTDISKS_CHECK=blkid CRYPTDISKS_PRECHECK=
БАГ №1
update-initramfs не включил в образ утилиту /sbin/cryptsetup
https://bugs.launchpad.net/ubuntu/+source/cryptsetup/+bug/1256730
Поэтому, надо определить переменную в сеансе
export CRYPTSETUP=y
либо
/usr/share/initramfs-tools/hooks/cryptroot
# Include cryptsetup modules, regardless of _this_ machine # configuration #if [ -n "$CRYPTSETUP" ] && [ "$CRYPTSETUP" != "n" ]; then setup="yes" #fi
БАГ №2
http://cyberjunky.nl/2014/03/31/fix-ssd-trim-on-ubuntu-14-04-lts/
Опция из /etc/crypttab не подцепляются
Костыль
/usr/share/initramfs-tools/scripts/local-top/cryptroot
cryptdiscard="yes"
Обновление
sudo update-initramfs -u -k all
GRUB
По прежнему находимся в окружении новой системы
Установка загрузчика на sdb
sudo cat /proc/mounts > /etc/mtab sudo grub-install /dev/sdb
Обновление
sudo update-grub
Проверим UUID
grep c4e1b954-e7e1-4bc0-bd17-22e594592151 /boot/grub/grub.cfg
Завершение
Выход из виртуального окружения
exit
Размонтирование
cd / sudo umount /tmp/root/dev/ sudo umount /tmp/root/sys/ sudo umount /tmp/root/proc/ sudo umount /tmp/root/boot/ sudo umount /tmp/root/ sudo cryptsetup luksClose root
Перезагрузка
sudo reboot
Не забыть в BIOS выбрать загрузку с диска sdb.
Проверка опций
# sudo dmsetup table /dev/mapper/root --showkeys 0 249534464 crypt aes-xts-plain64 d584f6036e2e4c33cc646da51044a63457531379641c62f5005da2e50cca2af0 0 8:5 4096 1 allow_discards
Проверка TRIM
# sudo fstrim / -v /: 120553218048 bytes were trimmed
Обсуждение