如何设置 NFS 以尊重用户和组权限?

如何设置 NFS 以尊重用户和组权限?

在两台服务器之间创建 NFS 共享后,磅1(nfs 客户端)和数据服务器1(nfs-kernel-server),具有NFS服务器权限的用户无权访问NFS客户端。

数据服务器1配置:

$ cat /etc/exports
/data  10.132.246.167(rw,no_subtree_check)
$ ls -la / | grep data
drwx--x--x  3 u1   users    4.0K Sep  6 03:55 data/
$ ls -la /data
drwxr-xr-x 3 u1       users    4.0K Sep  6 02:31 prod/
drwxrwsr-x 2 www-data www-data 4.0K Sep  6 02:31 keys/
$ awk -F: '$0=$1 " uid="$3 " gid="$4' /etc/passwd | grep 'root\|u1\|ftp\|www-data'
root uid=0 gid=0
www-data uid=33 gid=33
u1 uid=115 gid=100
ftp uid=999 gid=100

lb1配置:

$ mount 10.132.245.223:/data /data
$ mount
10.132.245.223:/data on /data type nfs4 (rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.132.246.167,minorversion=0,local_lock=none,addr=10.132.245.223)
$ sudo -u u1 ls -la / | grep data
drwx--x--x  3 u1   users    4.0K Sep  6 03:55 data/
$ sudo -u u1 ls -la /data
drwxr-xr-x 3 u1       users    4.0K Sep  6 02:31 prod/
drwxrwsr-x 2 www-data www-data 4.0K Sep  6 02:31 keys/    
$ awk -F: '$0=$1 " uid="$3 " gid="$4' /etc/passwd | grep 'root\|u1\|ftp\|www-data'
root uid=0 gid=0
www-data uid=33 gid=33
u1 uid=115 gid=100
ftp uid=999 gid=100    

在 NFS 服务器(即 data-server1)上,root、u1 和 ftp 用户对 /data 子目录具有适当的 rwx 权限,并且可以毫无问题地访问文件系统。但是,在 NFS 客户端(即 lb1)上,permission denied当尝试简单地列出/dataNFS 共享内的目录内容时,root 和 ftp 会出错。另一方面,用户 u1 则运行完美。

这是我第一次使用 NFS

答案1

一切看起来都如预期。由于/datarwx--x--x,因此只有所有者u1, 可以列出它。其他人可以访问其中的文件和子目录,但须遵守这些文件和子目录的权限。

此外,NFS 客户端上的用户 ID 0 会映射到服务器上的用户 ID 65534(在某些系统上为 -2),除非导出行中没有 no_root_squash(或者,如果运行 NFSv4,请在服务器上执行显式用户 ID 映射)。以下是来自Exports(5) 手册页:

通常,在访问 NFS 服务器上的文件时,不希望客户端计算机上的 root 用户也被视为 root 用户。为此,uid 0 通常会映射到不同的 id:所谓的匿名或无人 uid。这种操作模式(称为“根挤压”)是默认的,可以使用 no_root_squash 关闭。

默认情况下,exportfs 选择 uid 和 gid 65534 进行压缩访问。这些值也可以被 anonuid 和 anongid 选项覆盖。

相关内容