+ 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解决了前面提到的问题加密zvol只需要一个键,不管涉及多少磁盘,和层不能从这里撤消OpenZFS的完整性保证。不幸的是,encryption-atop-ZFS引入了一个新的问题——它有效地削弱了OpenZFS的内联压缩,因为加密的数据通常是不可压缩的。这种方法也需要one的用法zvol每个加密的文件系统,以及一个来宾文件系统(例如,ext4)以设定格式体积本身。

现在,“为什么”

OpenZFS本地加密将区别分开:它在普通ZFS存储层之上运行,因此不会削弱ZFS自身的完整性保证。但是它也不会干扰ZFS压缩—数据在保存到加密文件之前被压缩数据集zvol

选择OpenZFS本地加密还有一个更令人信服的原因—所谓的“原始发送”。ZFS复制的速度快得惊人,而且效率高——通常比文件系统中立工具(如ZFS)快几个数量级rsync-原始发送不仅可以复制加密数据集年代和zvolS,但是这样做时不会将密钥暴露给远程系统。

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

如果您需要恢复您的场外备份,您可以简单地复制它回来去你自己的地方——然后,然后只有然后,加载解密密钥以实际访问数据。这既适用于完全复制(在网络上移动每个单独的块),也适用于异步增量复制(从一个常见的快照开始,只移动自该快照以来发生更改的块)。

哪些是加密的,哪些不是?

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

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

@ # zfs create -o encryption=on -o keylocation=prompt -o keyformat= passsphrase banshee/encrypted Enter passsphrase:重新输入passsphrase: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 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 unmount banshee/encrypted 1 / 1 key(s) successfully unloaded root@banshee:~# zfs mount banshee/encrypted cannot mount 'banshee/encrypted':加密密钥未加载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/child1 320K 848G 320K /encrypted/child2 944K 848G 720K /banshee/encrypted/child3 320K 848G 320K

正如我们上面看到的,在卸载加密密钥之后,我们再也看不到新下载的《哈克贝利·费恩历险记》/女妖/加密/ 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 root@banshee:~# ls /banshee/encrypted/child2 ls: cannot access '/banshee/encrypted/child2':没有这样的文件或目录

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

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

现在我们都加载了必要的密钥而且挂载数据集后,我们可以再次看到加密的数据。

