Последние пару лет я шифрую все данные на своих компьютерах. OS которой пользуюсь — Ubuntu. Несколько лет, с 2000 по 2005, ставил Debian, но меня несколько утомляло ждать релизов, которые выходили раз в несколько лет. Перешёл на Убунту.
Наиболее удобной оказалась такая схема установки. Диск делится на 2 основных (primary) раздела — первый, размером 1GB для /boot; второй — всё оставшееся на диске место — для физического тома (PV), зашифрованного LUKS. Корневая ФС — на логическом томе (LV), входящем в группу (VG) которой принадлежит шифрованный том.
Как поставить Ubuntu на шифрованный LVM напишу чуть погодя, в следующем посте. На форуме LinuxMint есть статья — установка Mint на LVM. В принципе, этой статьи достаточно. Ubuntu Server ставится схожим образом.
Написанное здесь, применимо только для Ubuntu 9.10 Karmic Koala и её деривативов — LinuxMint восьмой версии, к примеру. Насчёт прочих OS — не знаю. В предыдущих версиях Ubuntu я использовал скрипт dropbear, на который давал ссылку здесь. В Кармике этот скрипт не заработает.
Для загрузки надо открывать корневую ФС — приходится вводить пароль. Руками. Если до компьютера сложно добраться — он в датацентре, либо у него нет монитора, то можно настроить запуск SSH в окружении initramfs — до того, как смонтирован корень. SSH сервер — Dropbear, его проще включить в initramfs. Проще чем OpenSSH. После открытия шифрованного тома, dropbear убивается. Далее, в процессе загрузки системы, запускается OpenSSH.
С этого места, будем считать, что система уже установлена, работает, шифрованная файловая система открывается с консоли, OpenSSH сервер установлен.
Имя хоста — host22, IP — 10.11.0.22/24, шлюз — 10.11.0.1.
Содержимое /etc/crypttab выглядит примерно так:
Ставим Dropbear:
При установке, Dropbear генерит новые серверные ключи. Плюс, при первом запуске update-initramfs, он генерит новые ключи для initramfs. Если в качестве SSH сервера используется OpenSSH, то логично использовать его ключи, сконвертировав их в формат Dropbear:
Эти ключи могут использоваться сервером Dropbear, если захочется использовать его вместо OpenSSH.
Для того, чтобы эти же ключи были включены в initramfs, их надо скопировать в /etc/initramfs-tools/etc/dropbear/:
Ещё, при первом запуске
После этого, можно обновить initramfs:
Теперь надо настроить сетевой интерфейс для initramfs. Это можно сделать, отредактировав параметры командной стоки, передаваемые загрузчиком GRUB ядру — добавив параметр
Правим файл /etc/default/grub. Это обычный шелл скрипт, он сорсится скриптом
К значению переменной
Вот как выглядит конфиг (я вынес параметр ip= в отдельную переменную):
После правки конфига надо запустить
На этом почти всё. После перезагрузки будет запущен
Открыть том — мало. Надо убить запущенный в консоли процесс, выполняющий скрипт /scripts/local-top/cryptroot:
Корневая система смонтирована, пошла загрузка системы.
Для удобства, действия по открытию тома и прибиванию ставшего ненужным процесса, можно оформить в виде скрипта. Для этого создаётся скрипт
После сохранения
Теперь, для открытия тома, достаточно будет выполнить команду
Упдате. 24.02.2010 23:50. Текст скрипта
Наиболее удобной оказалась такая схема установки. Диск делится на 2 основных (primary) раздела — первый, размером 1GB для /boot; второй — всё оставшееся на диске место — для физического тома (PV), зашифрованного LUKS. Корневая ФС — на логическом томе (LV), входящем в группу (VG) которой принадлежит шифрованный том.
Как поставить Ubuntu на шифрованный LVM напишу чуть погодя, в следующем посте. На форуме LinuxMint есть статья — установка Mint на LVM. В принципе, этой статьи достаточно. Ubuntu Server ставится схожим образом.
Написанное здесь, применимо только для Ubuntu 9.10 Karmic Koala и её деривативов — LinuxMint восьмой версии, к примеру. Насчёт прочих OS — не знаю. В предыдущих версиях Ubuntu я использовал скрипт dropbear, на который давал ссылку здесь. В Кармике этот скрипт не заработает.
Для загрузки надо открывать корневую ФС — приходится вводить пароль. Руками. Если до компьютера сложно добраться — он в датацентре, либо у него нет монитора, то можно настроить запуск SSH в окружении initramfs — до того, как смонтирован корень. SSH сервер — Dropbear, его проще включить в initramfs. Проще чем OpenSSH. После открытия шифрованного тома, dropbear убивается. Далее, в процессе загрузки системы, запускается OpenSSH.
С этого места, будем считать, что система уже установлена, работает, шифрованная файловая система открывается с консоли, OpenSSH сервер установлен.
Имя хоста — host22, IP — 10.11.0.22/24, шлюз — 10.11.0.1.
Содержимое /etc/crypttab выглядит примерно так:
host22_pv /dev/disk/by-uuid/94d85942-2089-4287-9b64-f436b50637cd none luks
Ставим Dropbear:
apt-get install dropbear
. В состав пакета входят скрипты для initramfs, в процессе установки — на этапе настройки пакета, запускается update-initramfs
. После перезагрузки, dropbear запустится на этапе initramfs. Всё бы хорошо, но… Лучше взять напильник, и немножко подправить настройки.При установке, Dropbear генерит новые серверные ключи. Плюс, при первом запуске update-initramfs, он генерит новые ключи для initramfs. Если в качестве SSH сервера используется OpenSSH, то логично использовать его ключи, сконвертировав их в формат Dropbear:
/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/dropbear_rsa_host_key /usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key /etc/dropbear/dropbear_dss_host_key
Эти ключи могут использоваться сервером Dropbear, если захочется использовать его вместо OpenSSH.
Для того, чтобы эти же ключи были включены в initramfs, их надо скопировать в /etc/initramfs-tools/etc/dropbear/:
cp -a /etc/dropbear_rsa_host_key /etc/initramfs-tools/etc/dropbear/ cp -a /etc/dropbear/dropbear_dss_host_key /etc/initramfs-tools/etc/dropbear/
Ещё, при первом запуске
update-initramfs
, Dropbear генерит пользовательские ключи, которые кладёт в /etc/initramfs-tools/root/.ssh. В дальнейшем, каждый раз при запуске update-initramfs
, открытый ключ id_rsa.pub копируется в authorized_keys пользователя root (только initramfs окружения, конечно). Конечно, лучше взять тот authorized_keys, который уже используется в системе.cp -a /root/.ssh/authorized_keys /etc/initramfs-tools/root/.ssh/id_rsa.pub
После этого, можно обновить initramfs:
update-initramfs -c -k`uname -r`
Теперь надо настроить сетевой интерфейс для initramfs. Это можно сделать, отредактировав параметры командной стоки, передаваемые загрузчиком GRUB ядру — добавив параметр
ip=
. Описание этого параметра — в документации исходников ядра — файл Documentation/filesystems/nfsroot.txt (в более ранних версиях — Documentation/nfsroot.txt).Правим файл /etc/default/grub. Это обычный шелл скрипт, он сорсится скриптом
/usr/sbin/grub-mkconfig
, который вызывается из update-grub
.К значению переменной
GRUB_CMDLINE_LINUX_DEFAULT
, добавим:ip=10.11.0.22::10.11.0.1:255.255.255.0:host22:eth0:off
Вот как выглядит конфиг (я вынес параметр ip= в отдельную переменную):
# [skip] GRUB_CMDLINE_LINUX_IP="ip=10.11.0.22::10.11.0.1:255.255.255.0:host22:eth0:off" GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1 ${GRUB_CMDLINE_LINUX_IP}" #[skip]
После правки конфига надо запустить
update-grub
.На этом почти всё. После перезагрузки будет запущен
dropbear
. Можно войти по SSH и вручную открыть том:/sbin/cryptsetup luksOpen \ /dev/disk/by-uuid/94d85942-2089-4287-9b64-f436b50637cd host22_pv
Открыть том — мало. Надо убить запущенный в консоли процесс, выполняющий скрипт /scripts/local-top/cryptroot:
/sbin/pkill -f "/bin/sh /scripts/local-top/cryptroot"
Корневая система смонтирована, пошла загрузка системы.
Для удобства, действия по открытию тома и прибиванию ставшего ненужным процесса, можно оформить в виде скрипта. Для этого создаётся скрипт
/etc/initramfs-tools/hooks/unlockpv
с таким кодом:#!/bin/sh UNLOCK_SRC='/dev/disk/by-uuid/94d85942-2089-4287-9b64-f436b50637cd' UNLOCK_DST='host22_pv' PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac cat >${DESTDIR}/sbin/unlockpv <<EOF #!/bin/sh /sbin/cryptsetup luksOpen \ $UNLOCK_SRC \ $UNLOCK_DST /sbin/pkill -f "/bin/sh /scripts/local-top/cryptroot" /sbin/pkill /sbin/dropbear EOF chmod 0700 ${DESTDIR}/sbin/unlockpv
После сохранения
unlockpv
придётся обновить initramfs:update-initramfs -c -k`uname -r`
Теперь, для открытия тома, достаточно будет выполнить команду
/sbin/unlockpv
.Упдате. 24.02.2010 23:50. Текст скрипта
/etc/initramfs-tools/hooks/unlockpv
был приведён не полностью — быть может, из-за того, что не заэскейпил скобки в выражении cat >${DESTDIR}/sbin/unlockpv <<EOF
. Всё, что идёт дальше — содержимое /sbin/unlockpv
было отрезано. Исправил. Прошу прощения за неточность.