我已经使用 NFS 设置了服务器和客户端(均为 LinuxMint 21.3),以便客户端具有读写访问权限。但是读取成功但无法写入。我在这里和其他地方搜索了很多问题,但没有看到任何似乎明确提供解决方案的内容。我浏览过此页面,确认了我所做的事情。
这是设置:
服务器/etc/exports
设置为读/写:
/exports 192.168.0.0/28(rw,no_subtree_check)
客户端/etc/fstab
设置为在启动时挂载:
media:/exports /mnt/nfs/media-server nfs auto,noatime,defaults,x-gvfs-show 0 0
服务器导出的权限(本示例仅选择一个目录):
root@media:~# ls -al /exports/Software
total 16
drwxr-xr-x 4 root root 4096 Mar 28 11:56 .
drwxr-xr-x 8 root root 4096 Mar 28 11:55 ..
drwxr-xr-x 2 root root 4096 Mar 28 11:56 Linux
drwxr-xr-x 2 root root 4096 Mar 28 11:56 Windows
客户端挂载权限:
root@brawn:~# ls -al /mnt/nfs/media-server/Software
total 16
drwxr-xr-x 4 root root 4096 Mar 28 11:56 .
drwxr-xr-x 8 root root 4096 Mar 28 11:55 ..
drwxr-xr-x 2 root root 4096 Mar 28 11:56 Linux
drwxr-xr-x 2 root root 4096 Mar 28 11:56 Windows
但是尝试从客户端复制到服务器——或者从客户端在服务器上创建文件夹——失败。
尝试以我的用户身份进行复制(在两个系统上具有相同的 uid、gid)
:~$ cp /media/<user>/Storage/Software/Linux/zoom*.deb /mnt/nfs/media-server/Software/Linux
cp: cannot create regular file '/mnt/nfs/media-server/Software/Linux/zoom_amd64.deb': Permission denied
即使以 root 身份尝试也失败:
:~# cp /media/<user>/Storage/Software/Linux/zoom_amd64.deb /mnt/nfs/media-server/Software/Linux
cp: cannot create regular file '/mnt/nfs/media-server/Software/Linux/zoom_amd64.deb': Permission denied
更新
使用 @vidarlo 的答案中提供的信息,我执行了以下操作:
在服务器上:
sudo groupadd -g 1003 nfsshare
sudo usermod -a -G nfsshare <user>
cd /exports
sudo chgrp -R nfsshare /exports
sudo chmod -R 775 /exports
sudo exportfs -ar
在客户端:
sudo groupadd -g 1003 nfsshare
sudo usermod -a -G nfsshare <user>
mount -a
我的用户现在可以完全访问导出的内容。
首先,它作为用户失败,因为该文件夹由 拥有
root
,并且仅root
具有写入权限。其次,它失败是因为 NFS默认情况下
root
不信任远程系统。root
你有两个选择:
no_root_squash
使用-option导出目录以授予 root 完全权限。从安全角度来看,后者不是一个好主意- 至少在没有任何进一步操作的情况下不是一个好主意,因为它将允许远程 root 在服务器上创建 suid 二进制文件......