+ xPKQ90ht2zqmFz / sNF / sycDi6hYTYvF8Fcg9x -

OpenZFS本地加密的快速入门指南

通过这篇简短的指南了解OpenZFS加密的方法、原因和内容。

挂锁的特写照片。
扩大 /磁盘上加密是一个复杂的主题,但本文将为您提供关于OpenZFS实现的坚实基础。

OpenZFS带来的众多特性之一是ZFS本机加密。本机加密最初是在OpenZFS 0.8中引入的,它允许系统管理员在ZFS本身中透明地加密静止数据。这就不需要像VeraCrypt,或磁盘加密

OpenZFS的加密算法默认为两者之一aes - 256 - ccm(在0.8.4之前)或aes - 256 gcm(> = 0.8.4)时加密上=是集。但也可以直接指定。目前支持的算法有:

  • 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本机加密。正如引言中提到的,VeraCrypt,以及许多其他可用的方案,可以在OpenZFS本身的下面或上面进行分层。

首先,“为什么不”

把Linux之类的东西放在一起在OpenZFS下面有一个优势——使用整个磁盘加密后,攻击者将无法看到ZFS的名称、大小或属性数据集而且zvols不能拿到钥匙。事实上,攻击者根本不可能看到ZFS正在被使用!

但它也有明显的缺点(或类似)在OpenZFS之下。其中最棘手的是每一个个人必须对将成为池一部分的磁盘进行加密,在ZFS池之前加载和解密每个卷进口阶段。对于具有许多磁盘(在某些情况下,有许多磁盘)的ZFS系统来说,这可能是一个明显的挑战数以千万计的磁盘。ZFS下加密的另一个问题是,额外的层是一个容易出错的额外的东西,它可以撤销ZFS的所有正常完整性保证。

或类似的在OpenZFS之上的解决了前面提到的问题—a加密zvol无论涉及多少磁盘,都只需要一个键层不能从这里撤销OpenZFS的完整性保证。不幸的是,在zfs上加密引入了一个新问题——它有效地削弱了OpenZFS的内联压缩,因为加密的数据通常是不可压缩的。这种方法也需要一个的使用zvol每个加密的文件系统,以及一个来宾文件系统(例如,ext4)以格式化体积本身。

现在,“为什么”

OpenZFS原生加密解决了这一问题:它运行在普通ZFS存储层之上,因此不会削弱ZFS自身的完整性保证。但它也不会干扰ZFS压缩—数据在保存到加密文件之前会被压缩数据集zvol

选择OpenZFS原生加密还有一个更令人信服的理由——所谓的“原始发送”。ZFS复制的速度和效率惊人地高——通常比文件系统无关的工具快好几个数量级rsync- raw send不仅可以加密复制数据集年代和zvolS,但这样做不会将密钥暴露给远程系统。

这意味着您可以使用ZFS复制将数据备份到不可信的位置,而不必担心您的私人数据被读取。使用原始发送,您的数据被复制而无需解密—备份目标根本无法解密它。这意味着你可以把你的异地备份复制到朋友的家里或商业服务rsync.netzfs.rent在不损害您的隐私的情况下,即使服务(或朋友)本身受到损害。

如果需要恢复站点外备份,可以简单地复制它回来去你自己的地方——然后,然后只有然后,加载解密密钥来实际访问数据。这既适用于全复制(跨线移动每一个块),也适用于异步增量复制(从一个通用的快照开始,只移动自该快照以来已更改的块)。

什么是加密的,什么不是?

OpenZFS原生加密不是一个全磁盘加密方案——它是在每个数据集/每个zvol的基础上启用或禁用的,而且不能对整个池作为一个整体启用它。加密数据集或zvols的内容不受静止监视的保护,但描述数据集/zvols本身的元数据却没有。

假设我们创建了一个名为池/加密,在它下面我们创建了更多的子数据集。的加密属性默认从父数据集继承,所以我们可以看到以下内容:

