如何将 NFS 客户端 root 用户映射到 NFS 服务器 root 用户?

Max*_*ind 4 linux nfs

我们在使用 NFS 时遇到了问题。如果该目录是在 NFS 服务器上创建的,则我们无法写入 NFS 客户端计算机上的目录。原因似乎是文件/目录权限和用户映射。

我们的设置:

我们有 2 个 EC2 节点 - Ubuntu 16.04.2 LTS

安装在一台机器上的 NFS 服务器:

ubuntu@master:~$ less /etc/exports
/home/ubuntu/data *(rw,no_subtree_check,sync,insecure)
Run Code Online (Sandbox Code Playgroud)

相同的目录安装在另一台机器上:

sudo mkdir /home/ubuntu/data
sudo mount -t nfs masterIp:/home/ubuntu/data /home/ubuntu/data
Run Code Online (Sandbox Code Playgroud)

我们有一个问题:

当我们在 master 中的 NFS 中创建一个目录时,它的创建方式如下:

# sudo mkdir /home/ubuntu/data/Test
# sudo ls -all /home/ubuntu/data
drwxr-xr-x  2 root  root       4096 Jul  5 07:19 Test
Run Code Online (Sandbox Code Playgroud)

Master 访问此目录、创建文件 insideeetc 都没有问题。但是当我们尝试从 Test 目录内的从属节点创建文件时,我们遇到了 Permission denied 错误。

当我们从 NFS 客户端机器创建一个目录时,它看起来像这样:

# sudo mkdir /home/ubuntu/data/Test2
# sudo ls -all /home/ubuntu/data
drwxr-xr-x  2 root  root       4096 Jul  5 07:19 Test
drwxr-xr-x  2 nobody nogroup   4096 Jul  5 07:21 Test2
Run Code Online (Sandbox Code Playgroud)

所以看起来NFS客户端的root用户在写入NFS目录时映射到nobody@nogroup,因此无法写入NFS服务器上由root用户创建的目录。我们需要将 NFS clinet 的 root 用户映射到 NFS 服务器的 root 用户,这样无论我们在何处创建目录,它们都可以自由地使用目录。

Lar*_*end 7

使用条目中的no_root_squash选项/etc/exports。从手册页exports

用户 ID 映射

nfsd 根据每个 NFS RPC 请求中提供的 uid 和 gid 对服务器计算机上的文件进行访问控制。用户期望的正常行为是她可以像访问普通文件系统一样访问服务器上的文件。这要求在客户端和服务器机器上使用相同的 uid 和 gid。这并不总是正确的,也不总是可取的。

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