我有一个服务器(Debian),它通过 NFS 为某些文件夹提供服务,还有一个客户端(Debian),它连接到 NFS 服务器(使用 NFSv4)并安装导出的文件夹。到目前为止一切都很好,我可以连接和修改文件夹的内容。但用户完全搞砸了。据我了解,这是由于 NFS 使用 UID 来设置权限,并且由于来自客户端和服务器的用户的 UID不同,因此会发生这种情况,这仍然是意料之中的。但据我所知,通过启用 NFSv4,IDMAPD 应该启动并使用用户名而不是 UID。用户确实存在于服务器和客户端上方面,他们只是有不同的 UID。但无论出于何种原因 IDMAPD 不起作用或似乎没有做任何事情。
所以这是我到目前为止所做的:
在服务器端:
在客户端
重新启动并重新启动了几次,但仍然没有。当我从服务器创建一个带有用户A的文件夹时,在客户端上我看到文件夹所有者是某个用户X。当我使用用户A从客户端创建文件时,在服务器端它说它来自某个用户Y。
我用 HTOP 检查了 rpc.idmap 进程正在服务器上运行,确实如此。尽管在 …
在NFSv4的教程是经常可以看到的建议,一个共享的根目录导出到类似于整个子网这从拱门维基:
/etc/出口:
/srv/nfs 192.168.1.0/24(rw,sync,crossmnt,fsid=0,no_subtree_check)
/srv/nfs/music 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/nfs/public 192.168.1.0/24(ro,all_squash,insecure,no_subtree_check) desktop(rw,sync,all_squash,anonuid=99,anongid=99,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
根本没有第一行会更安全吗?(在我的问题中,当我提到“第一行”时,我指的是上面代码段中的第一行导出行。)
在 NFSv4 中,fsid=0 是可选的,它似乎主要是为了方便缩短路径(通过将 /srv/nfs 转换为 /)。在我的初步测试中,只要您使用 /srv/nfs,导出就可以在没有第一行的情况下正常工作。第一行提供哪些重要功能(如果有)?
当我们知道至少还有一个像这样的绑定安装时,我还想考虑这个例子:
/srv/nfs/projects
Run Code Online (Sandbox Code Playgroud)
(假设与音乐绑定安装不同,“项目”的内容是敏感的。)
第一个导出行,正如上面所写的,似乎让 LAN 上的每个客户端都可以访问整个导出的文件系统,尤其是使用 crossmnt 和 no_subtree_check。我并不是建议忽略所有者和组权限,但我认为导出在没有第一行的情况下也能正常工作,并且其他绑定安装在 /srv/nfs 下(例如 /srv/nfs/projects)不会对整个子网不必要地开放,从而暴露有关所有者和组权限的任何潜在疏忽。
当然,可以添加类似于此正确共享“项目”的导出:
/etc/出口:
/srv/nfs/projects 192.168.1.123(rw,sync,root_squash,subtree_check)
Run Code Online (Sandbox Code Playgroud)
这条新线路是否受到第一条线路的任何影响?我看不出第一条出口线是如何起到任何重要作用的。
如果这条线有帮助或推荐,那么做这样的事情是否明智?
/srv/nfs 192.168.1.0/24(ro,sync,fsid=0,subtree_check,all_squash)
Run Code Online (Sandbox Code Playgroud)
接下来的更具体的导出将覆盖这个导出是否正确?例如,即使第一行更改为 ro 并使其更具限制性(如下例所示),以下行是否会正确授予对“音乐”的 rw 访问权限?
/srv/nfs 192.168.1.0/24(ro,sync,fsid=0,subtree_check,all_squash)
/srv/nfs/music 192.168.1.2(rw,sync,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
列出出口的顺序重要吗?什么决定优先级?更具体的地址(例如,192.168.1.2)是否会覆盖更通用的地址(192.168.1.0/24)?
注意:这个问题有一个重点主题,它可能会使用更好的标题来说明这一点,但到目前为止我还没有想出正确的标题。我欢迎编辑。
更新:5 (20171209)
更新:5 (20171210)
mount -t nfs4 [SERVER IP]:/archlinux /mnt
作品。ss -ntp | grep 2049
客户端在 systemd 开始之前建立到服务器的连接。我正在尝试设置无盘节点/工作站/系统。操作系统 (4.13.12-1-ARCH) 安装在 SERVER 上/srv/archlinux
。经过一个从GRUB到NFSv4的成功网络启动,systemd开始,但未能在多个阶段,例如:
Not tainted 4.13.12-1-ARCH #1...
或者,
Not tainted 4.13.12-1-ARCH #1...
我怀疑这些故障是由 NFSv4 或本地网络的错误配置引起的。
/etc/idmapd.conf
[General]
Verbosity = 7
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = …
Run Code Online (Sandbox Code Playgroud) 我们使用 rsync 来同步两个 NFS 服务器的数据。一台 NFS 服务器位于东海岸,另一台位于西海岸。RTT约为110ms。
在东海岸 NFS 服务器上,我安装了西海岸 NFS 服务器安装点。
<server>:/home/backups on /mnt/backups type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,clientaddr=x.x.x.x,local_lock=none,addr=y.y.y.y)
。
数据已经在两台服务器上,只是为了验证数据(例如同步文件夹以及何时不需要更改)。以下是验证 7GB 文件夹的东海岸服务器与西海岸服务器相同所需的时间。
以下大约需要8分钟才能完成超过7GB的数据。
rsync -r -vvvv --info=progress2 --size-only /<local_path>/ /<remote_path>/
以下(避免使用NFS挂载)大约需要15秒才能完成超过7GB的数据(同上)。
rsync -r -vvvv --info=progress2 --size-only /<local_path>/ <user>@<west_cost_NFS>:/<remote_path>/
同样,上面的内容不会移动任何数据,因为文件夹已经同步,它只是验证数据是否相同(基于文件的大小)。
我尝试-o async
在客户端和服务器上使用,但当我在客户端上运行“mount”时,/etc/exports
async
客户端永远不会显示。async
我认为async
是默认的。我尝试过将 rsize、wsize 也更改为更大的值,但性能并没有变得更好。我是否完全可以从 NFS 中获得更好的性能?
我正在设置 Kerberized NFSv4 供个人使用
/etc/hosts
替代),没有 LDAPnfs4_disable_idmapping
设置为“N”)我有两台机器,都运行 Ubuntu 20.04 LTS
arhiv.pecar
(本地地址192.168.56.200
)有 NFS 服务器和 KDCclient.pecar
(本地地址192.158.56.100
)是客户端所有管道似乎都可以工作,我可以很好地安装共享,但是
如果共享导出为sec=sys
服务器exportfs -v
输出
/srv/export <world>(rw,async,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
Run Code Online (Sandbox Code Playgroud)
客户端mount
输出
arhiv.pecar:/srv/export on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,clientaddr=192.168.56.100,local_lock=none,addr=192.168.56.200)
Run Code Online (Sandbox Code Playgroud)
nfsidmap
处于活动状态,客户端上的列表文件可以正确翻译用户名/组chown
来自客户端是可能的,并正确翻译用户名/组文件是在客户端的 uid/gid 下创建的,这意味着它们是在服务器上使用错误的uid/gid 创建的
如果服务器碰巧有具有相同 uid 的用户,它会映射到错误的所有者,否则所有者是nobody:4294967294
有效用户似乎是由客户端 uid 指定的用户。
我想这是使用时的一个已知缺点sec=sys
如果共享导出为sec=krb5
服务器exportfs -v …
我正在尝试挂载一个简单的 NFS 共享,但它一直显示“不允许操作”。
NFS 服务器具有以下共享。
/mnt/share_dir 192.168.7.101(ro,fsid=0,all_squash,async,no_subtree_check) 192.168.7.11(ro,fsid=0,all_squash,async,no_subtree_check)
Run Code Online (Sandbox Code Playgroud)
该共享似乎对两个客户都很活跃。
# exportfs -s
/mnt/share_dir 192.168.7.101(ro,async,wdelay,root_squash,all_squash,no_subtree_check,fsid=0,sec=sys,ro,secure,root_squash,all_squash)
/mnt/share_dir 192.168.7.11(ro,async,wdelay,root_squash,all_squash,no_subtree_check,fsid=0,sec=sys,ro,secure,root_squash,all_squash)
Run Code Online (Sandbox Code Playgroud)
客户端192.168.7.101可以看到共享。
$ sudo showmount -e 192.168.7.10
Export list for 192.168.7.10:
/mnt/share_dir 192.168.7.101
Run Code Online (Sandbox Code Playgroud)
192.168.7.101 的挂载目标:
# ls -lah /mnt/share_dir/
total 8.0K
drwxr-xr-x 2 me me 4.0K Aug 28 19:21 .
drwxr-xr-x 3 root root 4.0K Aug 28 19:21 ..
Run Code Online (Sandbox Code Playgroud)
当我尝试挂载共享时,客户端使用nfs
或nfs4
类型显示“不允许操作”。
$ sudo mount -vvv -t nfs 192.168.7.10:/mnt/share_dir /mnt/share_dir
mount.nfs: timeout set for Sun Aug 28 21:56:03 2022
mount.nfs: trying text-based options …
Run Code Online (Sandbox Code Playgroud) 在 RHEL 8.8 中,当我尝试测试 NFS tcp 与 udp 以及版本 3 与 4.0、4.1 和 4.2 时,mountproto=
除了proto=
键入mount
. 这有什么意义和意义呢?
在 RHEL 8.8 中,我是否可以在 nfs 客户端上vers=3
专门显示 NFS 操作?proto=udp
proto=tcp
在 nfs 客户端上,当我看到和时,这意味着什么mountproto=udp
?