如何在Linux中使用fstab自动挂载LUKS设备(加密分区)
在本文中,我将继续使用LUKS磁盘加密,并分享在Linux节点启动期间使用和不使用加密密钥自动挂载LUKS设备的步骤。
如果尚未启用使用密钥自动安装,则可以使用LUKS密码来手动安装加密分区。
LUKS磁盘加密如何工作?
可以使用LUKS对整个块设备进行加密。
非常适合保护可移动存储介质或者笔记本电脑磁盘驱动器上的数据LUKS磁盘加密使用现有的设备映射器内核子系统
它还提供了密码短语增强功能,有助于防止字典攻击
使用不带密钥的fstab自动安装加密分区(提示输入LUKS密码)
在上一篇文章中,我们已经有了一个LUKS加密分区/dev/sdb1
,现在我们可以在每次节点引导时手动挂载加密分区,或者可以在启动阶段使用LUKS密码使用fstab
自动挂载LUKS设备。
重要的提示:
如果我们在不使用加密密钥的情况下执行此活动,则重启将在用户提示下停止,提示我们输入LUKS密码以挂载LUKS设备。
或者,我们也可以配置网络绑定磁盘加密,其中客户端将从tang服务器获取此密钥以自动安装LUKS设备。
将以下条目添加到/etc/fstab
中
/dev/mapper/secret /secret ext4 defaults 0 0
接下来,将下面的条目添加到/etc/crypttab
中。
其中我们提供LUKS设备名称,映射的分区和密钥文件位置。
但是由于在此阶段我们还没有创建任何密钥文件,因此我们将其设置为none
。
secret /dev/sdb1 none
下一步,重新启动节点,并检查重新启动是否停止,以等待LUKS密码安装加密的设备
使用带有键的fstab挂载LUKS设备(不提示输入LUKS密码)
LUKS磁盘加密最多可以使用8个密钥槽来存储密码。
我们可以使用这些键自动安装LUKS设备。
使用以下命令检查当前使用的钥匙槽。
如我们所见,这里只使用了一个密钥槽,我们其中设置了加密分区的LUKS密码。
[root@node1 ~]# cryptsetup luksDump /dev/sdb1 LUKS header information for /dev/sdb1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 256 MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8 MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2 2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae MK iterations: 19006 UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4 Key Slot 0: ENABLED Iterations: 296206 Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15 d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65 Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
要添加新的加密密钥以自动挂载LUKS设备,请使用以下命令。
[root@node1 ~]# cryptsetup luksAddKey /dev/sdb1 Enter any existing passphrase: Enter new passphrase for key slot: Verify passphrase:
接下来再次验证钥匙槽
[root@node1 ~]# cryptsetup luksDump /dev/sdb1 LUKS header information for /dev/sdb1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 256 MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8 MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2 2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae MK iterations: 19006 UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4 Key Slot 0: ENABLED Iterations: 296206 Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15 d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65 Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 729190 Salt: 3b a3 55 c0 5a d6 d0 0f 26 84 84 c4 a7 d1 83 23 9c 2d 6d ea 9f 76 83 04 36 8b d4 d6 19 07 ba 10 Key material offset: 264 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
如我们现在所见,我们又添加了一个钥匙槽并启用了它。
我们将使用此密钥自动挂载LUKS设备。
说明:
要删除密钥槽,我们可以使用 cryptsetup luksRemoveKey/dev/device,其中设备或者分区在本演示中为/dev/sdb1.
现在让我们创建一个密钥文件,该文件将在引导系统时用于获取LUKS密码。
因此,在重新启动阶段,系统不会停止询问密码,并且将从该密钥文件中获取自动挂载LUKS设备的密钥,并在没有密码的情况下继续引导。
要创建密钥文件,请执行以下命令。
其中我的密钥文件lukskey将在/root
下可用。
[root@node1 ~]# dd if=/dev/random bs=32 count=1 of=/root/lukskey 1+0 records in 1+0 records out 32 bytes (32 B) copied, 0.000294018 s, 109 kB/s
要检查lukskey
文件的内容,请使用xxd
。
如我们所见,其中充满了随机数据。
[root@node1 ~]# xxd /root/lukskey 0000000: cd37 d965 8eb6 e1cd b009 467f 524b bf8e .7.e......F.RK.. 0000010: 5a53 7250 19c0 78b5 6d68 3f9c c8b6 6bf9 ZSrP..x.mh?...k.
现在,让我们将此密钥添加到我们的LUKS设备中
[root@node1 ~]# cryptsetup luksAddKey /dev/sdb1 /root/lukskey Enter any existing passphrase:
验证新的键盘槽。
现在,我们启用了一个新的键槽。
[root@node1 ~]# cryptsetup luksDump /dev/sdb1 LUKS header information for /dev/sdb1 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha256 Payload offset: 4096 MK bits: 256 MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8 MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2 2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae MK iterations: 19006 UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4 Key Slot 0: ENABLED Iterations: 296206 Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15 d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65 Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 729190 Salt: 3b a3 55 c0 5a d6 d0 0f 26 84 84 c4 a7 d1 83 23 9c 2d 6d ea 9f 76 83 04 36 8b d4 d6 19 07 ba 10 Key material offset: 264 AF stripes: 4000 Key Slot 2: ENABLED Iterations: 683556 Salt: 1a 13 aa 01 e1 c2 71 33 29 5f ae fc 25 71 2e c8 9f 9f 85 df 4b 80 61 4d 8d 52 35 7c 66 0a d0 af Key material offset: 520 AF stripes: 4000 Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
接下来,修改" crypttab"并提供" keyfile"详细信息,以确保系统不会停止询问luks设备的密码。
[root@node1 ~]# vim /etc/crypttab secret /dev/sdb1 /root/lukskey
下次重新启动节点
[root@node1 ~]# reboot
我确定这次系统应该自动启动,而不提示我们输入任何密码来挂载LUKS加密分区。
重新启动后,我将验证我的已挂载文件系统,并看到预期的/secret已经处于挂载状态
[root@node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 25G 3.8G 20G 16% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 9.2M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 488M 134M 319M 30% /boot /dev/mapper/secret 4.8G 20M 4.6G 1% /secret tmpfs 379M 8.0K 379M 1% /run/user/42 tmpfs 379M 0 379M 0% /run/user/0
在接下来的文章中,将介绍在Linux中扩展或者缩小(调整大小)LUKS加密分区的步骤。