环境:在安装debian系统的时候在磁盘分区步骤 配置了LUKS加密根分区和其余需要加密的分区
1、更新系统
apt update -y
apt upgrade -y
apt full-upgrade -y
重启系统
reboot
2、安装 Dropbear
apt install -y dropbear-initramfs
3、配置在initramfs阶段的网络,添加静态ip
编辑 /etc/initramfs-tools/initramfs.conf 文件
vim /etc/initramfs-tools/initramfs.conf
添加ip
IP=192.168.2.19::192.168.2.254:255.255.255.0:debian
IP=– 启动静态 IP 配置
::– 现场分离器
192.168.2.19– IPv4 协议
192.168.2.254–网关
255.255.255.0– 网络掩码
debian– 主机名
4、配置 Dropbear 以解锁 LUKS 加密系统
- 新目录:/etc/dropbear/initramfs/
- 新配置文件:/etc/dropbear/initramfs/dropbear.conf
- 包含用于公钥身份验证的公钥的新文件:/etc/dropbear/initramfs/authorized_keys
先编辑配置文件
vim /etc/dropbear/initramfs/dropbear.conf
DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s -c cryptroot-unlock"
-I 180:如果在 180 秒内没有传输或接收流量,则断开会话。
-j:关闭 ssh 本地端口转发。
-k:同时禁用远程端口转发。
-p 2222:在指定地址和 TCP 端口上侦听 Dropbear ssh 服务器。在此示例中,使用 TCP/2222。如果未给出选项,它将监听所有地址。最多可以指定 10 个。如果未指定,则默认值为 TCP/22。-p
-s:禁用密码登录。我们将在 Linux / Unix 系统上设置 SSH 密钥进行身份验证,以减少攻击面。
-c cryptroot-unlock:忽略用户提供的命令,始终运行 forced_command。这也会覆盖任何 authorized_keys command= 选项。换句话说,键入 ssh 命令后,立即解锁磁盘,不执行任何其他操作。如果您想手动键入 cryptroot-unlock,您可以跳过此选项。
5、创建用于登录的 SSH 密钥
使用PUTTYgen创建一对公钥和密钥,然后将公钥内容复制到 /etc/dropbear/initramfs/authorized_keys 文件里面保存, 私钥保存为本地文件。
6、更新或生成 initramfs 镜像
update-initramfs -u
update-initramfs -u -v
7、重启,使用PUTTY连接
打开putty,先加载私钥文件,然后再服务器地址栏输入 用户名@地址 和 端口号 进行连接
此时应该就能正常连接到了。然后输入解锁密码进行解锁就行
注意:目前此方法只能解锁根分区,根分区解锁后会断开连接,有可能是已经到了系统启动部分,会断网,ssh也会无法连接,就会导致剩余需要解锁的分区还是无法解锁,系统无法启动。
8、为了确保在解锁根分区后网络连接不丢失,以下步骤可以帮助你。
编辑/etc/initramfs-tools/scripts/init-bottom/
目录中的脚本,以确保在根分区解锁后重新配置网络接口。
nano /etc/initramfs-tools/scripts/init-bottom/net-restart
添加以下内容:
#!/bin/sh
# Reconfigure network after switching root
# Bring down the interface to reset it
ip link set eth0 down
# Reconfigure network interface
ip addr flush dev eth0
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
# Re-add the default gateway
ip route add default via 192.168.1.1
# Reconfigure DNS
echo "nameserver 8.8.8.8" > /etc/resolv.conf
保存并关闭文件后,使脚本可执行:
chmod +x /etc/initramfs-tools/scripts/init-bottom/net-restart
每次修改initramfs
相关脚本后,都需要更新initramfs
镜像:
update-initramfs -u
这样配置之后网络是能通了,但是ssh还是无法连接,目前还没找到解决办法。
9、可以配置其余分区在根分区解锁后自动解锁,这样就只需要解锁根分区的时候输入密码,根分区解锁成功后其余配置过的分区可以自动解锁
步骤
1、确认分区和设备名称: 使用 lsblk
或 blkid
命令查看分区和设备的名称,确保您知道根分区和其他加密分区的设备路径。
2、确保根分区的解锁顺序: 确保您的根分区在 /etc/crypttab
中的定义是正确的,并在引导过程中能够首先被解锁。例如:
cryptroot UUID=<根分区的UUID> none luks
3、修改 /etc/crypttab
: 在 /etc/crypttab
中,确保其他加密分区的定义位于根分区之后。示例:
cryptroot UUID=<根分区的UUID> none luks
cryptdata UUID=<其他分区的UUID> none luks
请使用 blkid
命令获取 UUID。
4、使用密钥文件自动解锁: 为了实现自动解锁,您需要使用一个密钥文件。进行以下步骤:
创建密钥文件:
dd if=/dev/urandom of=/root/luks-keyfile bs=1024 count=4
# /root/luks-keyfile 代表密钥文件的路径和文件名称
将密钥文件添加到 LUKS: 首先,您需要将密钥文件添加到 LUKS 加密分区:
cryptsetup luksAddKey /dev/sda2 /root/luks-keyfile
# /dev/sda2 代表需要设置的LUKS加密的分区
系统会要求您输入分区的原始 LUKS 密码。
确保密钥文件的权限:
chmod 600 /root/luks-keyfile
5、更新 /etc/crypttab
: 修改 /etc/crypttab
以指向密钥文件:
cryptroot UUID=<根分区的UUID> none luks
cryptdata UUID=<其他分区的UUID> /root/luks-keyfile luks
6、更新 initramfs:
update-initramfs -u
7、重启,之后应该只需要输入根分区解锁密码,然后配置过自动解锁的其他分区都会自动解锁。
注意事项
- 使用密钥文件自动解锁具有一定安全风险,确保密钥文件的安全性,限制访问。
- 在设置这些更改之前,确保备份重要数据。
- 如果系统仍然要求输入密码,检查
/etc/crypttab
和/etc/fstab
的配置是否正确,确保没有拼写错误或不一致之处。
取消自动解锁
取消自动解锁,编辑 /etc/crypttab
文件 将指向密钥文件替换为none ,然后更新 update-initramfs -u 重启就行。密钥文件不要删除,并且最好在异地备份一下密钥文件,以免数据发生意外。