如何使用 DM-Crypt 在 Ubuntu VPS 上创建加密卷

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。

介绍

安全应该是存储在互联网可访问的计算机上的任何类型的数据的首要关切,虽然每个存储提供商都应该从头开始确保数据的安全,但这只是因为未经授权的访问可以通过服务器上的软件缺陷,社交工程和许多其他途径发生。

在 Linux 系统上加密内容的方法有很多,这些选项中的许多依赖于加密单独的分区、设备或文件系统,如果您正在处理像 VPS 这样的系统,这可能不是一个选项,但是还有其他选项,例如创建一个作为设备运作的文件以存储加密数据。

在本指南中,我们将使用dm-crypt工具创建一个可用于存储敏感数据的大型加密文件,然后我们可以将此文件设置为一个常规分区,我们将在Ubuntu 12.04 VPS实例上展示这一点,但类似的程序应该适用于其他发行版。

基本理念

dm-crypt是一个内核级的加密机制,提供透明的磁盘加密,这意味着文件在安装后立即可用,没有任何额外的互动。

虽然大多数加密方案依赖于在分区级别加密事物,但我们可以通过使用我们作为设备地图目标安装的文件来绕过这一点。

当考虑实施任何类型的加密时,您需要衡量一些优点和缺点. 首先,总是存在与加密有关的性能负担,这可能或可能并不重要,我们建议您先创建一个小文件以运行测试,然后在更大规模实施。

另一个考虑是恢复. 加密,由于其主要功能,使恢复更加困难. 如果你忘记了你的密码,你的数据实际上会永远丢失. 如果你的LUKS标题被重写或损坏,你的数据也会永远丢失. 如果你的系统没有启动,你需要访问加密文件中的信息,你将不得不通过一个更复杂的过程获得访问。

当你做出加密数据的决定时,你需要意识到如果有什么不对劲的话会丢失这些数据的可能性. 你应该绝对备份任何数据,并且dm-crypt 提供了有关 如何做到这一点的很多信息。

安装 dm-crypt 工具

虽然内核级别的功能应该在您的部署中可用,但实际的前端工具可能不是默认安装的。

我们可以通过更新本地包索引并安装dm-crypt工具来获得所需的工具:

1apt-get update
2apt-get install cryptsetup

这将吸引所有所需的依赖性和辅助工具,以便与dm-crypt量工作。

创建一个不保存的空格文件

为了存储我们的加密数据,我们需要创建一个作为我们的存储设备的文件。

我们想要创建一个空的文件,但我们不能让它成为一个稀缺的文件,它在创建时实际上不会分配完整的文件大小。

处理此操作的最简单和最快的方式是使用fallocate命令. 这会立即分配您想要的文件的磁盘量,并将其分配给您提供的文件名。

例如,要在我们的 root 用户主目录中创建一个 512MB 文件,我们可以键入:

1fallocate -l 512M /root/test1

这是令人难以置信的快速,但它确实有一个缺点,它不会重写那些用零或随机数据的块使用的任何旧的删除的数据。

另一种替代方法是使用无处不在的dd命令,我们可以通过使用/dev/zero伪装来编写我们为我们的文件提供的整个区域的零。

1dd if=/dev/zero of=/root/test2 bs=1M count=512

如果相反,你想写随机数据,这应该模仿实际上会写给它的加密数据,你可以使用随机的伪装设备之一,而不是。

1dd if=/dev/urandom of=/root/test3 bs=1M count=512

使用/dev/random伪装设备是这样做的一种更安全的方式,再次以时间为代价:

1dd if=/dev/random of=/root/test4 bs=1M count=512

在文件中创建 dm-crypt LUKS 容器

在我们格式化我们刚刚创建的文件之前,我们应该在文件中创建一个LUKS分区。 LUKS,或Linux统一密钥设置,是磁盘加密的标准。

dm-crypt工具提供了一个非常简单的方法来创建这个层,我们可以使用这个命令创建容器。

1cryptsetup -y luksFormat /root/test1

您需要确认您希望重写文件的内容。双重检查您正在引用的文件,以免您意外重写错误的文件。

然后,您将被要求设置一个密码,以解密数据。 ** 记住**:如果您丢失了这个密码,我们将创建的文件系统中保存的任何数据都将丢失。

如果我们现在检查了该文件,我们可以看到它现在被称为LUKS加密文件:

1file /root/test1

1test1: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 1851db36-3223-4ee1-8e3e-cc65c49e05f3

现在我们已经在我们的文件上面建造了容器,我们可以这样打开容器:

cryptsetup luksOpen /path/to/LUKS/file mapping_name

