跳转到内容

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

来自 Arch Linux 中文维基

以下是一些用 dm-crypt 加密辅助(secondary)文件系统(即,非根文件系统)的例子。

总览

[编辑 | 编辑源代码]

加密辅助文件系统不会对操作系统、程序文件进行加密,因此通常只用于单独保护敏感数据。对于USB驱动器等外部介质,进行加密可确保在不同计算机上使用时,数据安全不受威胁。此外,也可按照数据访问人员将数据分类,分别使用不同的密钥加密。

dm-crypt 是块级别加密层,其将加密整个块设备(例如,分区回环设备)。

若要加密单个文件,需要使用文件系统层级的加密。例如使用eCryptfsEncFS。有关保护隐私数据的更多信息,参见静态数据加密

分区

[编辑 | 编辑源代码]

本例介绍的是对 /home 分区的加密,但相关方法也可以应用到其它包含用户数据的非根分区。

提示:可以为每个用户的/home目录单独分配一个分区,也可以所有用户的/home目录共享一个分区。

下文假定用于/home目录的分区已经创建。若该分区曾用于其它用途,因而包含了数据,可能需要使用dm-crypt专用方案安全擦除分区。注意,只擦除一个分区,而不擦除整个磁盘,可能仍会泄露一些数据。

建立 LUKS 头:

# cryptsetup options luksFormat device

device应对应已创建的分区。options的取值参见Dm-crypt/设备加密#LUKS_模式的加密选项

使用设备映射器对设备进行解密,以对加密的分区进行操作:

# cryptsetup open device name

分区解密之后,会被映射成块设备 /dev/mapper/name。之后,建立文件系统

# mkfs.fstype /dev/mapper/name

若所有用户共享/home目录,则可将创建好的文件系统挂载到/home;若该文件系统是某个用户专用的,则挂载到/home/username。参见 #手动挂载和卸载

提示:卸载并再挂载一次文件系统,可确定映射有无问题。

手动挂载和卸载

[编辑 | 编辑源代码]

挂载分区:

# cryptsetup open device name
# mount /dev/mapper/name /mnt/home

卸载:

# umount /mnt/home
# cryptsetup close name
提示:GVFS 也可以挂载加密的分区。若使用支持 gvfs 的文件管理器(例如,Thunar)挂载加密分区,则会弹出密码输入框。对于其他桌面环境,可使用zulucryptAUR进行图形化挂载。

自动解锁并挂载

[编辑 | 编辑源代码]

有三种不同方法来自动化解锁分区并挂载文件系统。

启动时解锁

[编辑 | 编辑源代码]

配置 /etc/crypttab 文件,systemd会在系统启动过程中自动解析该文件,并以此解密相应设备。若要挂载所有用户共用的home分区,或要自动挂载其它加密的块设备,推荐使用本方法。

可参考Dm-crypt/系统配置#crypttab。此外,Dm-crypt/系统配置#在启动时挂载中提供了示例配置。

用户登录时解锁

[编辑 | 编辑源代码]
  • 使用pam_exec:若需要为每个用户挂载单独的加密home分区,推荐使用该方式。
  • 使用pam_mount

文件容器

[编辑 | 编辑源代码]

Cryptsetup 对设备进行操作。因此,若要使用文件容器,需要配置回环设备。好在,在后台,cryptsetup可自动管理回环设备(请见 Gentoo:Custom_Initramfs#Encrypted_keyfile),无需手动调用 losetup

首先,使用恰当的随机数生成器dd 创建一个加密容器:

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

这会创建大小为 100 MiB 的 bigsecret.img 文件。

注意,不要遗漏iflag=fullblock选项。否则,可能出现“部分读”问题。详见dd#Partial_read:_copied_data_is_smaller_than_requested

要避免之后调整容器大小的麻烦,在创建文件容器时,确保其大小大于要加密的文件的总大小、文件系统内部数据/元数据开销和LUKS头的总和。若使用LUKS,则仅其元数据就可能需要多达16MiB的空间。创建一个小于 LUKS头(16MiB)大小的文件容器会在打开设备时报错Requested offset is beyond real size of device bigsecret.img

之后的操作和#分区中的相同,但要将 device 替换为 bigsecret.img

cryptsetup 会自动寻找可用的回环设备设备并将文件附加到设备上。在卸载之后,文件容器应该相应地关闭,cryptsetup之后会分离使用的回环设备。

提示:使用dm-crypt加密容器非常灵活。可查看Tomb的功能和文档详细了解。Tomb提供了一系列dm-crypt脚本,以便快速灵活地处理加解密操作。

使用 losetup 手动挂载和卸载

[编辑 | 编辑源代码]

首先,查找未使用的回环设备:

# 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