Linux 上的 NFS4 让我有点困扰。一些“外面”的信息似乎与其他信息相冲突,而其他信息似乎很难找到。所以这里有几件引起我注意的事情,希望有人能对此有所解释。
这个问题只关注没有 Kerberos 等的 NFS4。
1. 出口
exports
手册页中有关 /etc/exports 结构的描述不明确。
引自exports(5)
:
此外,每行路径名后可能有一个或多个默认选项规范,形式为破折号(“-”)后跟选项列表。
该选项列表仅用于该行上的所有后续导出。
“仅在该行进行后续导出”是什么意思?
1.2fsid=0
不再需要了吗?
我在搜索 fsid 时发现了一个对 linux-nfs 列表的评论不再需要声明 fsid=0。现在我很困惑,nfs4 是否需要它?!
2. 非导出目录仍可挂载
假设我有以下树:
/exp
/exp/users
/exp/distr
/exp/distr/archlinux
/exp/distr/debian
并且我在此 fstab 条目中有以下条目:
/dev/disk/by-label/users /mnt/users ext4 defaults 0 0
/dev/disk/by-label/distr /mnt/distr ext4 defaults 0 0
/mnt/users /exp/users none bind 0 0
/mnt/distr /exp/distr none bind 0 0
我的出口正是这样的:
/exp 192.168.1.0/24(fsid=0,rw,async,no_subtree_check,no_root_squash)
/exp/distr 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
并exportfs -arv
显示:
exporting 192.168.1.0/24:/exp/distr
exporting 192.168.1.0/24:/exp
那么为什么我可以做到这一点并且客户端上没有出现任何错误:
mount -t nfs4 server:/exp/users /tmp/test
即使没有导出?我没有导出此目录,尽管除非我指定,否则/exp/users
看不到的内容,但我仍然可以写入目录。我写入的所有内容都会进入底层目录,当我..时可以看到该目录。/dev/disk/by-label/users
crossmnt
/exp/users
umount /exp/users; ls /exp/users
3. 奇怪的情况showmount -d server
正如所述rpc.mountd(8)
,此命令应显示当前由客户端挂载的目录或中的陈旧条目/var/lib/nfs/rmtab
,如下所示:
rpc.mountd 守护进程通过在 /var/lib/nfs/rmtab 文件中添加条目来注册每个成功的 MNT 请求。当从 NFS 客户端收到 UMNT 请求时,只要该导出的访问控制列表允许该发送者访问该导出,rpc.mountd 就会从 /var/lib/nfs/rmtab 中删除匹配的条目。
(...)
但请注意,几乎没有什么可以保证 /var/lib/nfs/rmtab 的内容准确无误。客户端在调用 UMNT 后仍可继续访问导出。如果客户端重新启动时未发送 UMNT 请求,则 /var/lib/nfs/rmtab 中仍会保留该客户端的过时条目。
读完这篇文章后,我肯定会想:
- 仅仅暴露这类客户信息是不是非常不安全?
- 不知道服务器管理员必须有一个带有很多陈旧的客户;
- 这就是为什么挂载 nfs4 目录的客户端
mount -v
会看到“未挂载任何内容”这样的输出,尽管曾是安装?
我还有很多关于 nfs4 的其他问题,但暂时就这些。:)
答案1
很好的问题,在我看来,文档突出了更重要的一点。以下是完整答案的尝试:
“仅在该行进行后续导出”是什么意思?
这里举个可能最简单的例子:
/export/stuff -rw 10.0.0.54 10.0.0.55
相当于:
/export/stuff 10.0.0.54(rw) 10.0.0.55(rw)
不再需要了吗fsid=0
?
这取决于您的使用情况。看起来您正在从查询的其余部分导出基于常规磁盘的文件系统,在这种情况下,最好将其删除fsid=0
(在 nfsv4 中,这会将行为更改为引用导出的根文件系统)。
要改变此行为,删除 no_subtree_check 选项
rmtab
相关内容
- 这样处理是否存在
rmtab
安全风险?
我想这取决于你的使用情况来回答,在我的网络上它没有出现可信的信息泄露,但我可以看到它可能出现的情况。 - 不会
rmtab
充满陈旧的条目吗?
可能是的,同样取决于您的部署场景/用例。 - 这就是为什么有些客户端运行时
mount -v
会错误地看到“没有安装任何内容”的原因吗?
我还没有遇到过这种情况