Установка Mint Debian (LMDE) на шифрованный диск


Долгое время у меня на ноуте жила Ubuntu - сначала 8.04, потом 9.04, потом 10.04.
А потом мне захотелось Rolling Release дистрибутив - чтоб больше уже никогда не 
заниматься установками и переустановками. Среди кандидатов рассматривались:

* Gentoo - отличный дистрибутив, который я постоянно использую на работе, но 
  заниматься сборками на ноуте не хотелось.
* Calaculate - улучшенный отличный дистрибутив с предустановками и пресетами.
  Но опять - те же самые сборки из исходников.
* Arch - очень подходит, собирать исходники почти не нужно, на нём я и остановился 
* Mint Debian (LMDE) - основанный на Debian-testing линукс, с deb-пакетами.

С Linux Mint - я уже был немного знаком. Это допиленный и улучшенный клон Ubuntu, 
переживший уже несколько релизов, и, достаточно стабильный для использования. Однако 
Mint Debian - это клон Debian, с поддержой модели "постоянных обновлений", и его я 
как-то упустил из внимания. Mint Debian - оказался для меня удобен и привычен, однако 
простая установка меня не устраивала. Хотелось еще пошифровать всё, чтобы в случае 
потери ноута не париться. Однако установщик Mint - примитивен, и каких-либо вариантов 
не предлагает. Пришлось идти длинным путём, который однако, я уже хорошо себе 
представлял, поскольку много раз шифровал разделы в Arch.


Для начала нужно поставить Mint Debian в какой-нибудь эмулятор, к примеру в 
VirtualBox, пользуясь его обычным установщиком и ничего не шифруя. К эмулятору 
желательно иметь доступ по IP-адресу. В процессе установки с помощью стандартного 
установщика  я сделал три раздела на виртуальном жестком диске:

sda1  ext2 /boot
sda2  ext3 /
sda3  swap

По большому счету - это просто самая простая схема разбиения, и можно было сделать 
любую другую. В дальнейшем мы скопируем установленный Mint с виртуальной машины в наши 
шифрованные разделы.

После установки необходимо доставить SSH и задать пароль для рута, чтобы в дальнейшем 
можно было вытащить установленную систему по SSH.

$ sudo bash
# apt-get update
# apt-get install ssh reiserfsprogs lvm2
# passwd root


Теперь можно приступить к установке реальной операционной системы. После загрузки 
LiveCD - нужно установить необходимые нам пакеты, которые в Mint по умолчанию не 
установлены:

$ sudo bash
# apt-get update
# apt-get install reiserfsprogs lvm2

Затем очень рекомендуется очистить весь диск случайными данными. Делать это лучше так:

# badblocks -c 10240 -wsvt random /dev/sda

Можно конечно, использовать и /dev/random, но даже badblocks будет работать не один 
час, а /dev/random - скорее всего сутки и более.

Теперь нужно сделать два линуксовых первичных раздела на реальном жестком диске:

sda1  type=83  /boot
sda2  type=83

Первый раздел - маленький. Там будет лежать ядро, предназначенное только для чтения, 
которое никак не шифруется. На втором разделе будет лежать LVM, в котором мы создадим 
все остальные разделы для нашей системы.

Шифруем второй раздел с помощью LUKS. Это такая надстройка над dmcrypt, но 
пользоваться ей гораздо проще и удобней.

# cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sda2
# cryptsetup luksOpen /dev/sda2 crypt

В открытом шифрованном разделе создаём LVM-раздел:

# lvm pvcreate /dev/mapper/crypt
# lvm vgcreate lvm /dev/mapper/crypt
# lvm lvcreate -L 10G -n root lvm
# lvm lvcreate -L 500M -n swap lvm
# lvm lvcreate -l 100%FREE -n home lvm

Теперь делаем наши файловые системы

# mkfs.ext2 /dev/sda1
# mkreiserfs /dev/mapper/lvm-root
# mkreiserfs /dev/mapper/lvm-home
# mkswap /dev/mapper/lvm-swap

И монтируем всё в правильное дерево файлов:

# mount /dev/mapper/lvm-root /mnt
# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot
# mkdir /mnt/home
# mount /dev/mapper/lvm-home /mnt/home


