Как стать автором
Обновить

Ubuntu 9.10. Шифрованная корневая ФС, открытие через SSH

Время на прочтение4 мин
Количество просмотров2.2K
Последние пару лет я шифрую все данные на своих компьютерах. 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 выглядит примерно так:

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 было отрезано. Исправил. Прошу прощения за неточность.
Теги:
Хабы:
Всего голосов 21: ↑14 и ↓7+7
Комментарии12

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань