如何允许特定用户权限写入 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 客户端上进行写入,您需要确保apache
onlocalhost
和apache
onremotehost
具有相同的数字用户 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
在两个主机上配置该服务。