使用LUKS加密Linux分区

时间:2020-03-21 11:43:30  来源:igfitidea点击:

从Red Hat Enterprise Linux 6开始,Red Hat开始对整个文件系统实施加密。
整个文件系统的这种加密是保护磁盘上数据的更好的方法。
对于倾向于在日常工作中使用移动设备的人们来说,这是一个另外的优势。
主要优点是,即使整个磁盘丢失了,也无法轻松访问数据,因为它已加密,并且需要使用密码短语来访问内部数据。

Red Hat通过LUKS实现了这一点。

LUKS代表Linux统一密钥设置。
LUKS使该工具可以出于安全目的在Linux中对整个分区进行加密。
LUKS最初是由Clemens Fruhwirth创建的。
与其他加密技术相比,使用LUKS进行加密的主要优势在于它独立于平台。
简而言之,我们可以将LUKS称为在Linux中实现文件系统加密的标准。

可以使用LUKS对块设备进行加密。
而且LUKS不会打扰块设备内部的数据,因此我们可以使用LUKS加密任何类型的分区(甚至交换)。
为了使用LUKS访问加密文件系统的内容,要求用户提供密钥的密码短语,该密码将用于解锁文件系统。

LUKS利用dm-crypt模块来访问Linux内核设备映射器。

为了创建加密分区或者访问加密分区,用户使用了cryptsetup实用程序。

  • 不能使用LUKS进行文件级别的加密
  • 对于用户数量有一个限制,可以使用不同的密码才能访问同一块设备。

红帽企业版Linux为我们提供了一个在安装过程中对分区进行加密的界面,这非常容易。
在本教程中,我们将看到如何创建新分区并使用LUKS对其进行加密。

我将在本示例教程中使用CentOS 5.8.
我们可以在Red Hat Enterprise Linux和Centos(以及许多其他发行版)中轻松地执行相同的操作。

对于本教程,我将创建一个5GB的逻辑卷,并将在LUKS的帮助下对该卷进行加密。

[root@myvm ~]# lvcreate -L 5G -n myvolume VolGroup00
  Logical volume "myvolume" created

所以我刚创建的设备是/dev/mapper/VolGroup00-myvolume。
我们将对该卷进行加密。

我仅为该示例创建了一个逻辑卷,我们可以使用任何想要的新创建的分区。
像/dev/sda1,/dev/sda3等。

我们需要做的下一步是使用cryptsetup实用程序格式化设备,并使设备LUKS加密。

[root@myvm /]# cryptsetup luksFormat /dev/mapper/VolGroup00-myvolume

WARNING!
========
This will overwrite data on /dev/mapper/VolGroup00-myvolume irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

我们可以将“/dev/mapper/VolGroup00-myvolume”替换为要使用LUKS加密的任何分区。

上面的cryptsetup命令将要求我们进行确认,因为这将破坏分区上的所有数据。
然后提示我们输入密码。

现在,让我们在设备/dev/mapper/VolGroup00-myvolume上查看有关加密的一些详细信息。

[root@myvm ~]# cryptsetup luksDump /dev/mapper/VolGroup00-myvolume
LUKS header information for /dev/mapper/VolGroup00-myvolume

Version:        1
Cipher name:    aes
Cipher mode:    cbc-essiv:sha256
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      4f 4a 2e 9e 7e 04 44 e5 29 3e 6d d7 9e 56 17 2f 9f 5c bf 42
MK salt:        a1 e5 ba 61 ce e9 48 7b 60 7e f2 e3 c5 61 53 22
                f6 0b b2 8f ff 02 5f 56 62 0b 3d 3a 0f 7c c3 04
MK iterations:  10
UUID:           a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3

Key Slot 0: ENABLED
        Iterations:             311917
        Salt:                   d4 3e f3 37 5d 89 62 be d5 ab ee 27 de 17 b7 f8
                                cf 88 47 bf ab eb 2e 62 69 86 77 72 bc 26 a8 ed
        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

从上面的输出中可以清楚地看到,我们正在使用具有sha256的AES加密。

现在让我们看看如何访问这个新加密的设备。
换句话说,内核的设备映射器将如何识别我们的加密分区。

我们可以获取新加密的设备的UUID,如下所示。

[root@myvm ~]# cryptsetup luksUUID /dev/mapper/VolGroup00-myvolume
a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3

现在,我们将为该设备分配一个设备映射名称,如下所示。

[root@myvm ~]# cryptsetup luksOpen /dev/mapper/VolGroup00-myvolume luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3
Enter LUKS passphrase for /dev/mapper/VolGroup00-myvolume:
key slot 0 unlocked.
Command successful.

现在,在/dev/mapper中将有一个名为“ luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3”的设备。
同样,上述命令luksOpen将解密文件系统,以便可以对其进行访问

[root@myvm mapper]# cd /dev/mapper/; ls
control                                    VolGroup00-LogVol01
luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3  VolGroup00-myvolume
VolGroup00-LogVol00

请记住,该设备目前处于打开状态并且可以访问,因为在给它提供设备映射名称时我们运行了“ cryptsetup luksopen”命令。

现在,让我们以格式化常规分区的相同方式来格式化设备。

[root@myvm mapper]# mke2fs -j /dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
655360 inodes, 1310591 blocks
65529 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

现在,让我们像往常一样安装此设备。

[root@myvm ~]# mount /dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3 /mypartition/

现在,让我们检查并确认是否使用df -h命令正确安装了我们的LUKS格式化和加密的设备。

[root@myvm ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       31G  2.7G   27G  10% /
/dev/sda1              99M   13M   82M  13% /boot
tmpfs                 252M     0  252M   0% /dev/shm
/dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3
                      5.0G  139M  4.6G   3% /mypartition

从上面的输出的最后一行我们可以清楚地看到,我们新映射的加密设备安装在/mypartition下

首先,以免正常卸载分区。
.然后通过cryptsetup锁定文件系统。

[root@myvm ~]# umount /dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3
[root@myvm ~]# cryptsetup luksClose /dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3

上面的第一个命令将卸载,第二个命令将锁定文件系统。

现在,我们可以根据需要再次如下图所示进行解锁和安装。
但是会要求输入密码。

[root@myvm ~]# cryptsetup luksOpen /dev/mapper/VolGroup00-myvolume luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3
Enter LUKS passphrase for /dev/mapper/VolGroup00-myvolume:
key slot 0 unlocked.
Command successful.
[root@myvm ~]# mount /dev/mapper/luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3

注意:luks-a8ac8a06-baf8-4dbc-9c2b-52d3080e9fe3只是我们用来识别带有UUID的设备的约定。
我们可以使用任何其他方式代替...但是安装时将需要使用该名称。