root@banshee:~# zfs create -o encryption=on -o keylocation=prompt -o keyformat=passphrase banshee/encrypted Enter passphrase: Re-enter passphrase:zfs root@banshee: ~ #创建女妖/加密/ child1 root@banshee: ~ # zfs创建女妖/加密/ child2 root@banshee: ~ # zfs创建女妖/加密/格root@banshee: ~ #效果参考使用zfs - r女妖/加密列表名称挂载点女妖/加密1.58米848克432 k /女妖/加密的女妖/加密/ child1 320 k 848克320 k /女妖/加密/ child1女妖/加密/ child2 320 k 848克320 k /女妖/加密/ child2女妖/加密/格320 k 848克320 k /女妖/加密/格root@banshee:~# zfs get encryption banshee/encrypted/child1 NAME属性值SOURCE banshee/encrypted/child1 encryption aes-256-gcm - .

目前,我们的加密数据集都已经安装好了。但是,即使我们卸载它们并卸载加密密钥——使它们无法访问——我们仍然可以看到它们存在,以及它们的属性:

root@banshee:~# wget -qO /banshee/encrypted/child2/ huckfin .txt http://textfiles.com/etext/AUTHORS/TWAIN/huck_finn root@banshee:~# zfs unmount banshee/encrypted root@banshee:~# zfs uninstall -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':没有这样的文件或目录root@banshee:~# zfs list -r banshee/encrypted NAME USED AVAIL REFER MOUNTPOINT banshee/encrypted 2.19M 848G 432K /banshee/encrypted banshee/encrypted/child1 banshee/encrypted/child2 944K 848G 720K /banshee/encrypted/child2 banshee/encrypted/child3 320K 848G 320K /banshee/encrypted/child3

正如我们在上面看到的,卸载加密密钥后,我们再也看不到我们新下载的拷贝《哈克贝利·费恩历险记》/女妖/加密/ child2 /.我们可以仍然可以看到我们整个zfs加密树的存在和结构。我们还可以看到每个加密数据集的属性,包括但不限于使用效果,请参考每个数据集。

值得注意的是,尝试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/child2 ls: cannot access '/banshee/encrypted/child2': No such file or directory

以便获得我们最新的《哈克贝利·费恩历险记》,我们还需要实际挂载新键重新加载的数据集:

root@banshee:~# zfs get keystatus 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 huckfin .txt . NAME属性值SOURCE banshee/encrypted/child2 keystatus available -

既然我们都装了必要的钥匙而且装上数据集,我们可以再次看到加密的数据。

