我正在尝试设置一个带有加密驱动器的专用服务器,我在网上找到了一些帮助来启动和运行它,但是在dropbear-initramfs
正确启动时遇到了一些麻烦。(类似这样的教程https://hamy.io/post/0005/remote-unlocking-of-luks-encrypted-root-in-ubuntu-debian/)
因此,我安装了 dropbear-initramfs 软件包,并收到缺少密钥的错误,无法正常工作。我添加了 authorized_keys,配置 dropbear 以在不同的端口上运行,并更新了 initramfs,但在启动时 dropbear 无法启动,我只是被提示输入正常的用户名/密码。我尝试了几种方法来启动并运行它,我尝试在密钥设置正确后使用 dpkg 重新配置软件包,我不再收到错误消息,但 dropbear 仍然无法启动。
如果有人能提供任何指点,我将非常感激:)
此致
附言:我查看了已经打开的问题,但其中大多数已经很旧了,并且自 ubuntu 16.04(带有 dropbear-initramfs 包)以来,dropbear + initramfs 应该更容易。
答案1
你几乎做了该做的事。
###简短版本:
###TL;DR 由于安全问题,包含您客户端公钥的authorized_keys已被删除...
- Dropbear 和 openssh 都是 SSH 服务器,但它们的密钥格式并不相同,尽管它们具有相同的私钥-公钥原理:
- dropbear 的 DER 格式
- openssh 的私钥的 PEM 格式
authorized_keys
服务器端的文件,known_hosts
客户端上的文件。
这就是为什么要连接到 dropbear 服务器,两者ssh
都dbclient
可以使用,但是/usr/lib/dropbear/dropbearconvert
必须使用转换公钥确保ssh
与 dropbear 兼容,或者使其dbclient
与兼容sshd
。
Dropbear 比它小得多
sshd
,尽管它更基础,但在 Linux 启动过程的早期阶段,特别是当您使用 PXE 和/或 iPXE 等引导加载程序时,最好有一个仅使用 SSH 公钥的服务器。
为此,必须将 dropbear 集成到 init 文件系统(映像initrd
)。必须安装
Ubuntu 软件包dropbear-initramfs
(我在 Ubuntu 18.04 上使用版本 2017.75-3build1)。
所有 dropbear 的设置都在/etc/dropbear-initramfs/
文件夹中,包括配置文件(config
),服务器私钥、rsa、dss、ecdsa(dropbear_*_host_key
)和要接受的客户端公钥(authorized_keys
)必须以正确的 dropbear 格式放在这里。
然后,要更新目录initrd
中的当前映像文件/boot/
,您必须启动:sudo update-initramfs -u
此软件包附带了用于构建initrd
图像的脚本/usr/share/initramfs-tools/hooks/dropbear
,以及用于在启动过程早期阶段运行的脚本/usr/share/initramfs-tools/scripts/init-premount/dropbear
,只有最后的脚本才会嵌入到initrd
图像中。
某些发行版会
authorized_keys
在某些条件下删除以防止ssh
早期连接。为了避免这种情况,您必须检查这一点并采取以下解决方法:$ cd /usr/share/initramfs-tools/scripts/ $ grep -R authorized_keys * init-bottom/dropbear:# delete authorized_keys(5) file to forbid new SSH sessions init-bottom/dropbear:#rm -f ~root/.ssh/authorized_keys init-bottom/dropbear: # just kill this script), so deleting root's authorized_keys(5) file
在解决方法中,我们减轻了删除的压力,authorized_keys
以便在阶段出现问题时能够连接到机器initramfs
。
答案2
适用于 Debian,也适用于 Ubuntu:https://github.com/ceremcem/unlock-luks-partition
使用 SSH 解锁 LUKS 分区
以下说明如何使用您的客户端通过 SSH 连接并解锁加密分区来启动您的服务器:
警告:通过网络输入加密密钥可能是安全的(由于 SSH 连接的安全性)只要您完全确定 initramfs 尚未被征服,因此在您输入磁盘密码时不会发生 MITM 攻击。
1. 安装必需软件包(在服务器上)
apt-get install dropbear initramfs-tools busybox
检查 Dropbear 是否已自行禁用/etc/default/dropbear
NO_START=1
2. 将所需的公钥附加到服务器的authorized_keys文件中
只需将您的公钥复制并粘贴到/etc/dropbear-initramfs/authorized_keys
服务器上
3.创建解锁脚本
创建以下脚本作为/etc/initramfs-tools/hooks/crypt_unlock.sh
#!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following lines will be executed after the passphrase has been correctly entered
# kill the remote shell
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
fi
使其可执行:
chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
创建清理脚本如下/etc/initramfs-tools/scripts/init-bottom/cleanup.sh
:
#!/bin/sh
echo "Killing dropbear"
killall dropbear
exit 0
...并使其可执行:
chmod +x /etc/initramfs-tools/scripts/init-bottom/cleanup.sh
4. 创建静态 IP(或跳过此步骤以使用 DHCP)
编辑/etc/initramfs-tools/initramfs.conf
以添加(或更改)以下行:
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off
format:
IP=${ip}::${gateway_ip}:${netmask}:[${hostname}]:${eth_device}:${autoconf}
([hostname] can be omitted)
在较新的内核中
eth0
被重命名为enp0s3
(或类似名称)。使用以下方法检查ls /sys/class/net
5. 更新 initramfs
警告: 如果你直接地编辑/boot/grub/grub.cfg
,因为它将是覆盖以下命令。您可能会得到一个损坏的启动顺序。请参阅重要提示。
update-initramfs -u
6. 测试
- 重新启动服务器
- 通过连接到您的服务器
ssh [email protected] [-i ~/.ssh/id_rsa]
高级配置
创建反向隧道
您可能希望您的服务器通过 SSH 连接您的链接服务器,创建到其 SSH 服务器的反向隧道,这样您就可以通过链接服务器连接您的服务器,从而无需上述过程通过防火墙转发。
(参见 reverse-tunnel-setup.md)
在其他端口上运行 Dropbear
(基于https://askubuntu.com/a/840067/371730)
定义额外端口:
--- /usr/share/initramfs-tools/scripts/init-premount/dropbear 2018-09-22 01:55:50.963967412 +0300 +++ /usr/share/initramfs-tools/scripts/init-premount/dropbear 2018-09-22 01:56:04.091945164 +0300 @@ -26,7 +26,7 @@ - exec /sbin/dropbear $DROPBEAR_OPTIONS -Fs + exec /sbin/dropbear $DROPBEAR_OPTIONS -Fs -p 22 -p 80
更新 initramfs:
update-initramfs -u