如何在Linux中使用fstab自动挂载LUKS设备(加密分区)

时间:2020-01-09 10:42:38  来源:igfitidea点击:

在本文中,我将继续使用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加密分区的步骤。