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

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

我们在使用 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)

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

sudo mkdir /home/ubuntu/data
sudo mount -t nfs masterIp:/home/ubuntu/data /home/ubuntu/data

我们面临的一个问题:

当我们在主服务器上的 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

主节点可以毫无问题地访问此目录,在其中创建文件等。但是,当我们尝试从测试目录中的从属节点创建文件时,我们得到了权限被拒绝的错误。

当我们从 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

因此,似乎 NFS 客户端的 root 用户在写入 NFS 目录时被映射到 nobody@nogroup,因此无法写入 NFS 服务器上由 root 用户创建的目录。我们需要将 NFS 客户端的 root 用户映射到 NFS 服务器的 root 用户,这样他们俩都可以自由地处理目录,无论我们在哪里创建目录。

答案1

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

用户 ID 映射

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

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

相关内容