openzfs本机加密的快速启动指南

2021-06-24 07:04:21

OpenZFS的许多功能之一带到表格是ZFS本机加密。首先在OpenZFS 0.8中引入,本机加密允许系统管理员在ZFS本身内透明地加密数据。这消除了对Luks,Veracrypt或BitLocker等单独工具的需求。

OpenZFS加密算法默认为AES-256-CCM(在0.8.4之前)或AES-256-GCM(> = 0.8.4)设置=上。但它也可以直接指定。目前支持的算法是:

更重要的是OpenZFS的本机加密而不是所使用的算法 - 所以我们试图在Sysadmin&#39中留下简要但坚实的基础;在&#34上的S-Eye Perspective;为什么&# 34;和#34;什么"以及简单"如何。"

一个聪明的sysadmin,他们想要提供at-rest加密,并且实际上需要OpenZFS本机加密,显然。如引言,Luks,Veracrypt和许多其他方案中所提到的,可以在OpenZFS本身下面或over overs中分层。

将类似Linux'在OpenZFS下面的Luks的东西具有优势 - 在整个磁盘加密,一个进取的攻击者无法再看到ZFS数据集和ZVols的名称,大小或属性,而无需访问键。事实上,攻击者可以' t一定看出zfs正在使用中!

但是在OpenZFS下面的LUKS(或类似)存在显着的缺点。一个GNARLIEST的一个是,每个磁盘都必须是池的一部分,每个卷在ZFS池导入阶段之前加载和解密。这对于具有许多磁盘的ZFS系统来说,这可能是一个明显的挑战 - 在某些情况下,许多磁盘。加密 - ZFS的另一个问题是额外的层是一个额外的东西,可以出错 - 它在一个撤消所有ZFS&#39的位置。正常完整保证。

将luks或类似的Adopzfs放在上述问题中,无论涉及多少个磁盘,都只需要一个键,而Luks层无法撤消OpenZFS&#39只需要一个键。从这里保证完整性保证。不幸的是,加密 - ZFS介绍了一个新的问题 - 它有效地是Nerfs OpenZFS内联压缩,因为加密数据通常是不可压缩的。此方法还需要使用每个加密文件系统的一个ZVOL,以及客户文件系统(例如,EXT4),以将LUK卷本身格式化。

OpenZFS本机加密分配差异:它以普通ZFS存储层为单位运行,因此在' t nerf zfs'自己的完整性保证。但它也没有干扰ZFS压缩 - 数据在保存到加密数据集或ZVOL之前被压缩。

选择OpenZFS本机加密的一个更加令人信服的理由,虽然 - 叫做" RAW发送。" ZFS复制频繁地快速且有效地快速且效率高,比rsync-and Raw发送等文件系统 - 中立的工具更快,这不仅可以复制加密的数据集和zvols,而且在不公开远程系统的情况下执行此操作。这意味着您可以使用ZFS复制将数据备份到不受信任的位置,而不必涉及读取的私有数据。使用RAW发送,您的数据被复制而不会被解密 - 没有备份目标可以完全解密它。这意味着您可以将您的异地备份复制到朋友' s房屋或rsync.net或zfs等商业服务。即使服务(或朋友)本身损害,也可以在不影响您的隐私。

如果您需要恢复异地备份,您可以简单地将其复制回您自己的位置 - 然后,只加载解密密钥以实际访问数据。这适用于完整复制(在线移动每个单个块)或异步增量复制(从常用的快照开始,并且仅移动自那个快照以来已经改变的块)。

OpenZFS本机加密ISN' t一个全磁盘加密方案 - 它' s'在每个数据集/ per-zvol上启用或禁用,无法为整个池打开。加密数据集或zvols的内容受到影响的静止间谍 - 但描述数据集/ zvols本身的元数据不是。

假设我们创建了一个名为pool /加密的加密数据集,我们创建了多个子数据集。默认从父数据集中继承子的加密属性,因此我们可以看到以下内容:

root @ banshee:〜#zfs create -o加密=在-o keylocation = prompt -o keyformat = passphrase banshee /加密 输入密码: 重新输入密码: root @ banshee:〜#zfs创建banshee /加密/ child1 root @ banshee:〜#zfs创建孤独/加密/ child2 root @ banshee:〜#zfs创建孤独/加密/ child3 root @ banshee:〜#zfs列表-r banshee /加密 名称使用可用性in Portpoint Banshee /加密1.58M 848G 432K / Banshee /加密 Banshee /加密/ Child1 320K 848G 320K / Banshee / Crecrypted / Child1 Banshee / Crecrypted / Child2 320K 848G 320K / Banshee / Crecrypted / Child2 Banshee / Crecrypted / Child3 320K 848G 320K / Banshee / Crecrypted / Child3 root @ banshee:〜#zfs get加密banshee /加密/ child1 名称属性值源 Banshee /加密/ Child1加密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 /加密 root @ banshee:〜#zfs unload-key -r banshee /加密 1/1键成功卸载 root @ banshee:〜#zfs mount banshee /加密 无法挂载'班舍/加密&#39 ;:加加密密钥未加载 root @ banshee:〜#ls / banshee /加密/ child2 ls:无法访问' / banshee /加密/ child2&#39 ;:没有这样的文件或目录 root @ banshee:〜#zfs列表-r banshee /加密 名称使用可用性in Portpoint Banshee /加密2.19M 848G 432k / Banshee /加密 Banshee /加密/ Child1 320K 848G 320K / Banshee / Crecrypted / Child1 Banshee /加密/ Child2 944K 848G 720K / Banshee / Crecrypted / Child2 Banshee / Crecrypted / Child3 320K 848G 320K / Banshee / Crecrypted / Child3

正如我们可以看到的那样,在卸载加密密钥后,我们无法再看到我们在/ Banshee /加密/ Child2 / Chuckleberry Finn的新下载副本。我们仍然可以看到的是我们整个ZFS加密树的存在和结构。我们还可以看到每个加密的数据集' s属性,包括但不限于所用,可用,可用,以及对每个数据集的使用。

它值得注意的是,试图ls' t的加密数据集有钥匙' t必须产生错误:

root @ banshee:〜#zfs get keystatus banshee /加密 名称属性值源 Banshee /加密keyStatus不可用 - root @ banshee:〜#ls / banshee /加密 root @ banshee:〜#

这是因为在未安装实际数据集时,主机上存在裸目录。重新加载密钥并不自动重新汇编数据集,即:

root @ banshee:〜#zfs load-key -r banshee /加密 输入packphrase for'班晨/加密&#39 ;: 1/1键成功装载 root @ banshee:〜#zfs mount | grep encer. root @ banshee:〜#ls / banshee /加密 root @ banshee:〜#ls / banshee /加密/ child2 ls:无法访问' / banshee /加密/ child2&#39 ;:没有这样的文件或目录

为了访问我们的哈克贝尔·芬恩的新副本,我们还需要实际安装新的键重新加载数据集:

root @ banshee:〜#zfs get keystatus banshee /加密/ child2 名称属性值源 可用的Banshee / Crecrypted / Child2 keyStatus - root @ banshee:〜#ls -l / banshee /加密/ child2 ls:无法访问' / banshee /加密/ child2&#39 ;:没有这样的文件或目录 root @ banshee:〜#zfs mount -a root @ banshee:〜#ls -lh / banshee / crecryeded / child2 共401克 -rw-r - r-- 1根根root 554k 2002年6月13日哈克福纳.txt 现在,我们' ve都加载了必要的键并安装了数据集,我们可以再次查看我们的加密数据。