如何允许写入已挂载的 NFS 分区

如何允许写入已挂载的 NFS 分区

如何允许特定用户权限写入 NFS 分区?

我已经在本地主机(Fedora 安装)上安装了 NFS 共享,并且可以以 root 身份进行读写,但是无法以 apache 用户身份进行写入,即使本地主机和远程主机上的共享中的所有文件和目录都归 apache 所有。

例如,我通过 /etc/fstab 中的此行将其挂载:

remotehost:/data/media     /data/media             nfs     _netdev,soft,intr,rw,bg        0 0

并且这两个位置都归 apache 所有:

[root@remotehost ~]# ls -la /data
total 24
drwxr-xr-x.  6 root    root    4096 Jan  6  2011 .
dr-xr-xr-x. 28 root    root    4096 Oct 31  2011 ..
drwxr-xr-x   4 apache  apache  4096 Jan 14  2011 media

[root@localhost ~]# ls -la /data
total 16
drwxr-xr-x   4 apache apache 4096 Dec  7  2011 .
dr-xr-xr-x. 27 root   root   4096 Jun 11 15:51 ..
drwxrwxrwx   5 apache apache 4096 Jan 31  2011 media

但是,当我尝试以 apache 用户身份写入时,出现“权限被拒绝”错误。

[root@localhost ~]# sudo -u apache touch /data/media/test.txt'
touch: cannot touch `/data/media/test.txt': Permission denied

但当然,以 root 身份运行没问题。我做错了什么?

答案1

NFS 根据用户 ID 而不是用户名授权操作。为了能够/data/media在 NFS 客户端上进行写入,您需要确保apacheonlocalhostapacheonremotehost具有相同的数字用户 ID。

帖子中的文件列表并未证实这一点。

事实上,localhost清单上说挂载点 /data/media由 apache@localhost 所有。

[root@localhost ~]# ls -la /data
 ...
 drwxrwxrwx   5 apache apache 4096 Jan 31  2011 media

远程列表显示共享资源 /data/media由 apache@remotehost 所有。

[root@remotehost ~]# ls -la /data
drwxr-xr-x   4 apache  apache  4096 Jan 14  2011 media

如果 apache@localhost 和 apache@remotehost 的数字用户 ID 不同,则该目录将不可写。

您可以使用该命令ls -lna来检查数字用户ID。

这只是猜测。OP 中没有任何内容具体证实用户 ID 存在分歧。

答案2

  • 导出是否可写(/etc/exports在服务器上检查)?正如您将在以下位置找到的exports(5)

       rw     Allow both read and write requests on this NFS volume.
              The default is to disallow any request which changes the filesystem.
              This can also be made explicit by using the ro option.
    
  • (可能不相关,但我对现有的 SELinux 政策不太了解)您在服务器上使用 SELinux 吗?您可以使用 检查getenforce,可能需要在setenforce 0(使用 撤消setenforce 1)后重试。

  • 我确实注意到 UID 恰好匹配。但我认为值得一提的是,为了确保用户和组通过名称而不是 ID 匹配,您可以idmap在两个主机上配置该服务。

相关内容