Перенос системы на зашифрованный раздел Luks
Был солнечный тёплый день, когда мне поручили зашифровать все сервера. А это более 50 разных машин: на Centos, debian и ubuntu. Яростно погуглив, порыскав по форумам, я не нашёл однозначного решения. Помогли инструкции по переносу машин с диска на диск и инструкции запуска системы с флешки. Всё получилось, и вот уже несколько десятков машин крутятся с такой схемой.
Итак, то же нужно сделать?
Представляю вашему вниманию самописную инструкцию по переносу на зашифрованный раздел c использованием ESX 6.0. Её можно использовать и для переноса системы, если не брать в расчёт шифрование.
1. Подготовка к переносу
Сначала подключаем диск нужного размера:
1.1 Разбиваем диск на 2 и более разделов
/boot должен быть отдельно. Он, как вы догадались, не будет зашифрован. Диск не обязательно должен совпадать с исходным размером:
Форматируем
Создаём зашифрованный раздел
Важно: YES большими буквами! В принципе указание об этом будет, но на басурманском языке.
1.2 Инициализируем раздел
1.3 Далее я создал LVM на него и положил систему
Тут всё просто:
pvcreate /dev/mapper/sda2_crypt
Указываем зашифрованный диск:
vgcreate crypto /dev/mapper/sda2_crypt
1.4 Создаём раздел под корневой раздел
1.5 Создаём раздел для файла подкачки
Проверяем:
1.6 Форматируем LVM
mkfs.ext4 /dev/crypto/vol1 mkfs.ext4 /dev/crypto/SWAP
Если нет swap, создаём и подключаем. Размер выбираем так, что если памяти выделено 2 Гб то swap должен быть от 2 до 4 Гб.
1.7 Создаём swap
fallocate -l 4G /swapdir/swapfile
Проверяем , что он создан:
ls -lh /swapdir/swapfile
1.8 Настраиваем права
chmod 600 /swapdir/swapfile
Делаем из файла swap:
mkswap /swapdir/swapfile
1.9 Подключаем в систему
swapon /swapdir/swapfile
Проверяем:
swapon –s
Теперь самое интересное — всё то, что нажито непосильным трудом!
2. Приступаем к переносу!
2.1 Создаём папки
mkdir /mnt/new mkdir /mnt/old mkdir /mnt/boot
2.2 Монтируем
Текущий корневой раздел монтируем в папку old.
mount /dev/sda1 /mnt/old
2.3 Новый LVM раздел
mount /dev/crypto/vol1/ /mnt/new/
2.4 Раздел загрузки
mount /dev/sdb1 /mnt/boot
2.5 Копируем корневой раздел
rsync -av /mnt/old/ /mnt/new/
2.6 Копируем загрузку
rsync -av /mnt/old/boot/ /mnt/boot/
3. Перенос системы
3.1 Монтируем систему
Mount –bind /sys /mnt/new/sys Mount –bind /dev /mnt/new/dev Mount –bind /proc /mnt/new/proc
3.2 Меняем корневой раздел
chroot /mnt/new
Посмотреть все UUID. Ваши будут отличаться от представленных:
blkid
3.3 Монтирование дисков в новой системе
vim /etc/fstab /dev/mapper/crypto-vol1 / ext4 noatime,errors=remount-ro 0 1 UUID="3efdf7e2-4bff-4fd6-b95a-60bb60ece16c" /boot ext4 default 0 1 UUID=”09f94ec7-cb53-4bdf-9c20-d10b9b358719” /swap swap sw 0 0
3.4 Монтируем Luks, чтобы загружался при загрузке
vim /etc/crypttab
3.5 UUID крипто диска прописываем:
sda2_crypt UUID=0a6accdb-9968-403a-b8bd-f9be6d3aaaec none luks
!!!Рекомендую сделать снапшот или бекап перед этим этапом!!!
4 Загрузка
4.1 Редактируем GRUB
Vim /etc/default/grub GRUB_ENABLE_CRYPTODISK=y
4.2 Устанавливаем GRUB на диск, с которого будет грузится:
grub-install /dev/sdb
Могут быть сообщения об ошибках lvm, игнорируем их.
4.3 Обновляем GRUB
update-grub
4.4 Обновляем образ
update-initramfs -k all –u
4.5 Делаем EXIT
exit
Из корневого раздела
4.6 Отмонтируем
umount /mnt/new/sys umount /mnt/new/dev umount /mnt/new/proc umount /mnt/new umount /mnt/boot
4.7 Выключаемся
poweroff
4.8 Меняем диск загрузки, грузимся
После смены дисков, их названия изменятся. Например, были sdb — станет sda и наоборот.
Тестировалось на debian 8 и Ubuntu 16.04 для centos немного другая схема вместо grub-update , grub-mkconfig , а вместо update-initramfs dracut.
5. Варианты шифрования
CBC:# cryptsetup -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdx LRW:# cryptsetup -y --cipher aes-lrw-benbi --key-size 384 luksFormat /dev/sdx XTS:# cryptsetup -y --cipher aes-xts-plain --key-size 512 luksFormat /dev/sdx
Вот и всё! Надеюсь, сильно не наврал! Если что — пишите в комментариях! Полезные ссылки: — Вики о шифровании — Шифрование дисков в Linux