在我们的情况下,我们将使用我们的 /root/test1 文件,并将其命名为 volume1:

1cryptsetup luksOpen /root/test1 volume1

您将需要提供您为该文件设置的密码,这是需要来解密它。

这打开了LUKS设备,并将其绘制到我们提供的名称,在我们的情况下创建一个文件在 /dev/mapper/volume1

创建和安装文件系统

现在我们已经创建了一个LUKS容器,它在我们的系统中作为一个常规设备打开,我们可以开始在它上进行常规设备操作。

首先,我们需要在我们的设备上格式化并创建一个文件系统. 您可以选择您想要的任何文件系统. 我们将使用标准的Ext4文件系统,但您可以使用您的服务器配置的任何文件系统正常处理。

对于我们的目的,我们想要使用的命令是:

1mkfs.ext4 -j /dev/mapper/volume1

我们现在有一个文件系统写在我们LUKS容器的顶部,它包含在我们的文件中. 因为它正在像设备一样处理,我们的下一步是逻辑上安装该设备。

让我们创建一个有意义的山地位置:

1mkdir /mnt/files

现在,我们只需要安装我们的文件系统:

1mount /dev/mapper/volume1 /mnt/files

您现在可以看到我们的文件作为我们可用的文件系统的一部分:

1df -h

1Filesystem Size Used Avail Use% Mounted on
2/dev/vda 59G 2.7G 54G 5% /
3udev 2.0G 12K 2.0G 1% /dev
4tmpfs 791M 216K 791M 1% /run
5none 5.0M 0 5.0M 0% /run/lock
6none 2.0G 0 2.0G 0% /run/shm
7/dev/mapper/volume1 486M 2.3M 459M 1% /mnt/files

您可以看到,我们的文件中的一些可用空间已经被加密的头顶和文件系统的头顶所占用,但我们仍然有我们的大部分空间。

如果我们检查了我们安装了文件的位置,我们可以看到它像其他任何Ext4文件系统一样被提供:

1cd /mnt/files
2ls

1lost+found

已经创建了正常的丢失+发现恢复目录,现在我们可以将数据写入这个位置,并将其放置,加密,在我们的文件中。

1cp -r /etc/* /mnt/files

拆除文件系统并关闭LUKS容器

当我们完成写入或阅读我们的数据时,我们使用正常方法卸载文件系统:

1cd
2umount /mnt/files

这将将/dev/mapper/volume1的位置从我们在/mnt/files的安装点分离出来:

1df -h

1Filesystem Size Used Avail Use% Mounted on
2/dev/vda 59G 2.7G 54G 5% /
3udev 2.0G 12K 2.0G 1% /dev
4tmpfs 791M 216K 791M 1% /run
5none 5.0M 0 5.0M 0% /run/lock
6none 2.0G 0 2.0G 0% /run/shm

然而,我们的文件仍然是开放的,可用于系统的 /dev/mapper/volume1

1ls /dev/mapper/

1control volume1

控制设备是一个用于创建其他地图设备的设备,我们可以安全地忽略这一点,因为它应该在这里。

要关闭1文件并保护其内容,我们必须关闭文件,基本上从文件中删除设备映射,这意味着您将无法再访问文件的内容,直到您再次提供密码:

1cryptsetup luksClose volume1

如果我们检查我们的设备地图目录,我们会看到我们的volume1设备已被删除:

1ls /dev/mapper

1control

我们的体积现在没有安装,LUKS容器已经关闭,我们的数据完全加密,并在我们的密码后面安全。

直前使用程序

要将最初的创建程序与日常使用分开,我们将快速运行您需要使用的过程。

现在你有 LUKS 文件,当你想使用它时,你可以简单地打开 LUKS 文件:

1cryptsetup luksOpen /root/test1 volume1

您可以在这里选择不同的名称,而不是您第一次使用,它只会重要,只要文件是开放的。

随后,安装已绘制的设备:

1mount /dev/mapper/volume1 /mnt/files

您现在可以访问并阅读或写入文件的内容。

当您完成时,您将不得不重新卸载设备:

1umount /mnt/files

一旦设备卸载,您可以再次关闭 LUKS 文件来加密数据:

1cryptsetup luksClose volume1

结论

您现在应该有能力创建加密文件来存储您的敏感数据. 记住,经常有性能和易用性和安全性之间的交换. 另外,请记住,您永远不能失去您设置的密码,因为绝对没有办法恢复它。

虽然这不是保护您的数据所需的唯一考虑,但希望您可以将其添加到您的工具箱中,以加强 Linux 服务器上的安全性。

By Justin Ellingwood
Published At
Categories with 技术
Tagged with
comments powered by Disqus