Вопрос или проблема
У меня запущен сервер dropbear-initramfs в моем окружении nitramfs, однако я не могу заставить его отображать баннер. Следующее содержимое /etc/dropbear/initramfs/dropbear.conf
работает нормально:
...
DROPBEAR_OPTIONS="-I 60 -p 22 -j -k -s -c cryptroot-unlock"
...
Однако, указание файла баннера приводит к тому, что dropbear не запускается, даже несмотря на то, что файлы /etc/banner
и /etc/dropbear/initramfs/banner
присутствуют и заполнены (я даже пробовал включить бит +x)
...
DROPBEAR_OPTIONS="-I 60 -p 22 -j -k -s -b /etc/banner -c cryptroot-unlock"
...
Обновление initramfs с помощью update-initramfs -u
и проверка lsinitramfs /initrd.img | grep banner
не показывает наличие файла баннера. Перезагрузка приводит к тому, что dropbear не запускается, и порт остается закрытым. Я уже проверил, что это единственное изменение отвечает за то, что dropbear (не) запускается.
Я использую Debian 12 с dropbear-initramfs/stable,now 2022.83-1+deb12u2. На моем предыдущем установке Arch, простое включение -b /etc/banner
в DROPBEAR_OPTIONS было достаточным для заполнения initrd файлом баннера. Неужели я что-то упускаю?
Я случайно решил эту проблему, создав пользовательский хук для копирования содержимого файла баннера в initrams.
/usr/share/initramfs-tools/hooks/dropbear_banner
:
#!/bin/sh
# Хук Dropbear initramfs для включения пользовательского баннера
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Проверяем, существует ли файл баннера, и копируем его в initramfs
BANNER_FILE="/etc/dropbear/initramfs/banner"
TARGET_DIR="/etc/"
if [ -f "$BANNER_FILE" ]; then
mkdir -p "${DESTDIR}${TARGET_DIR}"
cp "$BANNER_FILE" "${DESTDIR}${TARGET_DIR}banner"
echo "Пользовательский баннер Dropbear добавлен в initramfs."
fi
После выполнения update-initramfs -u
я могу подтвердить, что баннер присутствует в собранном образе:
# lsinitramfs /initrd.img | grep banner
etc/banner
Я не уверен, удалится ли этот хук корректно, когда я удалю dropbear-initramfs, или выживёт ли он после обновлений dropbear-initramfs. Если кто-то знает лучший (поддерживаемый?) способ это сделать, буду признателен за исправление.
Ответ или решение
Решение проблемы с запуском Dropbear при использовании файла баннера на Debian 12
Проблема с тем, что сервер Dropbear не запускается при указании файла баннера в окружении initramfs, может быть связана с тем, что файл баннера не копируется в образ initramfs, что и приводит к сбою запуска Dropbear. Ваша конфигурация на данный момент выглядит корректной, но причина недоступности файла в initrd заключается в том, что по умолчанию эти файлы не копируются.
Причины возникновения проблемы
-
Отсутствие файла в initramfs: При запуске команды
lsinitramfs /initrd.img | grep banner
не удается обнаружить файл баннера, что указывает на то, что он не был скопирован в initramfs. Это объясняет, почему при добавлении параметра-b /etc/banner
вDROPBEAR_OPTIONS
Dropbear не запускается. -
Несоответствие между конфигурациями: В отличие от вашей предыдущей установки на Arch, где данный функционал был доступен по умолчанию, в Debian может потребоваться ручное управление файлом баннера.
Решение проблемы
Создание пользовательского хука для включения файла баннера в создаваемый initramfs, как вы уже сделали, является правильным и эффективным способом решения проблемы. Ваша реализация имеет следующие ключевые моменты:
-
Проверка существования файла: Ваш хук проверяет, существует ли файл
/etc/dropbear/initramfs/banner
, и только в этом случае копирует его в нужное местоположение. -
Использование стандартного механизма хук-функций: Использование
/usr/share/initramfs-tools/hook-functions
позволяет вашему коду правильно интегрироваться в процесс сборки initramfs.
Вот ваш код:
#!/bin/sh
# Dropbear initramfs hook to include custom banner
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Check if banner file exists and copy it to initramfs
BANNER_FILE="/etc/dropbear/initramfs/banner"
TARGET_DIR="/etc/"
if [ -f "$BANNER_FILE" ]; then
mkdir -p "${DESTDIR}${TARGET_DIR}"
cp "$BANNER_FILE" "${DESTDIR}${TARGET_DIR}banner"
echo "Custom Dropbear banner added to initramfs."
fi
Проверка работоспособности
После создания хука и выполнения команды update-initramfs -u
необходимо снова проверить образ на наличие файла баннера:
lsinitramfs /initrd.img | grep banner
Если файл присутствует, это подтверждает, что ваш хук работает корректно, и теперь Dropbear должен запускаться без ошибок.
Управление хуком при удалении пакета
Что касается удаления этого хука, хук, как правило, будет находиться в каталоге /usr/share/initramfs-tools/hooks/
, и при удалении пакета dropbear-initramfs
он должен удаляться автоматически, если ваш дистрибутив Debian настроен на управление зависимостями корректно. В случае обновления пакета dropbear-initramfs
ваш хук останется нетронутым, так как он расположен в системном каталоге.
Таким образом, ваш способ решения проблемы является достаточно положительным, и пока вы следите за обновлениями, он не должен вызывать трудностей. Однако, если вы заинтересованы в более поддерживаемом методе, рекомендуется следить за документацией Debian и сообществом, так как они могут предложить новые решения или обновления.
Заключение
Создание пользовательского хука — это практическое решение, которое исправляет ситуацию с отсутствием файла баннера в созданном initramfs. Этот подход позволяет гибко управлять содержимым образа и поддерживать ваш сервер в рабочем состоянии. Если возникнут дополнительные вопросы или потребуется новая адаптация, не стесняйтесь обращаться за помощью к сообществу или документации.