如何在DigitalOcean块存储卷上创建加密文件系统

来自菜鸟教程
跳转至:导航、​搜索

介绍

DigitalOcean Volumes 是可扩展的、基于 SSD 的块存储设备。 卷允许您创建和扩展基础架构的存储容量,而无需调整 Droplet 的大小。

卷是静态加密的,这意味着卷上的数据在其存储集群之外是不可读的。 当您将 Volume 附加到 Droplet 时,Droplet 会显示一个解密的块存储设备,并且所有数据都通过隔离的网络传输。

为了提高安全性,您还可以在卷上的 LUKS 加密磁盘 中创建文件系统。 这意味着磁盘需要由 Droplet 上的操作系统解密才能读取任何数据。

本教程介绍如何:

  • 在包含文件系统的卷上创建受密码保护的加密磁盘。
  • 手动挂载加密文件系统以供使用,完成后卸载并重新锁定。
  • Droplet 启动时自动挂载文件系统。

先决条件

要遵循本教程,您将需要:

警告: 此过程会破坏卷上的任何数据。 在重新格式化现有卷之前,请务必从新卷开始或 备份数据


第 1 步 — 创建加密磁盘

cryptsetup 是用于管理 LUKS 卷以及其他加密格式的实用程序。 首先,使用 cryptsetup 初始化卷上的加密磁盘。

sudo cryptsetup -y -v luksFormat /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01

确保将 volume-lon1-01 替换为 卷的名称 。 当系统提示您创建密码时,-y 标志将要求您输入两次密码。 -v 标志添加了额外的人类可读输出来验证命令是否成功。

输出将要求您确认覆盖卷上的数据。 输入全部大写的 YES,然后按 ENTER 继续。

OutputWARNING!
========
This will overwrite data on /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 irrevocably.

Are you sure? (Type uppercase yes): YES

接下来,输出将提示您为加密磁盘创建密码。 输入一个独特的强密码,并通过再次输入来验证它。 此密码 不可恢复 ,因此请将其记录在安全的地方。

Output. . .
Enter passphrase:
Verify passphrase:
Command successful.

如果需要,您可以在以后使用 cryptsetup luksChangeKey 命令更改此密码。 您还可以使用 cryptsetup luksAddKey 为每个设备添加最多 8 个额外的密码。

此时,您的磁盘已创建并加密。 接下来,将其解密并将其映射到 label 以便于引用。 在这里,我们将其标记为 secure-volume,但您可以使用任何您喜欢的标签。

sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 secure-volume

系统将提示您输入密码。 输入后,Volume 现在将映射到 /dev/mapper/secure-volume

为确保一切正常,请验证加密磁盘的详细信息。

cryptsetup status secure-volume

您将看到这样的输出,指示卷标和类型。

Output/dev/mapper/secure-volume is active.
  type:    LUKS1
  cipher:  aes-xts-plain64
  keysize: 256 bits
  device:  /dev/sda
  offset:  4096 sectors
  size:    209711104 sectors
  mode:    read/write

此时,您拥有了一个受密码保护的加密磁盘。 下一步是在该磁盘上创建一个文件系统,以便操作系统可以使用它来存储文件。

第 2 步 — 创建和挂载文件系统

我们先来看看Droplet当前可用的磁盘空间。

df -h

您将看到与此类似的输出,具体取决于您的 Droplet 配置:

OutputFilesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  5.6M  390M   2% /run
/dev/vda1        78G  877M   77G   2% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.4M  101M   4% /boot/efi
tmpfs           396M     0  396M   0% /run/user/1000

现在,/dev/mapper/secure-volume 没有出现在这个列表中,因为 Droplet 还不能访问 Volume。 为了使其可访问,我们需要创建和挂载文件系统。

使用 mkfs.xfs 实用程序(make file s系统)创建一个 XFS 卷上的文件系统。

sudo mkfs.xfs /dev/mapper/secure-volume

创建文件系统后,您可以 mount 它,这意味着它可用于您的 Droplet 上的操作系统。

创建一个 挂载点 ,这是文件系统将附加的位置。 一个好的挂载点推荐是 /mnt 目录中的一个空目录,所以我们将使用 /mnt/secure

