2022-2024年支持无全盘加密(FDE)密码远程SSH登录的加密主目录最优方案及ecryptfs替代方案技术问询
2022-2024年支持无全盘加密(FDE)密码远程SSH登录的加密主目录最优方案及ecryptfs替代方案技术问询
我之前长期用Ubuntu的ecryptfs加密主目录,这套方案能让服务器按电源或WOL唤醒后直接SSH登录,不用输全盘加密的解锁密码,非常省心。但后来听说ecryptfs已经不算安全的主流方案了,虽然ecryptfs-utils还能装,但还是想找更现代的替代方案,核心需求很明确:
- 至少用户主目录要用现代强加密保护
- 必须支持远程SSH登录
- 服务器开机过程不能有密码解锁的中断(不想用iKVM这类工具)
- 开机只需要按电源或发WOL包,不用额外手动操作
折腾了很久,整理出几个可行方案,分享给有同样需求的人:
方案一:TPM-backed全盘加密(Ubuntu新特性)
我之前一直抵触TPM,但发现Ubuntu已经推出了TPM绑定的全盘加密功能,虽然目前还是实验性的,不是所有机器都兼容,但确实符合我的需求——开机自动解锁,不用手动输密码。
- 关键补充:一定要给LUKS卷额外添加一个备用解锁密钥,这样就算TPM出问题,也能从其他系统挂载访问数据
- 社区有配套的配置脚本,我还fork了一份,加了更详细的说明,并且适配了pipx运行,用起来更方便
方案二:LUKS+FIDO2密钥(TPM替代方案)
如果机器没法用TPM,FIDO2密钥是个不错的替代,但需要替换Ubuntu默认的initramfs工具为dracut,具体步骤如下:
- 用
systemd-cryptenroll注册你的FIDO2密钥:
(可以根据自己的需求去掉sudo systemd-cryptenroll --fido2-device auto --fido2-with-client-pin=no --fido2-with-user-presence=no /dev/sda3--fido2-with-client-pin=no或--fido2-with-user-presence=no,具体参数含义看systemd-cryptenroll的手册) - 修改
/etc/crypttab,添加FIDO2设备自动检测配置:
执行sudo cat /etc/crypttab,确保内容类似:dm_crypt-0 UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeee123 none luks,fido2-device=auto - 安装依赖并配置dracut:
创建dracut的FIDO2配置文件sudo apt install dracut fido2-tools/etc/dracut.conf.d/11-fido2.conf:
创建主机专属的dracut配置cat << EOF | sudo tee /etc/dracut.conf.d/11-fido2.conf ## 注意引号里的空格不能省略 ## 原本的libfido2.so配置没法自动拉取依赖,所以用下面的临时解决方法 # install_optional_items+=" /usr/lib/x86_64-linux-gnu/libfido2.so.* " install_items+=" /usr/bin/fido2-token " # 用于自动检测FIDO2密钥的必要文件 install_items+=" /usr/lib/udev/rules.d/60-fido-id.rules /usr/lib/udev/fido_id " EOF/etc/dracut.conf.d/10-hostonly.conf:sudo tee /etc/dracut.conf.d/10-hostonly.conf <<< "hostonly=yes" - 生成新的initramfs:
sudo dracut -f
- 踩坑提示:有些FIDO2密钥比如Google Titan可能不兼容,建议先测试再用
方案三:initrd集成Dropbear SSH服务器(适合无TPM/FIDO的设备,比如树莓派)
之前以为这个方案很繁琐、容易出问题,没想到Ubuntu 24.04上配置意外简单:把Dropbear SSH服务器集成到初始化ramdisk里,这样服务器开机到LUKS解锁环节时,就能远程通过SSH输入解密密码,不用物理接触机器。完美解决了树莓派这类没有TPM/FIDO支持的设备的需求。
其他思路:Tailscale SSH
传统SSH需要客户端读取本地磁盘上的密钥文件,而Tailscale SSH不需要依赖本地密钥对,客户端的任何OS用户都能通过Tailscale网络连接到服务器,相当于绕开了加密主目录里密钥文件无法访问的问题,不过这个方案需要依赖Tailscale的服务,适合已经在用Tailscale的场景。
备注:内容来源于stack exchange,提问作者LiveWireBT




