使用原生加密设置 ZFS
本指南介绍如何在现有的加密 Alpine Linux 系统上,使用 ZFS 自身的加密功能,创建和自动挂载加密的 ZFS 驱动器或分区。 如果您想在 ZFS 上全新安装根分区,请参阅 Root on ZFS with native encryption(使用原生加密在 ZFS 上安装根分区)。
系统在关机时将被加密,但在启动时无需您输入额外的密码,因为它使用存储在加密根分区上的密钥。 还提供了其他选项,例如在启动时提示输入密码,而不是将密钥存储在根驱动器上。 本指南中的示例围绕创建用作用户主目录的 ZFS 文件系统而建模,但可以很容易地修改它以创建用于其他目的的文件系统。
准备工作
本指南中的每个命令都应以 root 用户身份运行。
apk update apk add zfs zfs-lts # install the utilities modprobe zfs # load the kernel modules mdev -s # make sure the device nodes are present
创建加密密钥
如果您打算通过输入密码而不是自动解锁来解锁驱动器,则可以跳过本节。 如果您的根分区未加密,则应使用密码。 位置“/etc/home.key”可以是任何位置。
dd if=/dev/random of=/etc/home.key bs=32 count=1 chmod 600 /etc/home.key
重要提示:确保您不会因覆盖根文件系统或类似操作而丢失此密钥。 例如,您可能需要将其副本存储在加密的 USB 驱动器上。
ZFS 设置
创建 zpool
将 `/dev/sd...` 替换为您想要创建 zfs 文件系统的磁盘或分区的名称,例如 `/dev/nvme0n1` 或 `/dev/sda1`。 如果您希望在启动时被提示输入密码,而不是使用上面生成的密钥,则将 `-O keylocation=file:///etc/home.key -O keyformat=raw` 替换为 `-O keylocation=prompt -O keyformat=passphrase`。“homepool”这个名称可以是任何名称。
zpool create -o ashift=12 -O acltype=posixacl -O compression=lz4 \ -O dnodesize=auto -O normalization=formD -O relatime=on -O xattr=sa \ -O encryption=aes-256-gcm -O keylocation=file:///etc/home.key -O keyformat=raw \ -O mountpoint=none homepool /dev/sd...
完成此操作后,确认池已创建
zpool status
应该返回类似以下内容
pool: homepool state: ONLINE config: NAME STATE READ WRITE CKSUM homepool ONLINE 0 0 0 sd... ONLINE 0 0 0 errors: No known data errors
创建并挂载文件系统
zfs create -o mountpoint=/home/username homepool/username chown username:username /home/username # likely unnecessary if not creating a homedir
设置服务以自动挂载新文件系统
rc-update add zfs-import # import existing zpools rc-update add zfs-load-key # load the encryption keys rc-update add zfs-mount # mount the filesystems
最后,
reboot