NFS共享中挂载的子目录不可写

3

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

[root@dev ~]# cat /etc/exports
/var/www/html   192.168.122.1(rw,sync,no_root_squash,no_subtree_check)

据我所知,由于NFS共享已挂载rw和no_root_squash,因此它应允许任何用户在这些目录中写入。有人可以解释一下吗?我感到困惑,谷歌并没有提供太多帮助。
当我从主机上查看权限时,它说文件的所有者是nobody:nogroup,但VM上的ls -hal输出显示它被与我在主机上使用的相同的用户名:组所拥有。难道PAM会发挥作用并允许我的主机用户访问以进行写作?
归根结底,我想要实现的是,所有当前和任何新的子目录都可被我的IDE读/写。目前,只有父目录/文件可以。目前,我必须ssh进入主机并在那里创建文件和/或做出更改。我宁愿不重复我的工作,并且真正希望HTML开发环境可以从任何经过/etc/exports允许访问的主机进行写入。
我期待着听到其他人如何克服这个问题。在此提前感谢您的时间和见识。
(旁白) 也许我应该终于开始设置Samba作为域控制器,并仅使用它对我所有的主机进行身份验证。我相信这将使这个问题无效,但我还没时间去玩它...哎。

我必须说,man exports 是我读过的最精美的 man 手册之一,是如何编写手册的典范。不幸的是,我仍然没有解决权限问题。我在 CentOS 虚拟机上添加了一个新用户,该用户与我在主机上使用的相同的用户组,但我仍然无法将新文件添加到子目录中。回去再调试一下... - DroBuddy
目前为止,直到我找到更好的实现方法,我不得不将权限更改为777(确实很丑陋),以便能够写入子目录。此外,我意识到不仅我的主机用户需要能够写入这些目录,而且我还希望Apache也能够具有写入访问权限。我将不断调试此问题,因为我根本不喜欢当前的解决方案... - DroBuddy
1个回答

7
据我了解,由于NFS共享已挂载为rw和no_root_squash,因此它应允许任何用户写入这些目录。
但是这是错误的。您的文件和目录仍然使用用户/组/其他读取/写入/执行模式,就像在普通文件系统上一样。这只是意味着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,并且他给出密码SeCrEt,我们将分配uid 1000给他)。
NIS(曾用名YP)和LDAP等服务线路正是为解决这个问题而设计的-为多个主机同步数据库。(这就是我在说ls从/etc/passwd中查找用户名时撒谎的地方-它根据/etc/nsswitch.conf检查/etc/passwd、nis、ldap和其他内容)
要正确处理事情,请在两台计算机上检查/etc/passwd中的用户ID。使用ls -ln显示数字ID而不是名称,如果数字ID不同,则NFS会出现奇怪的问题。确保对于相同的用户名使用相同的用户ID,并且您的NFS将像应该一样工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接