如何在Linux上创建加密磁盘分区
假设您有一个可用于 Linux 系统的便携式 USB 驱动器。如果您注重安全,您可能需要加密您的 USB 驱动器,以便其他人无法篡改您 USB 驱动器中的内容。有许多选项可以通过加密来保护驱动器。例如,您可以使用 eCryptFS 加密特定文件或目录。您还可以转向全盘加密。特别是,您可以使用 dm-crypt 和 LUKS,它们共同提供基于设备映射器子系统的块设备的透明加密。
在本教程中,我将介绍如何在Linux上设置使用dm-crypt
+LUKS加密的磁盘分区。
在 Linux 上安装 dm-crypt
要在 Linux 上使用 dm-crypt
+LUKS 加密分区,请安装以下软件。
在 Ubuntu、Mint 或 Debian 上:
$ sudo apt-get install cryptsetup
在 CentOS、Fedora 或 RHEL 上:
$ sudo yum install cryptsetup
创建加密分区
使用fdisk
,创建一个新分区进行加密,如下所示。在此示例中,我假设 /dev/sdb
映射到您的硬盘驱动器以进行加密。

与 LUKS 一起使用的新创建的分区被映射到 /dev/sdb1
。使用cryptsetup
命令初始化该分区。此命令将用随机数据覆盖分区,并提示您输入要使用的初始密码。
$ sudo cryptsetup --verbose --verify-passphrase luksFormat /dev/sdb1

您可以通过运行以下命令来检查分区的 LUKS 配置,该命令将转储 LUKS 标头信息。
$ sudo cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: cbc-essiv:sha256
Hash spec: sha1
Payload offset: 4096
MK bits: 256
MK digest: 18 1d 6d 3e e9 44 2a fe bf 67 78 8f aa 02 7f 91 2a f4 f2 17
MK salt: 26 cc 29 9f 0b 7d ea ff 44 9f fe 34 91 40 6e 9b
af 1e bd 8f d0 d2 1c 3a 70 30 35 5f 2d 49 9a 95
MK iterations: 222875
UUID: 5acc17e0-80be-40ba-beae-626e47b57379
Key Slot 0: ENABLED
Iterations: 891733
Salt: 26 20 29 39 a5 1d 02 7b ca 8c bd 18 bc 29 64 7e
28 dc 06 65 78 0e 16 95 1a 67 14 66 12 2d a3 c1
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 分区。
$ sudo cryptsetup luksOpen /dev/sdb1 sdb1
上述命令将要求您输入密码。使用正确的密码成功打开 LUKS 分区后,加密分区将映射到 /dev/mapper/sdb1
。要检查该块设备是否创建成功,请使用以下命令:
$ sudo fdisk -l
Disk /dev/mapper/sdb1: 1067 MB, 1067156992 bytes
255 heads, 63 sectors/track, 129 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x7b0402f6
最后,您可以在 /dev/mapper/sdb1
上创建一个新的文件系统,并将其挂载到您的 Linux 系统上:
$ sudo mkfs.ext3 /dev/mapper/sdb1
$ sudo mount /dev/mapper/sdb1 /mnt
启动时自动挂载 LUKS 加密硬盘
如果您希望在启动时自动安装 LUKS 加密分区,请按照以下过程操作。
首先,创建一个随机生成的密钥文件,用于在启动序列期间打开加密分区。使该密钥文件只能由 root 读取。
$ sudo dd if=/dev/urandom of=/root/key.sdb1 bs=1024 count=4
$ sudo chmod 400 /root/key.sdb1
将密钥文件添加到 LUKS 配置中:
$ sudo cryptsetup luksAddKey /dev/sdb1 /root/key.sdb1
验证密钥文件是否已成功添加:
$ sudo cryptsetup luksDump /dev/sdb1
Key Slot 0: ENABLED
Iterations: 891733
Salt: 26 20 29 39 a5 1d 02 7b ca 8c bd 18 bc 29 64 7e
28 dc 06 65 78 0e 16 95 1a 67 14 66 12 2d a3 c1
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 404242
Salt: 9d b9 05 d4 06 be 8c db 74 bd cb 59 de 9a 95 8a
91 8c 09 5d 91 5f 0a e6 b5 86 3c 81 73 22 e1 db
Key material offset: 264
AF stripes: 4000
如上所示,密钥槽 1 已被密钥文件占用。
接下来,获取加密块设备的UUID。
$ sudo cryptsetup luksUUID /dev/sdb1
5acc17e0-80be-40ba-beae-626e47b57379
现在,编辑 /etc/crypttab
添加以下条目。
$ sudo vi /etc/crypttab
sdb1 /dev/disk/by-uuid/5acc17e0-80be-40ba-beae-626e47b57379 /root/key.sdb1 luks
/etc/crypttab
中的条目格式如下。
<name of encrypted block device> /dev/disk/by-uuid/<UUID of block device> <location of key file> luks
最后创建挂载点,编辑/etc/fstab
添加挂载点信息:
$ sudo mkdir /mnt_sdb1
$ sudo vi /etc/fstab
/dev/mapper/sdb1 /mnt_sdb1 ext3
马上重启。加密分区应在启动时自动安装。