Dm-crypt/zh-cn

dm-crypt 是使用内核加密API框架和设备映射器（device mapper）子系统的磁盘加密系统. 使用dm-crypt，管理员可以加密整个磁盘，逻辑卷，分区以及单个文件.

dm-crypt子系统支持Linux Unified Key Setup (LUKS)结构，允许多个密钥访问加密数据，以及操作密钥（例如更改密钥，添加额外的密码等）. 尽管dm-crypt也支持非LUKS，本文将重点关注LUKS功能，主要是因为它的灵活性，可管理性以及社区中的广泛支持.

配置
在开始使用dm-crypt之前有两个先决条件：


 * 1) 配置Linux内核
 * 2) 安装  包

内核配置
要使用dm-crypt，有一些必要的配置条目.

首先，必须包括对device mapper基础结构以及'crypt target'' 的支持：

接下来，Linux内核需要支持管理员想要用于加密的一组加密API. 这些可以在Cryptographic API部分找到：

如果根文件系统也要被加密，则需要创建初始ram文件系统，其中根文件系统在挂载之前被解密. 因此，这也需要initramfs支持：

如果使用tcrypt加密选项（TrueCrypt/tcplay/VeraCrypt兼容模式），则还需要将以下项目添加到内核中. 否则，cryptsetup将返回以下错误："device-mapper: reload ioctl failed: Invalid argument" 和 "Kernel doesn't support TCRYPT compatible mapping".

安装 Cryptsetup
包提供命令，该命令用于打开或关闭加密存储以及管理与之关联的密码或密钥.

Benchmark
provides a benchmarking tool which will help to decide which setup to choose. The output depends on kernel settings as well as USE flags and destination (HDD, SSD etc.).

密钥文件或密码
为了开始加密存储，管理员需要决定使用哪种方法作为加密密钥. 支持使用密码或密钥文件. 对于密钥文件，这可以是任何文件，但建议使用具有适当保护的随机数据的文件（考虑到访问此密钥文件将意味着访问加密数据）.

要创建密钥文件，可以使用命令：

在接下来的部分中，我们将显示两种情况的每个命令 - 密码和密钥文件. 当然，只需要其中一种方法.

创建加密存储平台
要创建加密存储平台（可以是磁盘，分区，文件......），请使用命令和 操作.

例如，要将 作为加密数据的存储介质：

要使用密钥文件而不是密码：

告诉用于真实加密密钥的密钥长度（与密码或密钥文件不同，这是用于真实加密密钥的）.

打开加密存储
为了打开加密存储（即通过透明解密使真实数据可访问），请使用 操作.

如果使用了密钥文件，那么命令将如下所示：

命令成功完成后，名为的新设备文件将可用.

如果这是第一次使用此加密设备，则需要对其进行格式化. 以下示例使用Btrfs文件系统，但当然任何其他文件系统都可以：

格式化文件系统或过去已完成格式化后，可以在系统上挂载这个设备文件：

关闭加密存储
为了关闭加密存储（即确保不再通过透明解密访问实际数据），请使用 操作：

当然，请确保设备不再使用.

操作 LUKS 密钥
LUKS密钥用于访问真正的加密密钥. 它们存储在（加密）分区，磁盘或文件的标头中的插槽中.

列出插槽
使用 操作，可以显示有关加密分区，磁盘或文件的信息. 这包括插槽：

在上面的例子中，使用了两个插槽. 请注意， 不会泄露任何敏感内容 - 它只是显示LUKS标头内容. 不需要提供解密密钥来调用.

添加一个密钥文件或密码
要添加其他密钥文件或密码来访问加密存储，请使用 操作：

要使用密钥文件解锁密钥（但仍然需要密码）：

如果要添加密钥文件（例如）：

或者，使用第一个密钥文件解锁主密钥：

删除一个密钥文件或密码
使用 操作，可以删除密钥文件或密码（因此它们不能再用于解密存储）：

或者删除密钥文件：

确保至少有一种访问数据的方法仍然可用. 一旦使用的密码或密钥文件被删除，就无法再次恢复.

清空一个插槽
Suppose the passphrase or keyfile is no longer known, then the slot can be freed. Of course, this does require prior knowledge of which slot that the passphrase or keyfile was stored in. 假设密码或密钥文件已遗失，则可以释放插槽. 当然，这需要事先知道密码或密钥文件存储在哪个插槽中.

例如，要清空插槽2（这是第3个插槽，因为插槽从0开始编号）：

此命令将在继续之前要求输入有效的密码. 或者可以传递密钥文件以使用：

自动挂载加密文件系统
到目前为止，本文主要关注加密文件系统的手动设置和挂载/卸载. 存在一个init服务，它自动解密和挂载加密文件系统.

配置 dm-crypt
编辑文件并为每个文件系统添加条目. 支持的条目在文件中有详细记录，下面的示例只是 - 示例：

配置fstab
下一步是将配置为，在（解密的）文件系统可用时自动挂载. 建议首先获取解密（已挂载）文件系统的UUID：

然后，相应的更新文件.

将initscript添加到bootlevel
不要忘记在boot启动时启动 init服务：

Make decrypted device nodes visible
If you have decrypted/unlocked a device before the services were started for example your root disk in an with an initramfs then it's possible that the mapped device is not visible. In this case you can run the following to recreate it.

挂载 TrueCrypt/tcplay/VeraCrypt 卷
使用的设备文件或要打开的文件的路径替换container-to-mount. 成功打开后，明文设备将显示为，您可以像任何普通设备一样.

如果您使用的是密钥文件，请使用 选项. 打开隐藏卷，使用 选项. 对于在系统模式下加密的分区或整个驱动器，请使用 选项.

完成后， （卸载）卷，然后使用以下命令关闭容器：

External resources

 * The cryptsetup FAQ hosted on GitLab covers a wide range of frequently asked questions.