OpenZFS 带来的众多功能包括原生 ZFS 加密。 本机密码首先在 OpenZFS 0.8 中引入,其中本机密码允许系统管理员透明地加密 ZFS 本身内的静态数据。 这消除了对单独工具的需要,例如 豪华。 奢华而 IraCrypt, 或者 位锁.
默认的 OpenZFS 加密算法是 aes-256-ccm (0.8.4之前)或 aes-256-gcm (> = 0.8.4) 当 encryption=on 设置。 但也可以直接确定。 目前支持的算法有:
aes-128-ccmaes-192-ccmaes-256-ccm(OpenZFS 中的默认值 < 0.8.4)aes-128-gcmaes-192-gcmaes-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沙 zvols 文件,但这样做时不会将密钥暴露给远程系统。
这意味着您可以使用 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 功能