8 11 月, 2024

Eddiba Sports

从亚洲的Eddiba获取最新的亚洲新闻:重大新闻,专题报道,分析和特别报道以及来自亚洲大陆的音频和视频。

本机 OpenZFS 加密快速入门指南

本机 OpenZFS 加密快速入门指南
飞涨 / 磁盘加密是一个复杂的主题,但本文应该让您深入了解如何实现 OpenZFS。

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 本地加密。 正如介绍中所说, LUKSVeraCrypt,还有许多其他方案可用,可以放置在 OpenZFS 本身之下或之上。

首先,“为什么不”

把像linux这样的东西 LUKS 在 OpenZFS 优势下 – 与 全部的 使用磁盘加密,攻击者无法再看到 ZFS 名称、大小或属性 datasetszvols 无法访问密钥。 事实上,攻击者根本看不到 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—初始传输不仅可以加密副本 datasetzvols 文件,但这样做时不会将密钥暴露给远程系统。

这意味着您可以使用 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 加密树的存在和结构。 我们还可以看到每个加密数据集的特征,包括但不限于 USEDAVAIL, 而 REFER 从每个数据集。

READ  谷歌已经在兑现七年更新承诺了

值得注意的是,尝试 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

现在我们已经下载了必要的密钥 我们安装数据集,我们可以再次看到我们的加密数据。