如何在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 块存储卷的更多信息。