dm-crypt/加密非根文件系统

出自 ArchWiki

以下是使用 dm-crypt 加密辅助(即非根)文件系统的示例。

概述

加密辅助文件系统通常只保护敏感数据,而保持操作系统和程序文件不加密。这对于加密外部介质(如 USB 驱动器)非常有用,以便可以安全地将其移动到不同的计算机。人们也可以选择根据谁有权访问数据来分别加密数据集。

由于 dm-crypt 是一个块级别加密层,它只加密整个块设备,例如分区循环设备。加密单个文件需要文件系统级别的加密层,例如eCryptfsEncFS。有关保护私有数据的一般信息,请参阅静态数据加密

分区

本示例涵盖了 /home 分区的加密,但它也可以应用于任何其他包含用户数据的可比较的非根分区。

提示: 您可以将单个用户的 /home 目录放在一个分区上,或者为所有用户的 /home 目录创建一个公共分区。

假设分区已存在。如果它以前包含数据,您可以考虑安全擦除分区(dm-crypt 特定方法)。擦除单个分区而不是整个磁盘仍然可能会泄漏一些数据。

然后使用以下命令设置 LUKS 标头

# cryptsetup options luksFormat device

device 替换为先前创建的分区。有关可用 options 等详细信息,请参阅dm-crypt/Device encryption#LUKS 模式的加密选项

要访问加密分区,请使用设备映射器解锁它,使用

# cryptsetup open device name

解锁分区后,它将在 /dev/mapper/name 中可用。现在使用以下命令创建您选择的文件系统

# mkfs.fstype /dev/mapper/name

将文件系统挂载到 /home,或者如果它应该只对一个用户可访问,则挂载到 /home/username,请参阅 #手动挂载和卸载

提示: 卸载并重新挂载一次以验证映射是否按预期工作。

手动挂载和卸载

要挂载分区

# cryptsetup open device name
# mount -t fstype /dev/mapper/name /mnt/home

要卸载它

# umount /mnt/home
# cryptsetup close name
提示: GVFS 也可以挂载加密分区。可以使用支持 gvfs 的文件管理器(例如 Thunar)来挂载分区,并且会弹出一个密码对话框。对于其他桌面环境,zulucryptAUR 也提供了一个 GUI。

自动解锁和挂载

有三种不同的解决方案可以自动化解锁分区和挂载其文件系统的过程。

在启动时

使用 /etc/crypttab 配置文件,解锁在启动时通过 systemd 的自动解析发生。如果您想为所有用户的 home 分区使用一个公共分区或自动挂载另一个加密块设备,这是推荐的解决方案。

有关参考信息,请参阅 dm-crypt/System configuration#crypttab,有关示例设置,请参阅 dm-crypt/System configuration#在启动时挂载

在用户登录时

  • 使用 pam_exec:如果您想将单个用户的 home 目录放在一个分区上,则推荐使用此方法。
  • 使用 pam_mount

文件容器

Cryptsetup 使用设备进行操作,因此在使用文件容器时需要循环设备。但是 cryptsetup 可以在后台处理循环设备管理(请参阅 Gentoo:Custom Initramfs#加密密钥文件),用户不需要手动调用 losetup

首先,从使用 dd 创建加密文件容器开始,使用适当的随机数生成器

$ dd if=/dev/urandom of=bigsecret.img bs=100M count=1 iflag=fullblock

这将创建文件 bigsecret.img,大小为 100 mebibytes。

确保不要省略 iflag=fullblock 选项,否则 dd 可能会返回部分读取。有关详细信息,请参阅 dd#部分读取:复制的数据小于请求的数据

为了避免以后需要调整大小容器,请确保使其大于要加密的文件总大小,加上内部文件系统/元数据开销,加上 LUKS 标头。如果您要使用 LUKS 模式,则仅其元数据标头就需要高达 16 mebibytes。创建小于 LUKS2 标头 (16 MiB) 的文件在尝试打开设备时会给出 Requested offset is beyond real size of device bigsecret.img 错误。

后续步骤与 #分区 中描述的步骤相同,但不要使用 device,而是使用 bigsecret.img

在后台,cryptsetup 将负责查找空闲的循环设备并将文件附加到该设备。卸载后,应相应地关闭文件容器;cryptsetup 也会在之后分离使用的循环设备。

提示: 使用 dm-crypt 的容器可以非常灵活。请查看 Tomb 的功能和文档。它提供了一个 dm-crypt 脚本包装器,用于快速灵活的处理。

使用 losetup 手动挂载和卸载

要手动挂载内部具有 LUKS 和 ext4 文件系统的文件容器,首先找到一个未使用的循环设备

# losetup --find

然后将文件容器附加到循环设备,例如 loop0

# losetup /dev/loop0 bigsecret.img
注意: 如果出现错误 /dev/loop0: No such file or directory,您需要首先以 root 身份使用 modprobe loop 加载内核模块。如今(内核 3.2),循环设备是按需创建的。以 root 身份使用 losetup -f 请求新的循环设备。

现在继续进行正常的 cryptsetup 操作

# cryptsetup open /dev/loop0 secret
# mount -t ext4 /dev/mapper/secret /mnt/secret

以相反的顺序进行操作以正确卸载容器

# umount /mnt/secret
# cryptsetup close secret

要分离使用的循环设备

# losetup --detach /dev/loop0