Я хочу разблокировать зашифрованный LVM при запуске на безголовом сервере Ubuntu 16.04. Это довольно свежая установка. Единственные установки, которые я сделал, это mate-desktop, xrdp, dropbear и busybox. Мой клиент - PuTTY на компьютере с Windows. Я довольно новичок в Linux, но вот прогресс, который я сделал:
Установленные dropbear и busybox
Использовали puttygen
для генерации пара ключей
Скопировал открытый ключ в ~/.ssh/authorized_keys
и установил надлежащие разрешения (700 на каталог, 600 на файл)
Скопированный открытый ключ на /etc/initramfs-tools/root/.ssh/authorized_keys
и установите соответствующие разрешения (700 на каталог, 600 на файл)
Подтвердили, что мои ключи в порядке, успешно подключившись к обычному сеансу пользователя через PuTTY с использованием аутентификации ключа
Создал сценарий и изменил файлы конфигурации, как описано в по этой ссылке
(Примечание: я не выполнил шаг 8, но мой файл /var/log/auth.log
сделал не содержит ошибок, показанных в разделе «Устранение неполадок» этого блога, если шаг 8 не выполнен.)
Обновлены initramfs
при загрузке системы и показывает графическое приглашение разблокировки LUKS, я не получаю ответ от сервера, когда я пытаюсь подключиться через P uTTY. Время соединения истекло. Я не смог найти никаких ресурсов, которые имеют дело с dropbear / busybox, не работающим при загрузке. Я уверен, что если бы я мог получить ответ, мой ключ работал бы, и я мог бы разблокировать без проблем.
Как я могу узнать, почему dropbear / busybox не запускается при загрузке?
(Для пояснения я все еще могу разблокировать на сервере и SSH в сеансе пользователя.)
После того, что казалось вечностью глубокого погружения в Google, проб и ошибок, я наконец понял это.
Вот шаги, которые я предпринял относительно шагов Я обрисовал в общих чертах в вопросе:
ifconfig eth0 0.0.0.0 вниз
из usr / share / initramfs-tools / scripts / init-bottom / dropbear
, который описан в шаге 6 в блоге; Я никогда не добавлял его обратно, но он мне никогда не понадобился Изменен и добавлены следующие сценарии из этого сообщения :
# Строки комментариев в / usr / share / initramfs-tools / scripts / local-top / cryptroot следующим образом:
#
если [-z "$ cryptkeyscript"]; тогда
cryptkey = "Разблокировка диска $ cryptsource ($ crypttarget) \ nВведите кодовую фразу:"
#if [-x / bin / plymouth] && plymouth --ping; тогда
# cryptkeyscript = "plymouth запрос пароля --prompt"
# cryptkey = $ (echo -e "$ cryptkey")
#else
cryptkeyscript = "/ lib / cryptsetup / askpass"
#fi
фи
# Добавьте / usr / share / initramfs-tools / hooks / cryptroot_unlock и сделайте исполняемым
#
# Предлагать удаленно разблокировать зашифрованный корневой раздел LUKS
#
# См. Связанный пост для источников и благодарностей
#
#! / bin / sh
PREREQ = ""
prereqs ()
{
эхо "$ PREREQ"
}
футляр $ 1 в
предварительные условия)
предварительные требования
выход 0
;;
esac
. / usr / share / initramfs-tools / функции-перехватчики
#
# Начать настоящую обработку
#
SCRIPTNAME = разблокировать
# 1) Создать скрипт для разблокировки luks разделов
cat> $ {DESTDIR} / bin / $ {SCRIPTNAME} << '__EOF'
#! / bin / sh
/ lib / cryptsetup / askpass "Введите пароль тома:"> / lib / cryptsetup / passfifo
__EOF
chmod 700 $ {DESTDIR} / bin / $ {SCRIPTNAME}
# 2) Улучшить сообщение дня (MOTD) информацией о том, как разблокировать раздел luks
cat >> $ {DESTDIR} / etc / motd << '__EOF'
Чтобы разблокировать корневой раздел, запустите "$ {SCRIPTNAME}"
__EOF
# Добавьте / usr / share / initramfs-tools / scripts / local-bottom / dropbear_kill_clients и сделайте исполняемым
#
#
# Завершает все клиентские сеансы DropBear, если остается InitRAMFS
#
# См. Связанный пост для источников и благодарностей
#
#! / bin / sh
PREREQ = ""
prereqs ()
{
эхо "$ PREREQ"
}
футляр $ 1 в
предварительные условия)
предварительные требования
выход 0
;;
esac
#
# Начать настоящую обработку
#
ИМЯ = dropbear
ПРОГ = / sbin / dropbear
# получить все pid сервера, которые следует игнорировать
игнорировать = ""
для сервера в `cat / var / run / $ {NAME} *. pid`
делать
ignore = "$ {ignore} $ {server}"
сделанный
# получить все запущенные pid и закрыть клиентские соединения
для pid в `pidof" $ {NAME} "`
делать
# проверить правильность программы, иначе обработать следующий pid
grep -F -q -e "$ {PROG}" "/ proc / $ {pid} / cmdline" || {
Продолжить
}
# проверяем, нужно ли игнорировать pid (серверы)
skip = 0
для сервера в $ {ignore}
делать
если ["$ {pid}" == "$ {server}"]
тогда
skip = 1
сломать
фи
сделанный
["$ {skip}" -ne 0] && продолжить
# убить процесс
echo "$ 0: Убить $ {pid} ..."
kill -KILL $ {pid}
сделанный
После изменения и добавления этих сценариев dropbear смог запуститься, но мое сетевое устройство не смогло подключиться к сети, поэтому я все еще не мог подключиться к серверу.
Я наконец обнаружил, используя ls / sys / class / net
, что мой сетевой адаптер не назывался eth0
; очевидно, что это старая нотация, которая больше не используется в последних версиях Ubuntu, и поскольку все сообщения, которые я нашел, старые, если не древние, eth0
- это все, на что я нашел ссылки.
Итак, вооружившись эту информацию и еще несколько фрагментов, которые я нашел из других источников, я изменил initramfs.conf
следующим образом:
Изменил часть DEVICE =
в / etc / initramfs- tools / initramfs.conf
читать:
DEVICE = <имя сетевого адаптера, обнаруженного с помощью ls / sys / class / net>
IP = <Статический IP-адрес> :: <Шлюз по умолчанию>: <Маска подсети> :: <имя сетевого адаптера>: выкл.
Обновлены initramfs
( sudo update-initramfs -u
)
Теперь dropbear подключается к сети, и я могу подключиться к серверу и удаленно разблокировать.
Я ломал голову над этим почти неделю со всей плохой информацией (например, просто установкой dropbear-initramfs).
Вот сценарий, который я написал для автоматической установки и настройки dropbear для 16.0.4.
Обязательно прочтите комментарии к коду и адаптируйте сценарий к своей системе!
#!/bin/bash
## LUKS remote decrypt for Ubuntu 16.04.1 - by BinaryShrub
# NOTES:
# Tailor lines 67 - 69 to your system before running!
# Use at your own risk!
# Safety Check
if [ "$EUID" -ne 0 ]
then echo "You must run this as root"
exit
fi
# Install Dropbear
apt -y install dropbear
# Setup authorized keys
mkdir -p /etc/initramfs-tools/root/.ssh
echo "Insert client id_rsa.pub (Leave empty to use ~/.ssh/authorized_keys):"
read -e r
if [[ -z "$r" ]]; then
cp ~/.ssh/authorized_keys /etc/initramfs-tools/root/.ssh/authorized_keys
else
echo "$r" >> /etc/initramfs-tools/root/.ssh/authorized_keys
fi
# Add hook to create unlocker script
f=/usr/share/initramfs-tools/hooks/dropbear-unlocker
cat <<\END > "$f"
#!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "$CONFDIR/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
# Copy dropbear if explicitly enabled, or in case of a cryptroot setup if not explicitly disabled
[ "$DROPBEAR" = y ] || [ "$DROPBEAR" != n -a -r /etc/crypttab ] || exit 0
if [ ! -x "/usr/sbin/dropbear" ]; then
if [ "$DROPBEAR" = y ]; then
echo "dropbear-unlock: FAILURE: Dropbear not found, script wont start!" >&2
else
echo "dropbear-unlock: WARNING: Dropbear not found, script wont start" >&2
fi
exit 0
fi
# Copy the unlock script
s="$DESTDIR/$(ls $DESTDIR | grep root)/unlocker"
echo "#!/bin/sh
# Ask for decrypt key with one disk
# /scripts/local-top/cryptroot
# With Multiple Disks
/sbin/cryptsetup luksOpen /dev/sda3 sda3_crypt
/sbin/cryptsetup luksOpen /dev/sdb3 sdb3_crypt
/sbin/cryptsetup luksOpen /dev/sdc3 sdc3_crypt
# Hack to address https://goo.gl/2fGjCY
mknod /dev/btrfs-control c 10 234
btrfs device scan
# Kill these programs to keep 'init' moving.
echo "Loading OS..."
kill -9 \$(ps | grep cryptsetup | grep askpass | awk '{print \$1}') > /dev/null
kill -9 \$(ps | grep /bin/sh | grep cryptroot | awk '{print \$1}') > /dev/null
exit 0
" > "$s"
chmod +x "$s"
echo "unlocker: loaded"
END
chmod +x "$f"
# Rebuild initramfs
update-initramfs -u
echo "Done! Reboot to initramfs and run ~/unlocker"
https://gist.github.com/BinaryShrub/0587b170dc22b1e7ff7b435c92b53093
bash --login
,"$SHELL" -l
было бы лучше. There' s никакая гарантия user' s оболочка входа в систему удар. – muru 25 October 2017 в 05:11