Теперь выкачиваем установленную операционную систему из VirtualBox, к которому мы 
предусмотрительно сделали доступ по SSH

rsync -avz --exclude=proc --exclude=sys --exclude=dev/pts -e ssh root@vhost:/ /mnt

После этого виртуальную машину можно выключить - она больше не нужна.

В /mnt/etc/crypttab пишем правильную строку:

sda2_crypt   /dev/sda2   none    luks

Поправляем также /mnt/etc/fstab:

/dev/sda1              /boot           ext2          defaults,ro     0       2
/dev/mapper/lvm-root   /               reiserfs      noatime         0       1
/dev/mapper/lvm-home   /home           reiserfs      noatime         0       2
/dev/mapper/lvm-swap   none            swap          sw              0       0
proc                   /proc           proc          defaults        0       0
/dev/scd0              /media/cdrom0   udf,iso9660   user,noauto     0       0

Теперь нужно "переключиться" в установленную систему

# cp /etc/resolv.conf /mnt/etc
# mount --bind /dev /mnt/dev
# chroot /mnt
# mkdir /sys
# mkdir /proc
# mount -t sysfs none /sys
# mount -t proc none /proc
# mount -t devpts none /dev/pts

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

# apt-get update
# apt-get install ssh reiserfsprogs lvm2

Необходимо также поставить grub в "правильное место":

# update-initramfs -u
# dpkg-reconfigure grub-pc

И теперь завершаем в обратном порядке нашу затянувшуюся установку:

# umount /dev/pts
# umount /proc
# umount /sys
# exit
# umount /mnt/dev
# umount /mnt/home
# umount /mnt/boot
# umount /mnt
# cryptsetup luksClose crypt

Кроме указанных действий, перед тем, как перезагрузиться, можно еще попробовать 
сменить пароль на шифрованном разделе. Это очень полезная операция, поскольку 
вырабатывает навык решения проблем, связанных с некорректрой загрузкой или 
повреждением системы. Для смены пароля в LUKS необходимо всего лишь добавить новый 
ключ, а старый удалить:

# cryptsetup luksAddKey /dev/sda2
# cryptsetup luksKillSlot /dev/sda2 0

И для проверки откроем и закроем шифрованный раздел:

# cryptsetup luksDump /dev/sda2
# cryptsetup luksOpen /dev/sda2 crypt
# cryptsetup luksClose crypt

В итоге мы имеем шифрованный корень системы /, шифрованный swap (да, это 
параноидально), шифрованный /home. У нас также есть быстрая файловая система reiserfs, 
deb-пакеты и репозиторий Debian-testing, границы которого бесконечны.

В общем и целом, Arch, конечно, потребовал бы вдвое меньше телодвижений, зато у нас 
полноценный и могучий Debian и неисчислимое количество приложений, упакованных в .deb!

Кстати, в шифрованный раздел в пару кликов можно было бы установить и обычный Debian с 
помощью его обычного установщика. И Ubuntu - но только с помощью образа ubuntu-
alternate, поскольку обычный ubuntu-gnome содержит такой же примитивный установщик, 
как и Mint Debian. Можно бы было шифровать отдельно разные разделы, и вообще не 
использовать LVM. Можно было бы сделать ключи электронными - и хранить их на отдельной 
секретной флешке. Варианты есть, много - и можно выбрать любой на выбор. (Хехе, а есть 
ли такой размах в вариантах установки Windows?)

А вот теперь:

# sync && reboot

Всё!

P.S. Добавление.

На практике оказалось, что не всё так гладко. Если пароль для cryptsetup - буквенный, 
то при загрузке возникают обломы в виде ошибки: "no key available with this 
passphrase". Это означает, что keyboard layout загрузчика отличается от того, каким 
было выполнено шифрование. Проблему можно поискать и в гугле по словам: "cryptsetup 
keyboard layout". Решение: поменять layout на EN_US до шифрования (dpkg-reconfigure 
keyboard-configuration), в файле /etc/initramfs-tools/initramfs.conf указать KEYMAP=y  
А если клавиатура еще и USB, то в файл /etc/initramfs-tools/modules можно добавить:

usbcore
uhci_hcd
ehci_hcd
usbhid

После чего пересобрать

# update-initramfs -u