60读者评论

  1. 有用!谢谢你吉姆。
    3560个帖子|注册
  2. 一如既往的优秀文章。
    注册了668个帖子
  3. 非常好的那样;我认为性能在任何实现AES-NI(或equiv)的CPU上都是优秀的,但是你知道像J1800这样的CPU上的性能打击有多大吗?我知道他们很老了,但仍然有很多他们运行在嵌入式/工业/无风扇底盘。
    5612个帖子|注册
  4. 嗯…有什么方法可以同步/使用登录密码/密码短语自动挂载/加载它作为密钥吗?例如,如果我使用用户加密的主目录,并且使用用户密码加密,那么在用户第一次登录和最后一次注销时,是否可以自动挂载/卸载它?虽然屏幕之类的东西使它更加复杂,但系统需要确保在卸载密钥之前没有任何用户进程接触加密数据集。人力资源管理。听起来这是一件很难做好的事情。

    我猜一个用户(我想的是更个人的笔记本电脑Linux/*BSD带ZFS)可以让基本的主目录不加密,但所有的子目录都是加密数据集的一部分,然后在第一次登录UI时,它会提示输入密码来加载密钥。
    24757个帖子|注册
  5. 是否有一种简单的方法来确定实际使用的是哪种加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(是CCM还是GCM),但我没有看到任何要求的方法?
    10510个帖子|注册
  6. malor写道:
    是否有一种简单的方法来确定实际使用的是哪种加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(是CCM还是GCM),但我没有看到任何要求的方法?


    https://zfsonlinux.org/manpages/0.8.6/man8/zfs.8.html

    代码:
    加密= off | on | aes-128-ccm | aes-192-ccm | aes-256-ccm | aes-128-gcm | aes-192-gcm | aes-256-gcm
    控制此数据集使用的加密密码套件(块密码、密钥长度和模式)。要求在存储池上启用加密特性。要求在数据集创建时设置键格式。

    在创建数据集时选择encryption = on表示将选择默认的加密套件,目前为aes-256-gcm。为了提供一致的数据保护,必须在数据集创建时指定加密,并且以后不能更改。

    有关加密的更多细节和注意事项,请参阅加密部分。


    编辑:更新链接到最新的manpage版本,我链接到一个过时的旧版本。

    最后一次编辑Drizzt3212021年6月23日星期三晚上7:29

    24757个帖子|注册
  7. malor写道:
    是否有一种简单的方法来确定实际使用的是哪种加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(是CCM还是GCM),但我没有看到任何要求的方法?

    像这样:
    $zfs加密你的池/你的数据集
    名称属性值来源
    YourPool/YourDataset加密aes-256-gcm -
    3560个帖子|注册
  8. 编辑:没关系,第二篇文章回答了我的问题。谢谢!

    第二编辑:顺便说一下,是GCM。
    10510个帖子|注册
  9. Nop666写道:
    malor写道:
    是否有一种简单的方法来确定实际使用的是哪种加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(是CCM还是GCM),但我没有看到任何要求的方法?

    像这样:
    $zfs加密你的池/你的数据集
    名称属性值来源
    YourPool/YourDataset加密aes-256-gcm -


    Malor的问题是当值为on时,它是什么算法。根据本文,有两种不同的默认值,这取决于您使用的ZFS版本。基本上过去一年左右的任何东西,都在使用GCM。

    @malor,对不起,我上面的链接是老版本的手册页,对不起,根据文章,它是-GCM,因为>=0.8.4,而当前ZoL版本是0.8.6。我会更新我的评论。
    24757个帖子|注册
  10. 我想知道的原因是因为我之前创造了它,我不确定我的版本是否在GCM模式下。我可能不会费心重拍,但我很好奇。幸运的是,它使用了更好的算法。
    10510个帖子|注册
  11. jhodge写道:
    非常好的那样;我认为性能在任何实现AES-NI(或equiv)的CPU上都是优秀的,但是你知道像J1800这样的CPU上的性能打击有多大吗?我知道他们很老了,但仍然有很多他们运行在嵌入式/工业/无风扇底盘。


    以我的经验,你会的想在没有AESNI的计算机上运行ZFS加密。他们对软件模式进行了一定程度的改进,但仍然非常缓慢。使用AESNI,它几乎以磁盘速度运行。如果没有,就会一团糟。

    我最初在一台老式i7-920上尝试了加密功能,它很老了,但性能还不错。ZFS加密在那个硬件上是灾难性的糟糕。在沉重的写负载下,系统实际上无法使用。换到4790K立刻解决了这个问题。

    在我的实验之后,软件改进已经被添加进去了,但我们最近在Ars论坛上有一个海报,试图使用ARM二进制文件,但没有使用他们的硬件加速,这对他们来说也是一场灾难。

    编辑:如果您没有太多的卷,如文章所说,您可以使用LUKS加密,它在任何硬件上都非常快。但是您可能需要编写脚本来解锁过程,除非您想在每个磁盘上输入一个密码。我同样编写了ZFS键加载和挂载的脚本,因此您可能不会真正丢失任何东西。

    它可能不太可靠,但AFAIK LUKS是一个非常瘦的层,所以它的反应可能和把ZFS体积直接放在金属上是一样的。
    10510个帖子|注册
  12. malor写道:
    jhodge写道:
    非常好的那样;我认为性能在任何实现AES-NI(或equiv)的CPU上都是优秀的,但是你知道像J1800这样的CPU上的性能打击有多大吗?我知道他们很老了,但仍然有很多他们运行在嵌入式/工业/无风扇底盘。


    以我的经验,你会的想在没有AESNI的计算机上运行ZFS加密。他们对软件模式进行了一定程度的改进,但仍然非常缓慢。使用AESNI,它几乎以磁盘速度运行。如果没有,就会一团糟。

    我最初在一台老式i7-920上尝试了加密功能,它很老了,但性能还不错。ZFS加密在那个硬件上是灾难性的糟糕。在沉重的写负载下,系统实际上无法使用。换到4790K立刻解决了这个问题。

    在我的实验之后,软件改进已经被添加进去了,但我们最近在Ars论坛上有一个海报,试图使用ARM二进制文件,但没有使用他们的硬件加速,这对他们来说也是一场灾难。

    编辑:如果您没有太多的卷,如文章所说,您可以使用LUKS加密,它在任何硬件上都非常快。但是您可能需要编写脚本来解锁过程,除非您想在每个磁盘上输入一个密码。我同样编写了ZFS键加载和挂载的脚本,因此您可能不会真正丢失任何东西。

    它可能不太可靠,但AFAIK LUKS是一个非常瘦的层,所以它的反应可能和把ZFS体积直接放在金属上是一样的。

    把“任何东西”放在ZFS和它的盘之间的想法,无论多么轻量级,都让我害怕。
    即使在这个硅短缺的时代,我觉得如果您打算通过努力配置和部署加密的ZFS,那么交换一个支持AES-NI的CPU(如果需要的话,还需要一个新的MB)是非常容易的。如果没有别的原因,只是因为你有信心,它不会在你开始使用它的时候就死于老化;)
    2806个帖子|注册
  13. malor写道:
    是否有一种简单的方法来确定实际使用的是哪种加密算法?我看到的唯一相关功能是“加密”,在我的例子中是“开启”。我很好奇实际使用的算法是什么(是CCM还是GCM),但我没有看到任何要求的方法?


    正如本文中所提到的,它可能是aes-256-ccm或aes-256-gcm,这取决于创建数据集所用的OpenZFS版本。

    是的,那很糟糕;是的,它应该显示文字值,而不仅仅是它最初被设置为一些未指定的“默认值”。对于移位值,我们也有同样的问题,如果在创建zpool时没有手动指定移位值,则移位值只显示为“0”。叹息。


    编辑:zfs得到加密将显示用于加密数据集或zvol的特定算法,即使您在创建它时没有手动指定它。但一定要用zfs得到,而不是zpool得到……

    最后一次编辑吉姆·索尔特2021年6月23日星期三晚上8点31分

    14686个帖子|注册
  14. 实际的问题是,我试图读取池上的加密,而不是根文件系统:

    代码:
    Zpool get feature@encryption (volume)

    名称属性值来源
    (volume) feature@encryption active local


    ...这不是我想要的。

    然后我做了大量的工作,试图找到要查询的正确字符串,假设它一定在feature@ wall后面的某个地方。没有找到任何东西。我在网上搜了很多,没找到任何明确的信息。然后我在这里问:

    代码:
    ZFS获取加密(卷)/(文件集)
    名称属性值来源
    (卷)/(文件集)加密aes-256-gcm -


    瞧,这正是我想要的。我看错了地方,用了错误的语法。feature@encryption是一个用于zpools的东西,但显然它只是文件集的直接“加密”。

    编辑:注意,我可能已经直接设置算法,而不是使用'on'。我花了几天时间研究ZFS,并预先构建了我的文件系统创建行。
    10510个帖子|注册
  15. malor写道:
    实际的问题是,我试图读取池上的加密,而不是根文件系统:

    代码:
    Zpool get feature@encryption (volume)

    名称属性值来源
    (volume) feature@encryption active local


    ...这不是我想要的。

    然后我做了大量的工作,试图找到要查询的正确字符串,假设它一定在feature@ wall后面的某个地方。没有找到任何东西。我在网上搜了很多,没找到任何明确的信息。然后我在这里问:

    代码:
    ZFS获取加密(卷)/(文件集)
    名称属性值来源
    (卷)/(文件集)加密aes-256-gcm -


    瞧,这正是我想要的。我看错了地方,用了错误的语法。feature@encryption是一个用于zpools的东西,但显然它只是文件集的直接“加密”。


    啊哈,好吧。是的,' zpool get '让你知道你的池支持加密,在这种情况下,这个特性是活跃的在这池……在某处。但它只是检查您的池是否支持该功能,而不是任何关于您如何支持该功能的细节使用的特性。

    ' zfs get '返回特定数据集或zvol本身的zfs属性,这正是您在这里想要的(应用于您最初感兴趣的数据集或zvol)。

    引用:
    编辑:注意,我可能已经直接设置算法,而不是使用'on'。我花了几天时间研究ZFS,并预先构建了我的文件系统创建行。


    实际上,这看起来并不是换挡惨败的重演;我肯定没有在本文的示例中手动设置算法,但我在自己的文章中看到了我自己的“zfs get encryption”,这表明您可以得到实际的算法,而不仅仅是打开算法。

    也许下次我会RTFA…
    14686个帖子|注册
  16. 也许下次我会RTFA…

    当我写我的最著名的线(评论2)去年,我只是在开玩笑。

    不出所料,我没有因此获得编辑奖。: P
    3420个帖子|注册
  17. 需要注意的一件事是,不幸的是,在引导期间远程SSH解锁zfs数据集只在openzfs的2.0或更高版本中才有。原始的PR在: https://github.com/openzfs/zfs/pull/10027

    但是,这仍然可以为旧的zfs版本设置!对于我的Ubuntu 20.04 NAS,我最终提取了openzfs 2.0的debian包(但没有安装它!),并将相关文件从/usr/share/initramfs-tools复制到/etc/initramfs-tools,将我的密钥添加到/etc/dropbear-initramfs/,并重新构建initramfs。现在,我可以解锁我的NAS,而不必求助于把密钥文件放在u盘或类似的东西。

    一个附带的好处是,我目前有两个池;用于操作系统和应用程序的SSD启动池,以及用于批量存储的rust池。我在同样加密的根池上放置了一个密钥文件,所以在解锁根池后,可以直接添加一个额外的调用来导入池并立即运行“zfs load-key -a”。

    我很高兴我采用了这种方式,而不是运行2.0的后台端口来获得解锁功能。我在主机上运行Docker,然后 https://github.com/openzfs/zfs/issues/11480 肯定是我在很长一段时间内看到的冲击生产系统的最令人心跳停止的文件系统问题之一。
    47个帖子|注册
  18. malor写道:
    实际的问题是,我试图读取池上的加密,而不是根文件系统:

    代码:
    Zpool get feature@encryption (volume)

    名称属性值来源
    (volume) feature@encryption active local


    ...这不是我想要的。

    然后我做了大量的工作,试图找到要查询的正确字符串,假设它一定在feature@ wall后面的某个地方。没有找到任何东西。我在网上搜了很多,没找到任何明确的信息。然后我在这里问:

    代码:
    ZFS获取加密(卷)/(文件集)
    名称属性值来源
    (卷)/(文件集)加密aes-256-gcm -


    瞧,这正是我想要的。我看错了地方,用了错误的语法。feature@encryption是一个用于zpools的东西,但显然它只是文件集的直接“加密”。

    很高兴能帮上忙!:)

    此外,你可以获得所有属性及其设置的列表:
    ZFS获取所有(卷)/(文件集)
    3560个帖子|注册
  19. 我的硬盘明天就会出现,来扩展我的TrueNAS盒子。看来我这次要给硬盘加密了。

    即使有一个速度上的打击,只要它仍然足够快的流bluay备份使用Plex对我来说是好的。
    1099个帖子|注册
  20. 坏死写道:
    我的硬盘明天就会出现,来扩展我的TrueNAS盒子。看来我这次要给硬盘加密了。

    即使有一个速度上的打击,只要它仍然足够快的流bluay备份使用Plex对我来说是好的。


    如果你说的是带有AES-NI的CPU,那就没问题了。如果没有AES-NI…它可能不够强大。当然,你会发现的。
    24757个帖子|注册
  21. 也许下次我会RTFA…


    哦,该死。答案一直就在那里。我仔细阅读了这篇文章,但显然没有看图片。
    10510个帖子|注册
  22. 不幸的是,一旦创建了数据集或zvol,您就不能轻松地从交互式提示切换到密钥文件。

    根据手册页(以及本文后面提到的change-key),这似乎是不正确的:

    男人zfs写道:
    尽管在数据集创建后无法更改加密套件,但密钥位置可以使用zfs set或zfs change-key。
    165个帖子注册
  23. Drizzt321写道:
    嗯…有什么方法可以同步/使用登录密码/密码短语自动挂载/加载它作为密钥吗?例如,如果我使用用户加密的主目录,并且使用用户密码加密,那么在用户第一次登录和最后一次注销时,是否可以自动挂载/卸载它?虽然屏幕之类的东西使它更加复杂,但系统需要确保在卸载密钥之前没有任何用户进程接触加密数据集。人力资源管理。听起来这是一件很难做好的事情。

    我猜一个用户(我想的是更个人的笔记本电脑Linux/*BSD带ZFS)可以让基本的主目录不加密,但所有的子目录都是加密数据集的一部分,然后在第一次登录UI时,它会提示输入密码来加载密钥。

    在Linux上,可以编写pam模块来处理这个问题。
    165个帖子注册
  24. 我是论坛上对ZFS加密在ARM上的性能感到失望的发帖者:原来这是因为OpenZFS从一开始就不支持ARM上的硬件加密。

    我已经开始了与开发人员的讨论甚至尝试自己实现,但我不是Linux内部/内核模块和汇编的专家,我在努力。

    如果在座的任何人有兴趣,请加入讨论:欢迎帮助:)
    585个帖子|注册
  25. 很好的介绍。

    提示:当加密的子数据集被sanoid/syncoid复制时,数据集在复制目标处丢失了它们继承的加密参数(例如,变成“提示符”而不是keylocation的路径)。当使用raw发送时。这可以在解锁目标上的子节点和父节点并使用“zfs change-key -i…”后修复。

    另外,对加密性能进行基准测试。
    我在Jim一年前的fio文章的基础上写了一个bash脚本,它尝试了不同的算法和记录大小的组合,用于带USB3硬盘的树莓派。我的结论是512 kB记录大小的性能优于1M记录大小,CCM优于GCM(显然,在我的情况下,是YMMV)。

    (编辑:当fio使用大块写时,512kb的记录大小比1mb的记录大小性能更好,尽管“传统智慧”认为1mb的记录大小在这种情况下应该更好。我不知道这是否与USB HDD性能或树莓本身有关,但由于这种组合是我用于场外备份的方法,我不关心原因。)

    最后一次编辑NewCrow2021年6月24日(星期四)上午6:30

    501个帖子|注册
  26. 我希望ZFS开发的一个东西是可否认加密。在许多国家——例如英国——拥有无法根据政府要求解密的加密数据是一种可判处两年或五年监禁的罪行.例如,在一个共享的ZFS服务器上,某人可能不拥有给定zvol的加密密钥,但ZFS元数据的存在足以证明它的存在。

    我意识到在LUKS上运行ZFS会绕过这个问题(用一些花招),但是ZFS本身没有一个命令行选项来隐藏元数据,这似乎很奇怪。
    210个帖子|注册
  27. Landak写道:
    我希望ZFS开发的一个东西是可否认加密。在许多国家——例如英国——拥有无法根据政府要求解密的加密数据是一种可判处两年或五年监禁的罪行.例如,在一个共享的ZFS服务器上,某人可能不拥有给定zvol的加密密钥,但ZFS元数据的存在足以证明它的存在。

    我意识到在LUKS上运行ZFS会绕过这个问题(用一些花招),但是ZFS本身没有一个命令行选项来隐藏元数据,这似乎很奇怪。


    我被困在ZFS下运行GELI,因为,从很久以前的升级,那是唯一的选择,但即使这样也会在磁盘上放一个头文件:(我希望ZFS/FreeBSD能够提供一种就地迁移的方法,但这就是生活。泳池升级很快就要来了,到时候我会解决的。

    您所描述的这个法律难题的解决方案是,知道谁控制服务器上的哪些数据,以便您可以将它们供出来。理想情况下,你会召集你当地的国会议员,让他们相信这种狗屁法律是狗屁,但他们在这些天似乎只服从他们的TLASOUP主人。
    612个帖子|注册
  28. Drizzt321写道:
    坏死写道:
    我的硬盘明天就会出现,来扩展我的TrueNAS盒子。看来我这次要给硬盘加密了。

    即使有一个速度上的打击,只要它仍然足够快的流bluay备份使用Plex对我来说是好的。


    如果你说的是带有AES-NI的CPU,那就没问题了。如果没有AES-NI…它可能不够强大。当然,你会发现的。


    我没有AES的老芹菜1610在这方面工作得很好。没有转码的带宽,但它可以比最高比特率的模糊撕裂更快。
    612个帖子|注册
  29. 友情提醒:

    *只对你随时可能丢失的数据使用加密。
    *记住你是凡人,如果你发生了什么可怕的事情,你加密的数据可能会永远丢失(尽管死亡,还有很多其他的事情可以让你忘记)。
    人们确实会忘记密码。

    我不是在劝阻任何人加密他们的数据,我只是相信很多人不必要地使用它。
    717个帖子|注册
  30. 好文章!

    不过关于这个:
    引用:
    使用提示每次都需要人工手动解锁加密卷。

    我知道你的目的可能是让事情变得简单,但我实际上在自动化中使用提示(没有人参与)而不是密钥文件,因为我只是发现它更方便,例如,在macOS上你可以这样做:

    代码:
    查找通用密码-a "${dataset}" -w | ZFS load-key "${dataset}"


    这让我可以将密码保存在macOS密钥链中,就像我对加密的非系统APFS卷、核心存储、磁盘映像等所做的那样(对于任何想要做同样事情的人,请记住将/usr/bin/security添加到可以访问脚本密钥链条目的应用程序列表中,否则它将无法工作)。

    如果处理得当,密钥文件可能是安全的,但prompt允许您从任何地方提取密码,因此以这种方式自动化非常方便。

    我是OpenZFS加密技术的忠实粉丝,它使事情变得如此简单,zfs发送能够发送加密块,这对于备份来说是非常棒的。

    唯一缺少的功能是免费替换我的旧的(但仍然固执地完美的工作秩序)Synology NAS,只支持BTRFS;幸运的是它也做iSCSI,所以我仍然可以用那种方式发送ZFS给它,但这不是一个理想的方式来做它。
    3441个帖子|注册
  31. 很好的文章。

    除了使用本机zfs加密的所有优点之外,备份到远程zfs服务器,在传输过程中保持所有数据加密,然后在静止时(不需要任何解密/加密),这种能力对我来说非常令人兴奋。

    当然,传输也将被加密,但通过始终保持数据加密提供了一个强有力的安全保证,并将难以置信地简化我的程序和我的文书工作!
    是的,强大的安全性应该被记录和证明,对于一些合理要求的客户有很多文件工作。
    1002个帖子|注册
  32. 有人知道zfs是使用自己的AES实现,还是使用内核现有的AES实现吗?因为
    遵从性。
    91个帖子|注册
  33. 友情提醒:

    *只对你随时可能丢失的数据使用加密。
    *记住你是凡人,如果你发生了什么可怕的事情,你加密的数据可能会永远丢失(尽管死亡,还有很多其他的事情可以让你忘记)。
    人们确实会忘记密码。

    我不是在劝阻任何人加密他们的数据,我只是相信很多人不必要地使用它。


    加密所有东西,这样当硬件出现故障时,你就可以毫无顾虑地扔掉。

    还要定期备份到离线资源....

    ZFS快照极大地简化了备份/恢复…

    年代
    941个帖子|注册
  34. 文章中的Veracrypt链接相当古老——该网站在2017年进入存档模式,并将在6天内关闭。真好奇它是怎么溜进文章里的。 https://veracrypt.fr/ 是准确的链接。
    92个帖子|注册
  35. 这就是我读ars的原因。这个和啤酒杯垫的文章!
    6个帖子|注册
  36. danpritts写道:
    有人知道zfs是使用自己的AES实现,还是使用内核现有的AES实现吗?因为
    遵从性。


    ZFS只能使用最基本的内核设施,因为它不是GPL,而且内核开发人员几乎不使用非GPL代码。

    实际上,在Linux-ZFS系统....中有两个代码栈Linux端和ZFS端。这可能是ZFS如此严重地违反正常Linux分层的部分原因;因为它不能使用Linux提供的功能,所以它重新实现了几乎所有从金属向上的功能。它查找和管理自己的磁盘,管理自己的压缩、加密和错误检测,执行自己的重建,并提供自己的挂载名称空间。用户级程序不会看到太大的区别,它们仍然只是与磁盘上的文件通信,但当它们在ZFS数据集上时,它们与整个独立的代码库交互。

    随之而来的唯一真正值得注意的问题是,在默认情况下,ZFS占用系统中一半的RAM用作缓存。在内存压力下,它可能会缓慢地将其释放回系统,这可能会导致严重的问题。我非常肯定您可以调降RAM分配,尽管我还没有费心查找如何调降RAM分配,因为我目前运行的唯一系统是一台专用服务器,而且无论如何都会将其一半的内存用于缓存。
    10510个帖子|注册
  37. Neshika写道:
    文章中的Veracrypt链接相当古老——该网站在2017年进入存档模式,并将在6天内关闭。真好奇它是怎么溜进文章里的。 https://veracrypt.fr/ 是准确的链接。


    因为另一个链接有更多的google果汁,我没有在包装锚标签之前更仔细地研究它(因为我记得这是我上次看到的Veracrypt的官方网站,在TrueCrypt被抛弃后不久)。

    固定了。谢谢你的提示!
    14686个帖子|注册
  38. malor写道:
    我非常肯定您可以调低RAM分配,尽管我还没有费心查找如何调低内存分配


    创建文件/etc/modprobe.d/zfs.conf并设置选择zfs zfs_arc_max =在字节。

    是的,字节。不,它不尊重或理解单位后缀。是啊,那简直是巨大的服务器上有1TiB内存的数字…
    14686个帖子|注册
  39. malor写道:
    我非常肯定您可以调低RAM分配,尽管我还没有费心查找如何调低内存分配


    创建文件/etc/modprobe.d/zfs.conf并设置选择zfs zfs_arc_max =在字节。

    是的,字节。不,它不尊重或理解单位后缀。是啊,那简直是巨大的服务器上有1TiB内存的数字…


    *梦想*我们在工作中做了一些相当他妈的大的铁,但1T RAM仍然是我目前能接触到的最大玩具的4倍。
    612个帖子|注册

你必须置评。

通道Ars Technica