Ubuntu NFS共享中装入的子目录不可写

Ubuntu NFS共享中装入的子目录不可写,ubuntu,centos,file-permissions,nfs,Ubuntu,Centos,File Permissions,Nfs,我为我的开发环境安装了CentOS虚拟机,并使用NFS在我的Ubuntu盒上挂载web根目录。那部分很好用;但是,所有子目录都不可写。我可以看到它们的内容(只读),但无法将任何新文件添加到子目录中。但是,我可以将文件写入装载点的父目录 [root@dev ~]# cat /etc/exports /var/www/html 192.168.122.1(rw,sync,no_root_squash,no_subtree_check) 据我所知,由于NFS共享是用rw装载的,没有根挤压,因此它

我为我的开发环境安装了CentOS虚拟机,并使用NFS在我的Ubuntu盒上挂载web根目录。那部分很好用;但是,所有子目录都不可写。我可以看到它们的内容(只读),但无法将任何新文件添加到子目录中。但是,我可以将文件写入装载点的父目录

[root@dev ~]# cat /etc/exports
/var/www/html   192.168.122.1(rw,sync,no_root_squash,no_subtree_check)
据我所知,由于NFS共享是用rw装载的,没有根挤压,因此它应该允许任何用户写入这些目录。有人能解释一下吗?至少可以说,我很困惑,不幸的是谷歌并没有提供太多帮助

当我查看主机上的权限时,它说文件归nobody:nogroup所有,但VM上ls-hal的输出显示它归我在主机上使用的相同username:group所有。PAM不应该介入并允许我的主机用户访问写吗

最后,我试图实现的是,所有当前和任何新的子目录都可以通过我的IDE读/写。目前,仅支持父目录/文件。目前,我必须使用ssh连接到主机,并在那里创建文件和/或进行更改。我不希望重复我的工作,我更希望HTML开发环境可以从任何允许访问/etc/exports的主机上编写

我期待着听到其他人如何克服这一点。同时,感谢您提前抽出时间和洞察力

[正切] 也许我最终应该将Samba设置为域控制器,并将其用于对所有主机的身份验证。我很确定这会使这个问题无效,但我还没有时间玩弄它。。。啊。 [/正切]

据我所知,由于NFS共享是使用rw和 没有根挤压,它应该允许任何用户写入这些文件 目录

这是错误的。您的文件和目录仍然使用user/group/other读/写/执行模式,就像在普通文件系统上一样。这只是意味着NFS没有施加任何额外的限制

如果您使用的是NFS,则必须在所有计算机之间保持用户和组ID的同步,否则您将无法解决问题。在内部,操作系统不存储用户名/组名,而是存储它们的数字ID。ls等命令使用/etc/passwd将这些ID映射到名称

因此,如果您的第一台计算机有一个名为“adam”的用户,其UID为1000,“bob”的UID为1001,而您的第二台计算机有“bob”的id为1000和“adam”的id为1001,那么相同的文件,其用户id为1000,将在第一台计算机上显示为属于adam,在第二台计算机上显示为bob。这与PAM没有任何关系——PAM只是进行身份验证(如果用户声称他是adam,并且他给出了密码机密,我们将为他分配UID1000)

服务行NIS(以前的名称为YP)和LDAP就是为了解决这个问题而设计的—使多个主机的数据库保持同步。(当我说ls在/etc/passwd中查找用户名时,我撒谎了——它检查/etc/passwd、nis、ldap和其他名称,具体取决于/etc/nsswitch.conf)

要正确处理问题,请在两台机器上的/etc/passwd中检查您的用户ID。使用ls-ln来显示数字ID而不是名称,如果数字ID不同,nfs会做一些奇怪的事情。确保在所有计算机上对相同的用户名使用相同的用户id,这样您的NFS就会正常工作

据我所知,由于NFS共享是使用rw和 没有根挤压,它应该允许任何用户写入这些文件 目录

这是错误的。您的文件和目录仍然使用user/group/other读/写/执行模式,就像在普通文件系统上一样。这只是意味着NFS没有施加任何额外的限制

如果您使用的是NFS,则必须在所有计算机之间保持用户和组ID的同步,否则您将无法解决问题。在内部,操作系统不存储用户名/组名,而是存储它们的数字ID。ls等命令使用/etc/passwd将这些ID映射到名称

因此,如果您的第一台计算机有一个名为“adam”的用户,其UID为1000,“bob”的UID为1001,而您的第二台计算机有“bob”的id为1000和“adam”的id为1001,那么相同的文件,其用户id为1000,将在第一台计算机上显示为属于adam,在第二台计算机上显示为bob。这与PAM没有任何关系——PAM只是进行身份验证(如果用户声称他是adam,并且他给出了密码机密,我们将为他分配UID1000)

服务行NIS(以前的名称为YP)和LDAP就是为了解决这个问题而设计的—使多个主机的数据库保持同步。(当我说ls在/etc/passwd中查找用户名时,我撒谎了——它检查/etc/passwd、nis、ldap和其他名称,具体取决于/etc/nsswitch.conf)


要正确处理问题,请在两台机器上的/etc/passwd中检查您的用户ID。使用ls-ln来显示数字ID而不是名称,如果数字ID不同,nfs会做一些奇怪的事情。请确保在所有计算机上对相同的用户名使用相同的用户id,您的NFS将正常工作。

我必须说,man exports是我读过的最漂亮的手册页之一,它是如何完成这些工作的一个示例。不幸的是,我还没有解决权限问题。我在CentOS vm上添加了一个新用户,其用户组与我在主机上使用的用户组相同,但仍然无法将新文件添加到子目录中。回到修补…目前,在找到更好的实现之前,我必须将权限更改为777(确实是丑陋的解决方案),以便能够写入子目录。此外,我意识到,不仅我的主机用户需要能够写入这些目录,而且我还希望Apache能够具有写入访问权限。我得留下小叮当