我为我的开发环境设置了CentOS VM,并使用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设置为域控制器,并将其用于对所有主机进行身份验证。我很确定会让这个问题无效,但我还没有时间玩这个...... Argh。 [/切线]
答案 0 :(得分:4)
据我所知,由于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 / passwd,nis,ldap等,具体取决于/etc/nsswitch.conf)
为了解决问题,请检查两台计算机上/ etc / passwd中的用户ID。使用ls -ln显示数字ID而不是名称,如果NUMERICAL ids不同,nfs会做一些奇怪的事情。确保在所有计算机上对相同的用户名使用相同的用户ID,并且NFS将按照它应该的方式工作。