Шифрование корневого раздела на Ubuntu 11.04 (flash ключ)
Модуль dm-crypt включен в ядро >=2.6.4
Статья рассматривает перенос Ubuntu на новый диск с зашифрованным корнем.
Дано:
- /dev/sda - текущей диск на котором установлена Ubuntu.
- /dev/sdb - новый чистый диск, который только что воткнули.
- Флешка (FAT32), на которой будет храниться электронный ключ.
Так же к ознакомлению : Шифрование разделов dm-crypt Ubuntu 8.04
Подготовка
Флешка
Вставляем флешку и посмотрим UUID (далее пригодиться)
lexa@ubuntu-11-04:~$ sudo blkid /dev/sdс1: LABEL="KINGSTON" UUID="3433-3231" TYPE="vfat"
Создание ключа my_ubuntu.key
sudo mkdir /media/KINGSTON/dm-keys sudo dd if=/dev/random of=/media/KINGSTON/dm-keys/my_ubuntu.key bs=1 count=256
Сейчас флешка примонтирована в /media/KINGSTON/
Диск
Разобьем диск следующим образом:
Имя Флаги Тип раздела Тип ФС [Метка] Размер (МБ) ---------------------------------------------------------------- sdb1 Загрузочный Основной Linux 509,97 # Загрузочный ext2 sdb2 Основной Linux 3997,49 # Зашифрованный SWAP sdb3 Основной Linux 100002,96 # Зашифрованный корень sdb4 Основной Linux 395597,46 # Не зашифрованный раздел для файл помойки
Утилиты и модули
Понадобятся cryptsetup
sudo apt-get install cryptsetup
Модуль dm_crypt
sudo modprobe dm_crypt
Форматирование
Создание шифрованного раздела ROOT
sudo cryptsetup luksFormat /dev/sdb3 /media/KINGSTON/dm-keys/my_ubuntu.key
Для тех кто не силен в английстом
A you sure? (Type uppercase yes):
правильный ответ большими буквами: YES
Флшека может потеряться, самовозгореться, дематерелизоваться и т.п.
Можно подстраховаться и помимо ключа установить так же запасной пароль в ~20-30 символов (цивры, буквы маленькие и большие но все латинские), что снизит надежность по сравнению с 256 битным ключом.
sudo cryptsetup luksAddKey /dev/sdb3 --key-file=/media/KINGSTON/dm-keys/my_ubuntu.key
Подключение
sudo cryptsetup luksOpen /dev/sdb3 root --key-file=/media/KINGSTON/dm-keys/my_ubuntu.key
Форматирование
sudo mkfs.ext2 /dev/sdb1 sudo mkfs.ext4 -j /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
root@ubuntu-11-04:/# sudo blkid /dev/sda1: UUID="527bc30d-0b20-44cd-8f4c-e12a6fbecb4d" TYPE="ext4" /dev/sda5: UUID="eb993171-e029-468a-9ae7-eddec8c75fa3" TYPE="swap" /dev/sdb1: UUID="179dde80-2397-49ab-afd1-a156e2d8d3c2" TYPE="ext2" /dev/sdb2: UUID="14ed580c-4c2b-40af-85a7-3b2f205779a7" TYPE="crypto_LUKS" /dev/sdb3: UUID="33c0f114-23c3-43ad-832e-3170d4d43c47" TYPE="crypto_LUKS" /dev/mapper/root: UUID="c4e1b954-e7e1-4bc0-bd17-22e594592151" TYPE="ext4" /dev/mapper/swap: UUID="ce62d5b5-77f1-416d-ab5a-2e4e9b3aa1c6" TYPE="swap
Внесем изменения
/etc/fstab
... # / was on /dev/mapper/root UUID=c4e1b954-e7e1-4bc0-bd17-22e594592151 / ext4 errors=remount-ro 0 1 # /boot was on /dev/sdb1 UUID=179dde80-2397-49ab-afd1-a156e2d8d3c2 /boot ext2 noauto,noatime 1 2 # swap was on /dev/mapper/swap /dev/mapper/swap none swap sw 0 0
/etc/crypttab
swap UUID=14ed580c-4c2b-40af-85a7-3b2f205779a7 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256,hash=sha256
INITRAMFS
По прежнему находимся в окружении новой системы
Добавить модули
/etc/initramfs-tools/modules
dm_mod dm_crypt cryptoloop sha256 sha512 aes cbc
Создать
/etc/initramfs-tools/conf.d/cryptroot
target=root,source=UUID=33c0f114-23c3-43ad-832e-3170d4d43c47,key=flash-key,rootdev
«flash-key» специальное зарезервированное имя для скрипта
/etc/default/cryptdisks
CRYPTDISKS_ENABLE=Yes CRYPTDISKS_MOUNT="" CRYPTDISKS_CHECK=blkid CRYPTDISKS_PRECHECK=
Дальше необходимо отредактировать скрипт /usr/share/initramfs-tools/scripts/local-top/cryptroot
Или скачать и заменить
wget http://wiki.enchtex.info/_media/howto/ubuntu/cryptroot.txt mv cryptroot.txt /usr/share/initramfs-tools/scripts/local-top/cryptroot chmod +x /usr/share/initramfs-tools/scripts/local-top/cryptroot
Обратите внимание на переменные FLASH_* в начале скрипта.
Обязательно установите значение FLASH_UUID для вашей флешки.
Обновление
sudo update-initramfs -u
GRUB
По прежнему находимся в окружении новой системы
Установка загрузчика на sdb
sudo cp /proc/mounts /etc/mtab sudo grub-install /dev/sdb
Обновление
sudo update-grub
Проверим UUID
/boot/grub/grub.cfg
... ### BEGIN /etc/grub.d/10_linux ### ... menuentry 'Ubuntu, с Linux 2.6.38-11-generic' --class ubuntu --class gnu-linux --class gnu --class os { recordfail set gfxpayload=$linux_gfx_mode insmod part_msdos insmod ext2 set root='(/dev/sdb,msdos1)' search --no-floppy --fs-uuid --set=root 179dde80-2397-49ab-afd1-a156e2d8d3c2 linux /vmlinuz-2.6.38-11-generic root=/dev/mapper/root ro quiet splash vt.handoff=7 initrd /initrd.img-2.6.38-11-generic }
Завершение
Выход из виртуального окружения
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 reboot
Не забыть в BIOS выбрать загрузку с диска sdb.
SWAP не успевает мгновенно подключиться поэтому и возникает сообщение /dev/mapper/swap не найден, на это можно забить.
Обсуждение