使用Vim可以读取NFS挂载目录中的文件,但无法修改文件?

使用Vim可以读取NFS挂载目录中的文件,但无法修改文件?

鉴于:

  • 我正在运行在我的本地计算机中。
  • 我的本地计算机中有一个名为“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客户端位于rootNFS 服务器上(这通常是一个非常好的安全实践)。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)

这是一个很好的参考: http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/

相关内容