使用LUKS加密Linux分区
从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的设备的约定。
我们可以使用任何其他方式代替...但是安装时将需要使用该名称。