本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。
crypttab — 加密块设备配置
/etc/crypttab
/etc/crypttab
文件用于描述
在系统启动过程中创建的加密块设备(加密卷)。
空行以及以井号"#
"开头的行将被忽略。
其余每一行描述一个加密块设备(加密卷)。
不同字段之间使用空白符分隔。
每一行都遵守如下格式:
name
encrypted-device
password
options
每一行的前两个字段是必须存在的字段, 而其余的字段则是可选字段(也就是可以省略)。
使用此文件创建的加密卷支持三种不同的加密模式(LUKS, plain, TrueCrypt)。 参见 cryptsetup(8) 手册以了解这三种模式的详细信息。 如果没有在第四个字段(选项字段)中明确指定加密模式,那么: 如果块设备包含一个 LUKS 签名,那么使用 LUKS 加密模式, 否则使用 plain 模式(也就是原始 dm-crypt 格式)。 [译者注]因为 TrueCrypt 存在安全漏洞并且已经在2014年停止开发,所以切勿再使用此种加密模式。
第一个字段(必须)是加密卷的映射名称,
也就是映射在
/dev/mapper/
目录下的设备名称。
第二个字段(必须)是加密卷自身。可以是下列三者之一:(1)加密卷所在底层块设备的绝对路径;(2)加密卷所在底层 loop 文件的绝对路径;
(3)以 "UUID=00112233-4455-6677-8899-aabbccddeeff
" 格式表示的LUKS加密卷的UUID值(可以使用
cryptsetup luksUUID device
命令显示LUKS加密卷的UUID值)。
第三个字段(可选)是加密卷的密码文件。
密码文件必须以绝对路径表示,并且其中仅包含用于解开加密卷的密码。
如果省略此字段或者设为特殊值
"none
" 或 "-
" ,
那么就表示在系统启动过程中手工输入解密密码。
对于 swap 加密卷,建议使用 /dev/urandom
或 /dev/hw_random
作为密码文件。
最好不要使用 /dev/random
作为密码文件,
否则系统有可能因为无法产生足够的随机数而不能完成启动。
第四个字段(可选)是逗号分隔的加密卷选项。 可以识别的选项如下:
cipher=
¶指定加密算法。
cryptsetup(8)
手册中列出了此选项的所有可用值以及默认值。
建议使用带有不可预测的初始向量值的加密算法(例如
"aes-cbc-essiv:sha256
"
算法)。
discard
¶允许透过加密卷向底层块设备传递 discard 请求。 此选项可以提高 SSD 的性能,但是对安全性有不利影响。
hash=
¶指定用于哈希密码的散列算法。 参见 cryptsetup(8) 手册以了解 此选项的取值范围以及默认值。
header=
¶指定额外存储LUKS头信息的元数据设备或文件。 此选项仅可用于 LUKS 设备。 参见 cryptsetup(8) 手册以了解 此选项的取值范围以及默认值。
keyfile-offset=
¶从密钥文件头部跳过多少字节。 参见 cryptsetup(8) 手册以了解 此选项的取值范围以及默认值。
keyfile-size=
¶最多从密钥文件中读取多少字节。
参见
cryptsetup(8)
手册以了解此选项的取值范围以及默认值。
plain 模式将会忽略此选项,
直接使用密钥的大小(size=
)。
key-slot=
¶使用特定编号的密钥槽内的密钥。
如果指定槽位内的密钥不匹配,
那么即使其他槽位内的密钥能够匹配,加密设备也会安装失败。
此选项隐含了 luks
选项。
参见
cryptsetup(8)
手册以了解此选项的取值范围。
默认是按密钥槽的编号依次尝试所有密钥。
luks
¶强制使用 LUKS 加密模式。
使用此选项之后,cipher=
,
hash=
, size=
选项将被忽略,
因为它们将由设备上的"LUKS头"提供。
_netdev
¶将底层块设备标记为网络块设备。
也就是必须在网络可用之后才能启用此设备。类似于带有 _netdev
标记的
systemd.mount(5)
单元。用于启用此设备的服务单元将被安排在
remote-fs-pre.target
与
remote-cryptsetup.target
之间启动(而不是在
cryptsetup-pre.target
与
cryptsetup.target
之间)。
如果该加密卷也用于
fstab(5)
中的某个挂载点,那么该挂载点也必须使用 _netdev
选项。
否则可能会造成循环依赖:
local-fs.target
依赖于该挂载点、
配置网络的服务又通常在 local-fs.target
挂载完成之后才会启动。
noauto
¶不将此设备添加到 cryptsetup.target
之中,
也就是若非必须,不在系统启动时自动解锁(解密)。
如果该设备用于某个挂载点,
除非此挂载点已被 noauto
禁止自动挂载,
否则该设备将会在系统启动过程中被自动解锁(解密)。
nofail
¶只将此设备用作
cryptsetup.target
的非必要依赖。此设备仍会被启动,
但系统启动时并不等待此设备的出现,也不等待它完成解锁(解密)。
此加密卷的故障不会导致系统启动失败,但其他依赖此加密卷的单元仍然会失败,
特别是当此加密卷用于某个挂载点时,
该挂载点也需要使用 noauto
选项,
否则如果解锁(解密)失败,仍然会导致系统启动失败。
offset=
¶使用底层块设备的起点偏移量(以512字节的扇区为单位)。 此选项仅可用于 plain 模式(也就是原始 dm-crypt 格式)的加密卷。
plain
¶强制使用 plain 加密模式(也就是原始 dm-crypt 格式)。
read-only
, readonly
¶以只读模式 使用加密卷。
skip=
¶从加密数据头部跳过多少个512字节的扇区。
此选项与 offset=
的不同之处在于,
此选项已经将初始化向量所使用的扇区考虑在内。
使用 offset=
选项将会把初始化向量向后平移指定的距离。
所以,如果设置了 offset=
,
那么底层块设备的 n
n
号扇区对于初始化向量的计算来说,就是 0 号扇区。
对于 offset=
来说,
底层块设备的 n
n
号扇区对应着映射设备的 0 号扇区,
而初始化向量的生成将从 n
号扇区开始。
此选项仅可用于 plain 模式(也就是原始 dm-crypt 格式)的加密卷。
size=
¶指定密钥的位数(注意,不是字节大小)。参见 cryptsetup(8) 手册以了解 此选项的取值范围以及默认值。
sector-size=
¶以字节为单位指定扇区大小。参见 cryptsetup(8) 手册以了解 此选项的取值范围以及默认值。
swap
¶将加密卷用作swap设备。
这将在安装好加密卷之后自动使用
mkswap(8)
对映射后的设备进行格式化。
此选项隐含了 plain
选项。
警告:使用 swap
选项将会导致在每次系统启动过程中都彻底擦除底层加密块设备上的数据。
所以必须确保
正确的设置了第二个字段。
tcrypt
¶强制使用 TrueCrypt 加密模式(强烈反对使用此模式)。
使用此模式之后,
下面的选项将被忽略
(因为没有意义或已被包含在设备上的 TrueCrypt 头部之中):
cipher=
,
hash=
,
keyfile-offset=
,
keyfile-size=
,
size=
。…[略]…
timeout=
¶等待输入密码的最大时长。 默认的时间单位是秒,但是也可以明确的使用 ms, s, min, h, d 单位后缀。 默认值 0 表示永不超时。
tmp
¶将此加密卷用作 /tmp
挂载点的底层设备。
这将在安装好加密卷之后自动使用
mke2fs(8)
对映射后的设备进行格式化。
此选项隐含了 plain
选项。
警告:使用 tmp
选项将会导致在每次系统启动过程中都彻底擦除底层加密块设备上的数据。
所以必须确保
正确的设置了第二个字段。
tries=
¶允许用户最多输入几次密码。 默认值是 3 。 设为 0 表示允许无限次。
verify
¶如果从控制台读取密码, 那么用户必须两次输入相同的密码, 以防止偶然的按键错误。
x-systemd.device-timeout=
¶在放弃此加密卷之前,
要求 systemd 等待此加密卷出现的最大时长。
默认的时间单位是秒,但是也可以明确的使用
"s
",
"min
",
"h
",
"ms
" 单位后缀。
在系统启动的早期阶段,以及 systemd 重新加载其自身配置的时候, 该文件将被 systemd-cryptsetup-generator(8) 转化为本地单元。
例 1. /etc/crypttab 实例
设置了四个加密卷。两个基于普通块设备的 LUKS 加密卷(第二个位于SSD上)、 一个基于 loop 文件的 LUKS 加密卷、 最后一个是加密的交换分区。
luks UUID=2505567a-9e27-4efe-a4d5-15ad146c258b sdb1_crypt /dev/sdb1 none luks,discard loopluks /srv/loop_luks swap /dev/sda7 /dev/urandom swap