我有一个这样的 /etc/exports 文件:
/home remotehost.com(rw,root_squash,anonuid=500,anongid=500)
/home/fred remotehost.com(rw,root_squash,anonuid=1000,anongid=1000)
这两个导出是否彼此独立工作,或者是否会发生冲突?例如,如果我挂载 /home 和 /home/fred,会发生什么?如果我卸载 /home,/home/fred 会保持挂载状态吗?
谢谢
答案1
第一行不授予挂载 /home/fred 的权限,它仅指定一个挂载点。第二行与第一行无关。将它们挂载到哪里将决定继承问题。
答案2
假设您的 nfs 服务器为 nfshost.com。假设该服务器上的 /home 下有两个目录
- /home/fred,由编号为 500 的用户和组拥有
- /home/bob,由编号为 1000 的用户和组拥有
假设在 remotehost.com 上,你有三个空目录
- /全部主页
- /justbob
- /justfred
如果您将 nfshost.com:/home 安装在 /allhome 上,您将能够在 /allhome 上看到 nfshost.com:/home 的所有内容,即 /allhome/bob 和 /allhome/fred。由于您启用了 root_squash 并将 anonuid 和 anongid 设置为 500,因此如果 root 用户尝试访问 /allhome 下的任何内容,他们将使用 nfshost.com 上 ID 为 500 的用户或组 500 中的用户的访问权限来访问。例如,如果 /allhome/bob/.profile 具有权限 -rw-r-----,则 root 将能够对其进行读取和写入。如果 /allhome/fred/.profile 具有权限 -rw-r-----,则 root 将无法访问它。
即使您没有明确导出 /home/bob,由于它是您导出的目录的子目录,因此您可以将 nfshost.com:/home/bob 挂载到 /justbob 上。这将使用您为 /home 指定的相同导出选项。
即使 /home/fred 是您导出的另一个目录的子目录,由于您在挂载它时明确地导出了它,因此您为其指定的导出选项将生效。这意味着如果您将 nfshost.com:/home/fred 挂载到 /justfred 上,anonuid 和 anongid 将设置为 1000。root 用户将能够读取和写入 /justfred/.profile。这不会影响他们无法通过路径 /allhome/fred/.profile 访问同一文件。
如果您将 nfshost.com:/home/fred 挂载到 /allhome/fred 上,结果会怎样?这将屏蔽 nfshost.com:/home 导出中的 /allhome/fred 内容,并显示 nfshost.com/home/fred 导出中的内容。在这种情况下,差异不会很明显,因为访问的文件是相同的。但是,导出选项并不相同。root 现在可以使用 uid 和 gid 1000 访问 /allhome/fred。现在他们将能够读取和写入 /home/fred/.profile。
如果此时尝试卸载 /allhome,则会收到设备繁忙的错误信息。您必须先卸载 /allhome/fred。