54岁的读者评论

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

    我猜一个用户(我想更多的个人笔记本与Linux/*BSD与ZFS)可以有基本的主目录是不加密的,但所有子目录都是加密数据集的一部分,然后,在第一次用户界面登录时,它提示输入密码以加载密钥。
    22582个帖子|注册
  5. 有没有一种简单的方法来确定实际使用的加密算法?我看到的唯一相关功能是“加密”,对我来说是“开启”。我很好奇实际使用的是什么算法(无论是CCM还是GCM),但我没有看到任何方法来要求它?
    7397个帖子|注册
  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

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

    像这样:
    $zfs获得加密YourPool/YourDataset
    名称属性值源
    YourPool/YourDataset加密aes-256-gcm -
    |注册了2341个帖子
  8. 编辑:没关系,第二个帖子回答了我的问题。谢谢!

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

    像这样:
    $zfs获得加密YourPool/YourDataset
    名称属性值源
    YourPool/YourDataset加密aes-256-gcm -


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

    @malor,抱歉,我上面的链接是一个旧版本的手册页,抱歉,根据文章它是-GCM,因为>=0.8.4,当前的ZoL版本是0.8.6。我会更新我的评论。
    22582个帖子|注册
  10. 我想知道的原因是因为我在一段时间前创建了它,我不确定我的版本是否在做GCM模式。我可能不会费心重拍,但我很好奇。幸运的是,它使用了更好的算法。
    7397个帖子|注册
  11. jhodge写道:
    非常好的那样;我假设在任何实现AES-NI(或equiv)的CPU上性能都非常出色,但是您知道在J1800这样的CPU上性能会受到多大的影响吗?我知道它们很老了,但仍然有很多嵌入式/工业/无风扇的底盘。


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

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

    软件方面的改进从我的实验开始就已经添加了,但是我们最近在Ars论坛上发布了一张海报,试图使用ARM的二进制文件,但没有使用他们的硬件加速,这对他们来说也是一场灾难。

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

    它可能不太可靠,但AFAIK LUKS是一个非常薄的层,所以它可能会与把ZFS卷直接放在金属上的反应相同。
    7397个帖子|注册
  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,如果需要的话)中交换是很容易的。如果没有别的原因,就是要有信心,一旦你开始使用它,它就不会老去;)
    2013年发帖|注册
  13. malor写道:
    有没有一种简单的方法来确定实际使用的加密算法?我看到的唯一相关功能是“加密”,对我来说是“开启”。我很好奇实际使用的是什么算法(无论是CCM还是GCM),但我没有看到任何方法来要求它?


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

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


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

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

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

    代码:
    Zpool获取feature@encryption(卷)

    名称属性值源
    (卷)feature@encryption活动的本地


    ...这不是我想要的。

    然后我做了大量的麻烦,试图找到正确的字符串查询,假设它一定在后面的功能@墙。没有找到任何东西。我在网上搜了一堆东西,没找到任何明确的东西。所以我在这里问:

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


    瞧,这正是我要找的。我找错地方了,语法也错了。feature@encryption适用于zpools,但显然它只是对文件集的直接“加密”。

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

    代码:
    Zpool获取feature@encryption(卷)

    名称属性值源
    (卷)feature@encryption活动的本地


    ...这不是我想要的。

    然后我做了大量的麻烦,试图找到正确的字符串查询,假设它一定在后面的功能@墙。没有找到任何东西。我在网上搜了一堆东西,没找到任何明确的东西。所以我在这里问:

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


    瞧,这正是我要找的。我找错地方了,语法也错了。feature@encryption适用于zpools,但显然它只是对文件集的直接“加密”。


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

    ' zfs get '返回特定数据集或zvol本身的zfs属性,这是非常您在这里想要的(应用于您在第一个地方好奇的数据集或zvol)。

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


    实际上,这看起来并不是一次彻底失败的转变;我肯定没有在我的文章中的例子上手动设置算法,但我看到我自己的“zfs get encryption”在我自己的文章中显示,你得到了实际的算法,而不仅仅是在上。

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

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

    不出所料,我没有因此获得编辑奖。: P
    |注册了2576个帖子
  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引导池,以及大容量存储的锈池。我在同样加密的根池上放置了一个密钥文件,因此可以直接添加一个额外的调用来导入池,并在解锁根池后立即运行' zfs load-key -a '。

    我很高兴我选择了这种方式,而不是运行2.0的后端口来获得解锁功能。我在主机上运行Docker,然后 https://github.com/openzfs/zfs/issues/11480 无疑是我很长时间以来在生产系统中看到的最令人震惊的文件系统问题之一。
    |注册了39个帖子
  18. malor写道:
    实际的问题是,我试图读取池上的加密,而不是根文件系统:

    代码:
    Zpool获取feature@encryption(卷)

    名称属性值源
    (卷)feature@encryption活动的本地


    ...这不是我想要的。

    然后我做了大量的麻烦,试图找到正确的字符串查询,假设它一定在后面的功能@墙。没有找到任何东西。我在网上搜了一堆东西,没找到任何明确的东西。所以我在这里问:

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


    瞧,这正是我要找的。我找错地方了,语法也错了。feature@encryption适用于zpools,但显然它只是对文件集的直接“加密”。

    很高兴我能帮上忙!:)

    此外,你可以得到一个列表的所有属性和他们的设置:
    获取所有(volume)文件集
    |注册了2341个帖子
  19. 我的硬盘明天就会出现,用来扩展我的TrueNAS盒子。看来这次我要把硬盘加密了。

    即使速度有问题,只要它仍然足够快,用Plex流化BluRay备份,这对我来说是没问题的。
    |注册了1085个帖子
  20. 坏死写道:
    我的硬盘明天就会出现,用来扩展我的TrueNAS盒子。看来这次我要把硬盘加密了。

    即使速度有问题,只要它仍然足够快,用Plex流化BluRay备份,这对我来说是没问题的。


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


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

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

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

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

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

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

    如果这里有人感兴趣,加入讨论:欢迎帮助:)
    |注册了538个帖子
  25. 很好的介绍。

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

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

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

    最后一次编辑NewCrow2021年6月24日上午6点半

    |注册了331个帖子
  26. 我希望ZFS能够开发出可否认加密技术。在许多国家——例如英国——拥有加密数据,但你无法在要求政府时解密是一种行为犯罪可判处2至5年监禁.这是完全合理的假设,例如,在一个共享的ZFS服务器上,有人可能不拥有给定zvol的加密密钥,但ZFS元数据的存在足以证明它的存在。

    我意识到在LUKS上运行ZFS可以绕过这个问题(用一些巧妙的方法),但它似乎很奇怪,ZFS本身没有一个命令行选项来隐藏元数据。
    |注册了187个帖子
  27. Landak写道:
    我希望ZFS能够开发出可否认加密技术。在许多国家——例如英国——拥有加密数据,但你无法在要求政府时解密是一种行为犯罪可判处2至5年监禁.这是完全合理的假设,例如,在一个共享的ZFS服务器上,有人可能不拥有给定zvol的加密密钥,但ZFS元数据的存在足以证明它的存在。

    我意识到在LUKS上运行ZFS可以绕过这个问题(用一些巧妙的方法),但它似乎很奇怪,ZFS本身没有一个命令行选项来隐藏元数据。


    我无法在ZFS下运行GELI,因为从很久以前开始升级,那是唯一的选择,但即使这样也会在磁盘上添加一个头:(我希望ZFS/FreeBSD能提供一种就地迁移的方式,但这就是生活。游泳池马上就要升级了,到时候我会修复的。

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

    即使速度有问题,只要它仍然足够快,用Plex流化BluRay备份,这对我来说是没问题的。


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


    我的老芹菜1610没有AES工作只是好结束。没有转码的带宽,但它可以轻松地比最高比特率模糊撕裂快得多。
    |注册了452个帖子
  29. 作为友好的提醒:

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

    我不是在劝阻这里的任何人加密他们的数据,我只是相信许多人使用它没有必要。
    |注册了242个帖子
  30. 好文章!

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

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

    代码:
    —w | ZFS load-key“${dataset}”


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

    如果处理得当,密钥文件可能同样安全,而提示符可以让您从任何您喜欢的地方提取密码,因此以这种方式实现自动化非常方便。

    我是OpenZFS加密的超级粉丝,它使事情变得非常简单,zfs send能够发送加密的块,这对于备份来说是非常棒的。

    唯一缺少的功能是免费替换我的旧Synology NAS,它只支持BTRFS;幸运的是,它也可以使用iSCSI,所以我仍然可以用ZFS发送给它,但这并不是一个理想的方式。
    |注册了3142个帖子
  31. 很好的文章。

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

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

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

    我不是在劝阻这里的任何人加密他们的数据,我只是相信许多人使用它没有必要。


    加密*一切*所以*当*硬件失败,你可以放心折腾。

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

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

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


    ZFS只能使用最基本的内核工具,因为它不是GPL,而且内核开发人员几乎把他们所做的所有事情都排除在非GPL代码之外。

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

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


    因为另一个链接有更多的Googlejuice,我没有在包装锚标签之前更仔细地调查它(因为我记得上次我看到它是Veracrypt的官方网站,就在TrueCrypt被放弃后不久)。

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


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

    是的,字节。不,它不尊重或理解单位后缀。是的,这是一个血腥的巨大的在RAM为1TiB的服务器上…
    |注册13301个帖子
  39. malor写道:
    我非常确定您可以调整内存分配,尽管我还没有去查找如何调整


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

    是的,字节。不,它不尊重或理解单位后缀。是的,这是一个血腥的巨大的在RAM为1TiB的服务器上…


    *梦想*我们在工作中做一些非常他妈的大的铁,但1T RAM仍然是我目前获得的最大的玩具的4倍。
    |注册了452个帖子

你必须置评。

通道Ars Technica