介绍
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
将以下行添加到文件的底部以在引导时映射卷。
. . .
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
将以下行添加到文件的底部,以便在引导时自动安装磁盘。
. . .
/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的更多信息。