sudo mkdir /mnt/secure

然后挂载文件系统。

sudo mount /dev/mapper/secure-volume /mnt/secure

为确保它正常工作,请再次检查 Droplet 上的可用磁盘空间。

df -h

您现在将看到列出的 /dev/mapper/secure-volume

OutputFilesystem                 Size  Used Avail Use% Mounted on
udev                       2.0G     0  2.0G   0% /dev
tmpfs                      396M  5.6M  390M   2% /run
/dev/vda1                   78G  877M   77G   2% /
tmpfs                      2.0G     0  2.0G   0% /dev/shm
tmpfs                      5.0M     0  5.0M   0% /run/lock
tmpfs                      2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15                 105M  3.4M  101M   4% /boot/efi
tmpfs                      396M     0  396M   0% /run/user/1000
/dev/mapper/secure-volume  100G   33M  100G   1% /mnt/secure

这意味着您的加密文件系统已附加并可供使用。

当您不再需要访问 Volume 上的数据时,您可以卸载文件系统并锁定加密磁盘。

sudo umount /mnt/secure
sudo cryptsetup luksClose secure-volume

您可以使用 df -h 验证文件系统不再可用。 为了使卷上的数据再次可访问,您将执行打开磁盘 (cryptsetup luksOpen ...)、创建挂载点和挂载文件系统的步骤。

为避免每次要使用卷时都经过此手动过程,您可以将文件系统配置为在 Droplet 启动时自动挂载。

第 3 步 — 在引导时自动挂载文件系统

加密磁盘最多可以有 8 个密码。 在这最后一步中,我们将创建一个密钥并将其添加为密码,然后使用该密钥配置要在 Droplet 启动时解密和安装的卷。

/root/.secure_key 创建一个密钥文件。 此命令将生成一个包含随机内容的 4 KB 文件:

sudo dd if=/dev/urandom of=/root/.secure-key  bs=1024 count=4

调整此密钥文件的权限,使其只能由 root 用户读取。

sudo chmod 0400 /root/.secure-key

然后添加密钥作为加密磁盘的密码。

cryptsetup luksAddKey /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 /root/.secure-key

系统将提示您输入密码。 您可以输入您在第一次创建加密磁盘时设置的那个。

/etc/crypttab 是一个配置文件,定义了系统启动时要设置的加密磁盘。 使用 nano 或您喜欢的文本编辑器打开此文件。

sudo nano /etc/crypttab

将以下行添加到文件底部以在启动时映射卷。

/etc/crypttab

. . .
secure-volume /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 /root/.secure-key  luks

/etc/crypttab 中的行格式为 device_name device_path key_path options。 这里,设备名称是secure-volume(或者你选择的名称),路径是/dev/disk/by-id/...,密钥文件是我们刚刚在/root/.secure_key创建的,选项指定 luks 加密。

保存并关闭文件。

/etc/fstab 是自动挂载的配置文件。 打开此文件进行编辑。

sudo nano /etc/fstab

将以下行添加到文件底部以在启动时自动挂载磁盘。

/etc/fstab

. . .
/dev/mapper/secure-volume /mnt/secure xfs  defaults,nofail 0 0

/etc/fstab 中行的前三个参数始终是 device_path mount_point file_system_type。 在这里,我们拥有与步骤 2 相同的设备路径和挂载点,并指定 XFS 文件系统。 您可以在 fstab 的手册页 (man fstab) 中了解其他字段。

保存并关闭文件。 您的加密文件系统现在设置为在您的 Droplet 启动时自动挂载。 您可以通过重新启动 Droplet 来测试这一点,但对任何正在运行的服务要小心。

结论

默认情况下,DigitalOcean 卷在未附加到 Droplet 时会被加密。 在本教程中,您通过将文件系统放在卷上的加密磁盘中添加了额外的安全层。 您可以创建一个加密磁盘,为其添加密码,然后手动或自动安装它以在 Droplet 中使用。

您可以在 DigitalOcean 块存储入门 系列中了解有关 DigitalOcean 块存储卷的更多信息。