我想为多个docker容器设置一个NFS服务器,我找到了关于archlinux-wiki。我认为这个项目是了解 NFS 配置及其安全细节的一个有用示例。
我不确定下面这句话是什么意思以及该如何表达。
一个好的安全做法是在一个离散的目录树中定义一个 NFS 根,这将使用户仅限于该挂载点。
这是否仅意味着为共享数据创建一个特定的目录,而不是让它分布在多个用户的主目录中?
服务器操作系统:centos7或8
答案1
我想我知道这里发生了什么以及为什么 Arch wiki 令人困惑。
20 世纪 90 年代的 NFS 旧版本(版本 3 及更早版本)可以简单地导出位于文件系统任何位置的任意目录。NFSv4 改变了这一现状,要求所有导出的目录都是顶级“根”导出的子目录,该导出由系统管理员定义,并带有导出选项fsid=0
以将其区分为根目录。没有预定义的根目录;管理员明确选择定义根目录。
因此,如果您定义/srv/nfs
为根,则所有其他 NFSv4 导出都必须是该目录的子目录。
但是,您要导出的目录可能实际上不在 下/srv/nfs
。例如,您可能想要导出/var/lib/docker/volumes
。为此,您可以创建绑定挂载,这样文件就保留在文件系统中的原始位置,但也可以在绑定挂载路径下看到,而不是移动文件(这可能会破坏依赖于它们位于原始位置的事物)。
mkdir /srv/nfs/volumes
mount --bind /var/lib/docker/volumes /srv/nfs/volumes
现在,这些文件在文件系统树的两个位置均可用,因此 NFSv4 可以导出它们。
我唯一仍感到困惑的是,为什么 Arch wiki 将其称为“良好的安全实践”,而这只是 NFSv4 的工作方式。