OpenZFS 带来的众多功能包括原生 ZFS 加密。 本机密码首先在 OpenZFS 0.8 中引入,其中本机密码允许系统管理员透明地加密 ZFS 本身内的静态数据。 这消除了对单独工具的需要,例如 豪华。 奢华而 IraCrypt, 或者 位锁.
默认的 OpenZFS 加密算法是 aes-256-ccm
(0.8.4之前)或 aes-256-gcm
(> = 0.8.4) 当 encryption=on
设置。 但也可以直接确定。 目前支持的算法有:
aes-128-ccm
aes-192-ccm
aes-256-ccm
(OpenZFS 中的默认值 < 0.8.4)aes-128-gcm
aes-192-gcm
aes-256-gcm
(OpenZFS 中的默认值 >= 0.8.4)
不过,OpenZFS 的本机密码比使用的算法更多 – 因此,我们将尝试从系统管理员的角度为您提供一个简短但强大的基础,以了解“为什么”和“什么”以及“如何”。
为什么(或为什么不)原生 OpenZFS 加密?
显然,想要提供离线加密的聪明系统管理员并不真正需要 OpenZFS 本地加密。 正如介绍中所说, LUKS
而 VeraCrypt
,还有许多其他方案可用,可以放置在 OpenZFS 本身之下或之上。
首先,“为什么不”
把像linux这样的东西 LUKS
在 OpenZFS 优势下 – 与 全部的 使用磁盘加密,攻击者无法再看到 ZFS 名称、大小或属性 datasets
而 zvols
无法访问密钥。 事实上,攻击者根本看不到 ZFS 正在使用中!
但是放置它有很大的缺点 LUKS
(或类似)关闭 OpenZFS。 最吸引人的地方之一就是每一个 个人 将成为池一部分的磁盘必须加密,在 ZFS 池之前安装和解密每个卷 import
电影院。 对于具有许多磁盘的 ZFS 系统来说,这可能是一个重大挑战 – 在某些情况下,许多磁盘 十 的磁盘。 ZFS 下加密的另一个问题是额外的层是一个额外的故障 – 它可以撤消所有 ZFS 的正常安全保证。
放 LUKS
或者类似上面的 OpenZFS 摆脱了上面的问题——一个 LUKS
加密 zvol
无论包含多少张光盘,它都只需要一把钥匙,并且 LUKS
该层无法从这里撤消 OpenZFS 完整性保证。 不幸的是,在 ZFS 之上加密引入了一个新问题——它在 nerfs OpenZFS 内联压缩上有效地工作,因为加密数据通常是不可压缩的。 这种做法也 必需的 一次性使用 zvol
对于每个加密的文件系统,以及一个来宾文件系统(例如, ext4
) 格式化文件 LUKS
同尺寸。
现在,“为什么”
本机 OpenZFS 加密消除了差异:它运行在常规 ZFS 存储层之上,因此不会破坏 ZFS 自身的安全保护措施。 但它也不会干扰 ZFS 压缩——数据在保存到加密文件之前被压缩 dataset
或者 zvol
.
不过,有一个更令人信服的理由选择原生 OpenZFS 加密 – 所谓的“原始传输”。 ZFS 复制的速度和效率快得离谱——通常比中性文件系统工具(如 rsync
—初始传输不仅可以加密副本 dataset
沙 zvol
s 文件,但这样做时不会将密钥暴露给远程系统。
这意味着您可以使用 ZFS 复制将数据备份到文件 不可信 网站,无需担心读取您的私人数据。 通过原始传输,您的数据无需解密即可复制 – 并且备份目标根本无法解密。 这意味着您可以将备份异地复制到朋友家或商业服务,例如 rsync.net 或者 zfs.rent 在不损害您的隐私的情况下,即使服务(或朋友)本身已被黑客入侵。
如果您需要恢复异地备份,您可以简单地复制它 背部 到你自己的网站——然后,和 只是 然后上传解密密钥以实际访问数据。 这适用于完整复制(通过网络移动每个单个块)或异步增量复制(从一个公共快照开始并仅移动自该快照以来已更改的块)。
什么是加密的,什么是未加密的?
OpenZFS 的本机密码不是全盘密码——它是在每个数据/每个 zvol 的基础上启用或禁用的,并且不能作为一个整体对整个集运行。 加密数据集或 zvol 的内容在静态时受到保护,不会被窥探——但描述数据集/zvol 本身的元数据则不然。
假设我们创建了一个用名称加密的数据集 pool/encrypted
,在它下面我们创建了更多的依赖数据集。 这 encryption
children 属性默认继承自原始数据集,因此我们可以看到:
root@banshee:~# zfs create -o encryption=on -o keylocation=prompt -o keyformat=passphrase banshee/encrypted
Enter passphrase:
Re-enter passphrase:
root@banshee:~# zfs create banshee/encrypted/child1
root@banshee:~# zfs create banshee/encrypted/child2
root@banshee:~# zfs create banshee/encrypted/child3
root@banshee:~# zfs list -r banshee/encrypted
NAME USED AVAIL REFER MOUNTPOINT
banshee/encrypted 1.58M 848G 432K /banshee/encrypted
banshee/encrypted/child1 320K 848G 320K /banshee/encrypted/child1
banshee/encrypted/child2 320K 848G 320K /banshee/encrypted/child2
banshee/encrypted/child3 320K 848G 320K /banshee/encrypted/child3
root@banshee:~# zfs get encryption banshee/encrypted/child1
NAME PROPERTY VALUE SOURCE
banshee/encrypted/child1 encryption aes-256-gcm -
目前,我们所有的加密数据集都已合成。 但即使我们卸载它并删除加密密钥 – 使其无法访问 – 我们仍然可以看到它是 出去除了它们的属性:
root@banshee:~# wget -qO /banshee/encrypted/child2/HuckFinn.txt http://textfiles.com/etext/AUTHORS/TWAIN/huck_finn
root@banshee:~# zfs unmount banshee/encrypted
root@banshee:~# zfs unload-key -r banshee/encrypted
1 / 1 key(s) successfully unloaded
root@banshee:~# zfs mount banshee/encrypted
cannot mount 'banshee/encrypted': encryption key not loaded
root@banshee:~# ls /banshee/encrypted/child2
ls: cannot access '/banshee/encrypted/child2': No such file or directory
root@banshee:~# zfs list -r banshee/encrypted
NAME USED AVAIL REFER MOUNTPOINT
banshee/encrypted 2.19M 848G 432K /banshee/encrypted
banshee/encrypted/child1 320K 848G 320K /banshee/encrypted/child1
banshee/encrypted/child2 944K 848G 720K /banshee/encrypted/child2
banshee/encrypted/child3 320K 848G 320K /banshee/encrypted/child3
正如我们在上面看到的,卸载加密密钥后,我们再也看不到我们新下载的副本 哈克贝利酒 在 /banshee/encrypted/child2/
. 我们是什么 您可以…吗 我们仍然看到的是整个 ZFS 加密树的存在和结构。 我们还可以看到每个加密数据集的特征,包括但不限于 USED
而 AVAIL
, 而 REFER
从每个数据集。
值得注意的是,尝试 ls
一组未加载密钥的加密数据不一定会产生错误:
root@banshee:~# zfs get keystatus banshee/encrypted
NAME PROPERTY VALUE SOURCE
banshee/encrypted keystatus unavailable -
root@banshee:~# ls /banshee/encrypted
root@banshee:~#
这是因为主机上有一个裸目录,即使未加载实际数据集也是如此。 重新加载密钥不会自动重新加载数据集,或者:
root@banshee:~# zfs load-key -r banshee/encrypted
Enter passphrase for 'banshee/encrypted':
1 / 1 key(s) successfully loaded
root@banshee:~# zfs mount | grep encr
root@banshee:~# ls /banshee/encrypted
root@banshee:~# ls /banshee/encrypted/child2
ls: cannot access '/banshee/encrypted/child2': No such file or directory
为了访问我们的新版本 哈克贝利酒,我们还需要安装新加载的数据集:
root@banshee:~# zfs get keystatus banshee/encrypted/child2
NAME PROPERTY VALUE SOURCE
banshee/encrypted/child2 keystatus available -
root@banshee:~# ls -l /banshee/encrypted/child2
ls: cannot access '/banshee/encrypted/child2': No such file or directory
root@banshee:~# zfs mount -a
root@banshee:~# ls -lh /banshee/encrypted/child2
total 401K
-rw-r--r-- 1 root root 554K Jun 13 2002 HuckFinn.txt
现在我们已经下载了必要的密钥 而 我们安装数据集,我们可以再次看到我们的加密数据。
“极端问题解决者。旅行忍者。典型的网络迷。浏览器。作家。读者。无法治愈的组织者。”
More Stories
Android 15/One UI 7 正在针对 Galaxy A53、A54 等进行测试
《Helldivers 2》的重大更新招致了负面评价,而且玩家数量并未增加一倍
据报道,谷歌 Pixel 9 将获得一些新的 Gemini AI 功能