跳转到内容

Cryptsetup

75% developed
来自维基教科书,开放世界中的开放书籍

在本书中,我将解释如何在基于 Linux 的计算机或笔记本电脑上使用 Linux 统一密钥设置磁盘格式 (LUKS) 对您的分区进行加密。

Linux 加密方法

[编辑 | 编辑源代码]

有两种方法可以加密您的数据

文件系统堆叠级加密

[编辑 | 编辑源代码]
  1. eCryptfs - 它是一个加密的堆叠式 Linux 文件系统。eCryptfs 将加密元数据存储在每个写入文件的标头中,因此加密文件可以在主机之间复制;文件将在 Linux 内核密钥环中使用正确的密钥进行解密。此解决方案被广泛使用,作为 Ubuntu 加密主目录的基础,原生集成在 Google 的 ChromeOS 中,并透明地嵌入在多个网络附加存储 (NAS) 设备中。
  2. EncFS - 它在用户空间提供一个加密文件系统。它在没有特殊权限的情况下运行,并使用 FUSE 库和 Linux 内核模块来提供文件系统接口。您可以在下面找到指向源代码和二进制发布版本的链接。EncFS 是开源软件,根据 GPL 许可证授权。

块设备级加密

[编辑 | 编辑源代码]
  1. Loop-AES - 适用于 Linux 的快速透明文件系统和交换加密包。无需更改 Linux 内核的源代码。适用于 3.x、2.6、2.4、2.2 和 2.0 内核。
  2. TrueCrypt - 它是适用于 Windows 7/Vista/XP、Mac OS X 和 Linux 的免费开源磁盘加密软件。(已弃用)
  3. dm-crypt+LUKS - dm-crypt 是 Linux 内核 v2.6+ 及更高版本和 DragonFly BSD 中的透明磁盘加密子系统。它可以加密整个磁盘、可移动介质、分区、软件 RAID 卷、逻辑卷和文件。

安装 cryptsetup 工具

[编辑 | 编辑源代码]

您需要安装以下软件包。它包含 cryptsetup,一个使用设备映射器和 dm-crypt 目标设置加密文件系统的工具。Debian / Ubuntu Linux 用户键入以下 apt-get 命令

# apt-get install cryptsetup

示例输出

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  cryptsetup-bin libcryptsetup4
Suggested packages:
  busybox
The following NEW packages will be installed:
  cryptsetup cryptsetup-bin libcryptsetup4
