如何在Linux中使用LUKS加密硬盘(分区)

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

在本文中,将介绍使用LUKS创建加密块设备的步骤。
默认情况下,如果有人将硬盘连接到他们的计算机,即使没有输入任何用户凭据,它也可以自动安装,这就是为什么我们应该始终对硬盘进行加密的原因。

如果硬盘是加密的,那么为了安装加密的设备,我们需要输入密码,没有密码,没有人可以安装它。
因此,这可以保护硬盘或者服务器,硬盘不致丢失或者被盗等,之后就可以轻松访问数据。

为了在Linux中创建加密设备,我们使用LUKS。
LUKS是Linux加密层。

dm-crypt和cryptsetup与LUKS

dm-crypt和cryptsetup

  • 设备映射器是Linux内核的一部分,它提供了一种创建块设备虚拟层(通常是LVM逻辑卷)的通用方法。
    设备映射器加密目标(dm-crypt)使用内核加密API提供对块设备的透明加密。

  • 在Red Hat Enterprise Linux中,与dm-crypt的用户空间交互由称为cryptsetup的工具管理,该工具使用设备映射器基础结构来设置加密的块设备并其中进行操作。

LUKS

  • 使用cryptsetup的现代版本(即从2006年以来),可以以两种主要格式创建加密的块设备,即纯dm-crypt格式或者扩展的LUKS(Linux磁盘上统一密钥设置)格式。

  • LUKS为硬盘加密提供了一种标准的磁盘上格式,从而促进了Linux发行版之间的兼容性并提供了对多个用户密码的安全管理。

  • 与以前的Linux磁盘加密解决方案相比,LUKS将所有必要的设置信息存储在分区标头中,使用户可以更轻松地传输或者迁移其数据。

  • LUKS相对于普通dm-crypt的优势是明显更高的可用性:非默认加密参数的自动配置,添加,更改和删除多个密码短语的能力。

  • 此外,LUKS还提供了针对低熵密码短语(如盐析和迭代的PBKDF2密码哈希)的防御措施

添加新硬盘(可选)

因此,首先需要一个空设备。
我已经在虚拟机中添加了一个新的虚拟磁盘,即/dev/sdb。

[root@node1 ~]# cat /proc/partitions
major minor  #blocks  name
  11        0    1048575 sr0
   8        0   31457280 sda
   8        1     524288 sda1
   8        2   28844032 sda2
   8       16    5242880 sdb
 253        0   26738688 dm-0
 253        1    2097152 dm-1

创建新分区

我们将在此磁盘上创建一个新分区"/dev/sdb1"

[root@node1 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xa12bdd47.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759):
Using default value 10485759
Partition 1 of type Linux and of size 5 GiB is set
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes/512 bytes
I/O size (minimum/optimal): 512 bytes/512 bytes
Disk label type: dos
Disk identifier: 0xa12bdd47
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10485759     5241856   83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

因此,我们的分区已成功创建。

[root@node1 ~]# partprobe

因此,我们的分区已成功创建。

[root@node1 ~]# cat /proc/partitions
major minor  #blocks  name
  11        0    1048575 sr0
   8        0   31457280 sda
   8        1     524288 sda1
   8        2   28844032 sda2
   8       16    5242880 sdb
   8       17    5241856 sdb1
 253        0   26738688 dm-0
 253        1    2097152 dm-1

使用luksFormat格式化分区

因此,我们将在设备上执行" luksFormat",而" luksFormat"命令将创建加密层。
这是想要访问设备的任何人都需要输入的密码。
当然,在现实生活中,我们想要的是真正安全的东西,因为设备安装的频率不是很高。
(点击计算机按键)

[root@node1 ~]# cryptsetup luksFormat /dev/sdb1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sdb1:
Verify passphrase:

初始化LUKS设备

接下来,我们需要执行luksOpen,这将带我们进入使用加密设备的不同级别。
因此,这将创建一个新设备,该新设备由设备映射器管理,因此我们将其称为/dev/mapper/secret

[root@node1 ~]# cryptsetup luksOpen /dev/sdb1 secret
Enter passphrase for /dev/sdb1:

正如我们将在使用cryptsetup和luksOpen命令时看到的那样,将创建一个新设备,并提供该设备的名称。
在此示例中,设备的名称为/dev/mapper/secret

[root@node1 ~]# cd /dev/mapper/
[root@node1 mapper]# ls -l
total 0
lrwxrwxrwx. 1 root root       7 Nov 25 21:11 centos-root -> ../dm-0
lrwxrwxrwx. 1 root root       7 Nov 25 21:11 centos-swap -> ../dm-1
crw-------. 1 root root 10, 236 Nov 25 21:09 control
lrwxrwxrwx. 1 root root       7 Nov 25 21:14 secret -> ../dm-2

在LUKS设备上创建文件系统

现在重要的步骤是我们需要在加密设备上创建文件系统,这意味着将在此处创建文件系统。

重要的提示:

其中请确保我们在加密设备上而非物理分区上创建文件系统。
必须在LUKS设备上创建文件系统。

[root@node1 mapper]# mkfs.ext4 /dev/mapper/secret
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1309952 blocks
65497 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
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

挂载LUKS分区

在LUKS设备上创建文件系统后,就可以继续进行操作,可以创建安装点并进行安装。

[root@node1 mapper]# mkdir /secret
[root@node1 mapper]# cd
[root@node1 ~]# mount /dev/mapper/secret /secret/

一旦我们可以使用mount命令进行验证,我们就可以从mount命令的角度看到,关于加密设备的信息不可见,我们仅看到加密设备。

[root@node1 ~]# mount | grep secret
/dev/mapper/secret on /secret type ext4 (rw,relatime,seclabel,data=ordered)

因此,我们可以在其之上创建文件。
(点击计算机密钥),这些文件将安全地存储在加密设备上。

断开加密分区的连接

让我也向我们展示如何断开加密设备的连接。

[root@node1 ~]# umount /secret
[root@node1 ~]# cryptsetup luksClose /dev/mapper/secret
[root@node1 ~]# mount | grep secret