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

介绍

DigitalOcean卷是可扩展的,基于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 的名称替换volume-lon1-01 当您提示您创建密码时, -y标志将要求您输入两次密码。 -v标志添加额外的人类可读输出来验证命令的成功。

输出将要求您确认覆盖卷上的数据。 在所有大写字母中ENTER 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个密码。

此时,您的磁盘被创建并加密。 接下来,将其解密并将其映射到标签以便于参考。 在这里,我们将其标注为secure-volume ,但您可以用任何你喜欢的东西来标记它。

sudo cryptsetup luksOpen /dev/disk/by-id/scsi-0DO_Volume_volume-lon1-01 secure-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尚不能访问该卷。 为了使其可访问,我们需要创建和挂载文件系统。

使用mkfs.xfs实用程序(系统文件系统)在卷上创建XFS文件系统。

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

一旦文件系统被创建,你可以挂载它,这意味着它可以被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

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

如果不再需要访问卷上的数据,则可以卸载文件系统并锁定加密的磁盘。

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的格式是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 page中的其他字段( man fstab )。

保存并关闭文件。 您的加密文件系统现在设置为在Droplet启动时自动挂载。 您可以通过重新启动Droplet来测试,但请谨慎处理任何正在运行的服务。

结论

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

您可以在DigitalOcean Block Storage系列入门指南中了解有关DigitalOcean Block Storage Volumes的更多信息。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