0 upgraded, 3 newly installed, 0 to remove and 7 not upgraded.
Need to get 168 kB of archives.
After this operation, 669 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise/main libcryptsetup4 amd64 2:1.4.1-2ubuntu4 [55.8 kB]
Get:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise/main cryptsetup-bin amd64 2:1.4.1-2ubuntu4 [32.2 kB]
Get:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise/main cryptsetup amd64 2:1.4.1-2ubuntu4 [80.0 kB]
Fetched 168 kB in 0s (268 kB/s)
Preconfiguring packages ...
Selecting previously unselected package libcryptsetup4.
(Reading database ... 25374 files and directories currently installed.)
Unpacking libcryptsetup4 (from .../libcryptsetup4_2%3a1.4.1-2ubuntu4_amd64.deb) ...
Selecting previously unselected package cryptsetup-bin.
Unpacking cryptsetup-bin (from .../cryptsetup-bin_2%3a1.4.1-2ubuntu4_amd64.deb) ...
Selecting previously unselected package cryptsetup.
Unpacking cryptsetup (from .../cryptsetup_2%3a1.4.1-2ubuntu4_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for ureadahead ...
Setting up libcryptsetup4 (2:1.4.1-2ubuntu4) ...
Setting up cryptsetup-bin (2:1.4.1-2ubuntu4) ...
Setting up cryptsetup (2:1.4.1-2ubuntu4) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-31-virtual

RHEL / CentOS / Fedora Linux 用户键入以下 yum 命令

# yum install cryptsetup-luks

配置 LUKS 分区

[编辑 | 编辑源代码]

在本例中,我将使用名为 /dev/xvdc 的分区,我们的第一个任务是使用随机数据将该分区覆盖 3 次,这足以保护您免受法医调查。我花了将近 30 分钟才将 20 GB 的分区覆盖 3 次。

# shred --verbose --random-source=/dev/urandom --iterations=3 /dev/xvdc

接下来,我将加密 /dev/xvdc。键入以下命令

# cryptsetup --verbose --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 --use-urandom luksFormat /dev/xvdc

示例输出

WARNING!
========
This will overwrite data on /dev/xvdc irrevocably.
 
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

此命令初始化卷,并设置初始密钥或密码。请注意,密码不可恢复,因此请不要忘记它。键入以下命令创建映射

# cryptsetup luksOpen /dev/xvdc backup2

示例输出

Enter passphrase for /dev/xvdc:

在成功验证使用 luksFormat 命令扩展创建的提供的密钥材料后,您将看到一个映射名称 /dev/mapper/backup2

# ls -l /dev/mapper/backup2

示例输出

lrwxrwxrwx 1 root root 7 Oct 19 19:37 /dev/mapper/backup2 -> ../dm-0

您可以使用以下命令查看映射的状态

# cryptsetup -v status backup2

示例输出

/dev/mapper/backup2 is active.
  type:    LUKS1
  cipher:  aes-cbc-essiv:sha256
  keysize: 256 bits
  device:  /dev/xvdc
  offset:  4096 sectors
  size:    419426304 sectors
  mode:    read/write
Command successful.

您可以使用以下命令转储 LUKS 标头

# cryptsetup luksDump /dev/xvdc

格式化 LUKS 分区

[编辑 | 编辑源代码]

首先,您需要将零写入 /dev/mapper/backup2 加密设备。这将用零分配块数据。这确保了外部世界将看到它为随机数据,即它防止披露使用模式

# dd if=/dev/zero of=/dev/mapper/backup2

dd 命令可能需要几个小时才能完成。我建议您使用 pv 命令来监控进度

# pv -tpreb /dev/zero | dd of=/dev/mapper/backup2 bs=128M

要创建文件系统,即格式化文件系统,请输入

# mkfs.ext4 /dev/mapper/backup2

要将新文件系统挂载到 /backup2,请输入

# mkdir /backup2
# mount /dev/mapper/backup2 /backup2
# df -H
# cd /backup2
# ls -l

如何卸载并保护数据?

[编辑 | 编辑源代码]

键入以下命令

# umount /backup2
# cryptsetup luksClose backup2

如何挂载或重新挂载加密分区?

[编辑 | 编辑源代码]

键入以下命令

# cryptsetup luksOpen /dev/xvdc backup2
# mount /dev/mapper/backup2 /backup2
# df -H
# mount

查看打开 LUKS 分区并为 NAS 设备设置映射的 shell 脚本包装器。

我可以在基于 LUKS 的分区 / LVM 卷上运行 fsck 吗?

[编辑 | 编辑源代码]

是的,您可以在基于 LUKS 的系统上使用 fsck 命令

# umount /backup2
# fsck -vy /dev/mapper/backup2
# mount /dev/mapper/backup2 /backup2

查看如何在基于 LUKS (dm-crypt) 的 LVM 物理卷上运行 fsck 的更多详细信息。

如何更改加密分区 的 LUKS 密码?

[编辑 | 编辑源代码]

键入以下命令

### see key slots, max -8 i.e. max 8 passwords can be setup for each device ####
# cryptsetup luksDump /dev/xvdc
# cryptsetup luksAddKey /dev/xvdc
Enter any passphrase:
Enter new passphrase for key slot:
Verify passphrase:

删除或删除旧密码

# cryptsetup luksRemoveKey /dev/xvdc

请注意,您需要输入旧密码。

华夏公益教科书