在Linux中使用LUKS加密驱动器

在本教程中,您将学习如何在Linux中使用LUKS加密驱动器。 LUKS(Linux统一密钥设置)是磁盘加密的标准。它在设备的开头添加了标准化的标头,标头后面直接有一个键槽区域,在标头后面有大量数据区域。整个集合称为“LUKS container‘。 LUKS容器所在的设备称为“LUKS device‘。

根据 Fedora文件,以下是LUKS的“注意事项”;

待办事项

  • LUKS对整个块设备进行加密,因此非常适合保护移动设备(例如可移动存储介质或笔记本电脑磁盘驱动器)的内容。
  • 加密块设备的基础内容是任意的。这对于加密很有用 swap 设备。这对于某些使用特殊格式的块设备进行数据存储的数据库也很有用。
  • LUKS使用现有的设备映射器内核子系统。
  • LUKS提供了密码短语增强功能,可以防止字典攻击。
  • LUKS设备包含多个密钥槽,允许用户添加备份密钥或密码短语。

不要

  • LUKS不适用于要求八个以上用户具有对同一设备的不同访问密钥的应用程序。
  • LUKS不适用于需要文件级加密的应用程序。

在Linux中使用LUKS加密驱动器

那么,如何在Linux中使用LUKS加密驱动器?

安装cryptsetup实用程序

cryptsetup 是用于管理LUKS加密卷的实用程序。因此,为了能够在Linux中使用LUKS加密驱动器,您需要安装此软件包。

在Ubuntu / Debian系统上,运行以下命令进行安装 cryptsetup 效用。

apt install cryptsetup

在CentOS和类似的衍生产品上,只需运行以下命令;

yum install cryptsetup

对于其他发行版,请咨询您的特定发行版软件包管理器,以了解如何安装cryptsetup实用程序。

创建一个块设备以使用LUKS进行加密

您可以使用LUKS加密整个根分区(在初始系统安装过程中轻松完成),特定分区,逻辑卷或RAID设备。

在本指南中,我们已经创建了一个分区, /dev/sdb1 这就是我们在Linux中如何使用LUKS加密驱动器的示例。

要列出系统上的块设备,只需运行 lsblk 命令。

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   15G  0 disk 
├─sda1   8:1    0   13G  0 part /
├─sda2   8:2    0    1K  0 part 
└─sda5   8:5    0    2G  0 part [SWAP]
sdb      8:16   0    4G  0 disk 
└─sdb1   8:17   0    4G  0 part

用LUKS格式化设备

创建设备后,需要将设备初始化为LUKS分区并设置初始密码(对于密钥槽0)。为此,您可以使用 luksFormat 的选项 cryptsetup 命令格式如下:

cryptsetup [OPTION] luksFormat <device>

因此,例如,加密 /dev/sdb1 在上面的分区上,用LUKS键,您将在下面运行命令;

cryptsetup -y -v luksFormat /dev/sdb1

请注意,此命令将覆盖磁盘上的所有数据,因此,如果已使用该驱动器,请确保备份数据。

当命令运行时,系统会提示您

  • 确认格式,
  • 输入并确认密码短语(对于第一个钥匙槽(0),如果驱动器尚无其他密码短语)。

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sdb1: 
Verify passphrase: 
Key slot 0 created.
Command successful.

注意:密码丢失后将无法恢复,因此请确保密码安全并且不要忘记密码。

如果不想提示您输入密码短语,则可以改用密钥文件。

echo "mypassphrase" > ~/luks-key

接下来,您可以在命令行上将包含您的短语的文件的路径指定为;

cryptsetup -y -v luksFormat /dev/sdb1 ~/luks-key

显示LUKS设备标题信息

要查看LUKS设备的详细信息,您可以使用 luksDump LUKS动作;

cryptsetup luksDump /dev/sdb1
LUKS header information
Version:       	2
Epoch:         	3
Metadata area: 	16384 [bytes]
Keyslots area: 	16744448 [bytes]
UUID:          	242c24d8-ac65-413d-b3a2-eb7f2f0993b0
Label:         	(no label)
Subsystem:     	(no subsystem)
Flags:       	(no flags)

Data segments:
  0: crypt
	offset: 16777216 [bytes]
	length: (whole device)
	cipher: aes-xts-plain64
	sector: 512 [bytes]

