![使用Vim可以读取NFS挂载目录中的文件,但无法修改文件?](https://linux22.com/image/131543/%E4%BD%BF%E7%94%A8Vim%E5%8F%AF%E4%BB%A5%E8%AF%BB%E5%8F%96NFS%E6%8C%82%E8%BD%BD%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BD%86%E6%97%A0%E6%B3%95%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%EF%BC%9F.png)
鉴于:
- 我正在运行根在我的本地计算机中。
- 我的本地计算机中有一个名为“server_views”的 NFS 安装目录。
这是我本地计算机上的 fstab 和 mstab 中配置“server_views”目录的方式:
/etc/fstab
server:/server_views /server_views nfs rw,defaults,noauto,users,suid,exec,tcp,posix,soft 0 0
/etc/mstab
server:/server_views /server_views nfs rw,users,nodev,tcp,posix,soft,vers=4,addr=XXX.XXX.XXX.XXX,clientaddr=YYY.YY.YY.Y 0 0
我在服务器的“server_views”目录中有一个名为“foo.c”的文件。
在我的本地计算机中;在安装目录(“server_views”)内:
在安装的“server_views”目录中运行 ls –l 输出:
-r-xr-xr-x 1 nobody nobody 28668 Mar 2 2017 foo.c
*如果我尝试使用 Vim 写入“foo.c”文件;我在 Vim 控制台中收到以下错误:
"foo.c" E212: Can't open file for writing
*如果我尝试更改 foo.c 权限,我会得到:
chmod: changing permissions of `foo.c': Operation not permitted
如果我手动将“foo.c”文件复制到本地计算机中的某个未安装的目录中:
在我的本地计算机中运行包含 foo.c 的目录内的 ls –l 给出:
-r-xr-xr-x 1 17932 26 28720 Mar 22 17:58 foo.c
我可以使用 Vim 毫无问题地编写 foo.c。
有谁知道为什么我在挂载的 NFS 目录“server_views”内时无法写入文件“foo.c”,但如果手动将文件复制到本地计算机,则可以写入同一文件“foo.c”到未安装的目录?
答案1
root_squash
这通常由NFS 服务器上的设置控制,该设置阻止root
客户端位于root
NFS 服务器上(这通常是一个非常好的安全实践)。root_squash
是默认值,因此通常人们只会看到no_root_squash
是否有人出于某种原因需要禁用远程用户的挤压root
。/etc/exports
例如在NFS 服务器上
/somedir dangerhost(rw,no_root_squash,async) \
otherhost(rw,async) \
...
这可以使用1777
模式目录进行测试,该目录将允许任何远程用户写入该目录:
nfsserver# mkdir /somedir/tmp ; chmod 1777 /somedir/tmp
然后在客户端上假设/somedir
安装在/mnt
$ touch /mnt/tmp/foo
$ sudo touch /mnt/tmp/bar
$ ls -l /mnt/tmp/{foo,bar}
-rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 15 14:27 /mnt/tmp/bar
-rw-r--r-- 1 jhqdoe jhqdoe 0 Apr 15 14:27 /mnt/tmp/foo
$
这里root
已经被压扁给nfsnobody
用户了(这可能在其他平台nobody
或其他帐户上)。
答案2
问题出在我的本地计算机和 NFS 服务器之间的门计算机(IP 伪装配置不正确)中。
重新启动网关计算机,启动 eth 接口(使用 ifup)并重新启动防火墙(网关有 rc.firewall-2.4)