最近发布的TrueNAS SCALE “Bluefin” 22.12.1中,有些用户报告了Kubernetes中“hostPathValidation”配置设置的问题,并要求对此安全措施进行说明。

  “hostPathValidation”检查旨在防止数据集通过SMB/NFS共享的同时,作为Kubernetes的宿主机存储路径。这个安全检查可以防止容器应用程序意外更改ZFS数据集上已有的权限或所有权,或者覆盖现有的扩展属性(xattr)数据(译者注:以防用户通过SMB/NFS访问数据集时出现意外),例如MacOS上的照片元数据。

有什么风险?

  在“应用”-> “设置”-> “高级设置”下禁用“hostPathValidation”复选框,将解除这一限制,但当你在不正确使用时存在一定的可能导致数据丢失或损坏。

  例如:一个转码媒体文件的应用程序可能会通过错误配置或应用程序本身的错误而意外删除文件的“原始质量”副本,并保留较低分辨率的转码版本。即使数据保护采取了快照措施,如果在快照生命周期过期之前未检测到问题,则原始文件可能永远丢失。

  使用复杂ACL方案或使用扩展属性的用户在禁用此功能前应谨慎。对于truenas core用户,使用直接访问数据的Jails或插件同样存在风险。

  这样的更改可能导致SMB/NFS连接的客户端无法访问数据,除非权限非常简单(单个所有者/组及递归),否则撤销大规模更改将需要恢复到以前的ZFS快照。如果没有这样的快照存在,则只能手动更正所有权和权限,否则无法进行恢复。

此设置是何时实施的?

  在最初的SCALE版本Angelfish 22.02中,没有“hostPathValidation”检查。从Bluefin 22.12.0开始,默认情况下添加并启用了“hostPathValidation”设置。但不久之后,发现了一种绕过方法,即允许用户将共享数据集的子目录或嵌套数据集设置为hostPath,而无需取消选中“hostPathValidation”设置。这存在数据损失的潜在风险。另一个绕过方法是先停止SMB/NFS,再启动应用程序,然后再次启动SMB/NFS共享服务。

  这两种绕过方法都是意外的,因为它们在“hostPathValidation”设置选中的情况下存在数据丢失的风险。这些错误已在Bluefin 22.12.1中得到纠正。因此,想通过这两种方法运行的TrueNAS SCALE应用将不会部署或启动,除非取消“hostPathValidation”检查。

这项设置的未来计划是什么?

  我们收到了许多反馈,认为这些修复和验证本身带来了不便。在TrueNAS SCALE的未来版本中,我们将放弃系统下的“hostPathValidation”复选框,而是在任何与现有SMB/NFS共享冲突的TrueNAS应用程序配置期间提供警告对话框。用户可以在此时决定继续进行hostPath配置,或取消更改并通过其他方法设置访问文件夹。

如果必须在SMB和hostPath之间共享数据,如何减轻这些风险?

  一些应用程序允许在应用程序容器内连接到SMB或NFS资源。这可能需要额外的网络配置,例如在TrueNAS文档“从VM中访问NAS”中描述的网络桥接口,以及创建和使用特定于应用程序的用户帐户。

https://www.truenas.com/docs/scale/scaletutorials/virtualization/accessingnasfromvm/

  启用第三方目录(例如TrueCharts)的用户还可以使用不同的容器路径挂载方法,例如连接到NFS export。在这种情况下,需要为应用程序用户分配数据的文件系统权限。

  我们在iX非常感谢您的反馈。

本文翻译自truenas官方论坛,原文于2023年4月4日发表,地址:https://www.truenas.com/community/threads/understanding-the-truenas-scale-hostpathvalidation-setting.109100/