Keyslots:
  0: luks2
	Key:        512 bits
	Priority:   normal
	Cipher:     aes-xts-plain64
	Cipher key: 512 bits
	PBKDF:      argon2i
	Time cost:  4
	Memory:     1003317
	Threads:    2
	Salt:       b3 c8 b0 69 db 38 cb bd 1c 58 d0 a2 8a b8 92 12 
	            05 47 ca dd c7 3d dd 94 c0 f7 51 04 12 fb 3a 56 
	AF stripes: 4000
	AF hash:    sha256
	Area offset:32768 [bytes]
	Area length:258048 [bytes]
	Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
	Hash:       sha256
	Iterations: 133338
	Salt:       e1 9b 70 5e 87 25 46 d6 08 20 43 60 6c ae 2c 06 
	            42 fa 61 32 f0 fc ca 5f 10 f9 3d 63 dd 22 a4 96 
	Digest:     e9 62 ab 83 4c 3c 81 88 52 08 42 9b 47 c2 e1 b6 
	            d5 8a 59 88 5c 17 02 54 c4 89 36 7e 5f e0 f5 ec

获取LUKS设备的UUID

如果要轻松获取LUKS设备的UUID,请使用 luksUUID 行动;

cryptsetup luksUUID /dev/sdb1

这应该打印与luksDump输出中的UUID相匹配的UUID, 242c24d8-ac65-413d-b3a2-eb7f2f0993b0

在Linux中挂载LUKS加密设备

现在,您已经使用LUKS加密了驱动器/设备,必须对其进行挂载才能访问和存储其中的内容。

创建LUKS驱动器设备映射

设备映射是提供虚拟块设备的通用方法,您可以在虚拟块设备上创建文件系统并将其挂载以访问加密的驱动器以存储数据。

要为LUKS加密驱动器创建设备映射,可以使用这样的命令;例如:

cryptsetup luksOpen <device> <name>

在哪里:

  • 是您刚刚对其设置LUKS加密的设备,例如/ dev / sdb1。
  • 是可以分配给映射的虚拟块设备的唯一名称。这将列为 /dev/mapper/<name>。要确定一个唯一的名称,您可以使用 luks-UUID,其中可以从上面获取UUID。

参见下面的例子;

cryptsetup luksOpen /dev/sdb1 luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0

如果在格式化设备时使用了密钥文件,则可以指定使用相同的密钥文件,如下所示;

cryptsetup luksOpen /dev/sdb1 luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0 --key-file ~/luks-key

这将创建一个虚拟块设备为;

/dev/mapper/luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0

您可以使用 dmsetup 命令;

dmsetup ls
luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0	(254:0)

您还可以使用以下命令检查虚拟块设备的状态 cryptsetup -v status <name>

cryptsetup -v status luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0
/dev/mapper/luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0 is active.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 512 bits
  key location: keyring
  device:  /dev/sdb1
  sector size:  512
  offset:  32768 sectors
  size:    8353792 sectors
  mode:    read/write
Command successful.

在LUKS设备上创建文件系统

因此,既然您已经为LUKS加密驱动器提供了虚拟块设备,则现在需要在其上创建文件系统以使您可以挂载和使用该设备。

下面的命令在我们的LUKS设备上创建EXT4文件系统类型。

mkfs.ext4 /dev/mapper/luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 1044224 4k blocks and 261120 inodes
Filesystem UUID: e940b45b-dbc8-4c40-aaa5-9acf9fcb2119
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

在Linux中挂载LUKS设备

您现在可以使用 mount 命令,或在其中输入一个条目 /etc/fstab 文件以在系统引导过程中自动挂载。

您可以创建一个路径来挂载位置,例如,我们要将其挂载到 /mnt 就我们而言。

mkdir /mnt/luks-242c24d8

安装设备;

mount /dev/mapper/luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0 /mnt/luks-242c24d8/

列出已安装的设备;

df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  984M     0  984M   0% /dev
tmpfs          tmpfs     200M  3.1M  197M   2% /run
/dev/sda1      ext4       13G  3.6G  8.5G  30% /
tmpfs          tmpfs     998M  8.0K  998M   1% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     998M     0  998M   0% /sys/fs/cgroup
tmpfs          tmpfs     200M     0  200M   0% /run/user/0
/dev/dm-0      ext4      3.9G   16M  3.7G   1% /mnt/luks-242c24d8

在系统启动时配置LUKS设备自动挂载;

在Linux中自动挂载LUKS加密设备

关闭LUKS设备

要删除现有的设备映射并从内核内存中擦除密钥,请卸载驱动器(如果已安装)并关闭它;

umount /mnt/luks-242c24d8
cryptsetup -v luksClose luks-242c24d8-ac65-413d-b3a2-eb7f2f0993b0

如果您需要再次安装设备,请使用 luksOpen 操作并按上图所示进行安装。

然后你去。

您已经创建了具有LUKS加密的设备,现在可以使用它来存储数据。

到此为止,我们的指南结束了如何在Linux中使用LUKS加密驱动器。

其他教程

如何在命令行上使用VeraCrypt加密Ubuntu 18.04上的驱动器

如何在Ubuntu 18.04上使用eCryptFS加密文件和文件夹

在Ubuntu 20.04上安装和设置VeraCrypt

Sidebar