You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

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,具体步骤如下:

  1. 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的手册)
  2. 修改/etc/crypttab,添加FIDO2设备自动检测配置:
    执行sudo cat /etc/crypttab,确保内容类似:
    dm_crypt-0 UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeee123 none luks,fido2-device=auto
    
  3. 安装依赖并配置dracut:
    sudo apt install dracut fido2-tools
    
    创建dracut的FIDO2配置文件/etc/dracut.conf.d/11-fido2.conf
    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
    
    创建主机专属的dracut配置/etc/dracut.conf.d/10-hostonly.conf
    sudo tee /etc/dracut.conf.d/10-hostonly.conf <<< "hostonly=yes"
    
  4. 生成新的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

火山引擎 最新活动