当/ etc / exports包含在另一个导出目录中的导出时,NFS执行什么操作?

我有这样一个/ 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保持挂载?

谢谢

第一行不授予挂载/ home / fred的权限,它只指定一个挂载点。 第二行独立于第一行。 在哪里挂载它们将决定inheritance问题。

让我们打电话给你的nfs服务器nfshost.com。 假设在/ home上有两个目录

  • / home / fred,由用户和组拥有,编号为500
  • / home / bob,由用户和组拥有,编号为1000

假设在remotehost.com上有三个空目录

  • / allhome
  • / justbob
  • / justfred

如果你在/ allhome上挂载了nfshost.com:/home,你将能够看到/ allhome上所有的nfshost.com:/ home的内容,即/ allhome / bob和/ allhome / fred。 由于启用了root_squash并将anonuid和anongid设置为500,如果root用户尝试访问/ allhome下的任何内容,他们将使用具有id 500的用户或nfshost.com上的组500中的用户拥有访问权限。 例如,如果/allhome/bob/.profile具有权限-rw-r —–,root将能够读取和写入它。 如果/ allhome/fred/.profile具有权限-rw-r —–,则root将无法访问它。

即使你没有显式导出/ home / bob,因为它是你导出目录的子目录,你可以在/ justbob上挂载nfshost.com:/home/bob。 这将使用您为/ home指定的相同的导出选项。

即使/ home / fred是您导出的另一个目录的子目录,但由于您在装载时显式导出了它,因此为其指定的导出选项将会生效。 这意味着如果您在/ justfred上挂载了nfshost.com:/home/fred,则anonuid和anongid将被设置为1000. root用户将能够读取和写入/justfred/.profile。 这不会影响他们无法通过/allhome/fred/.profilepath访问相同的文件。

如果你将nfshost.com:/home/fred安装在/ allhome / fred上,该怎么办? 这将掩盖nfshost.com:/home export中的/ allhome / fred的内容,并显示来自nfshost.com/home/fred export的内容。 在这种情况下,由于被访问的文件是相同的,所以这个区别不会很明显。 但是,出口选项是不一样的。 root现在可以用uid和gid 1000访问/ allhome / fred。现在他们可以读写/home/fred/.profile。

如果您尝试卸载/ allhome在这一点上,你会得到一个错误,该设备是忙碌的。 您将不得不首先卸载/ allhome / fred。