为什么一台机器上的 root 无法更改另一台机器上的 nfs 安装内容?

为什么一台机器上的 root 无法更改另一台机器上的 nfs 安装内容?

在我的 NFS 服务器上,我定义了以下导出:

#NFS exports Database
/shared -alldirs -network=192.168.1 -mask=255.255.255.0

在我的 NFS 客户端上:

192.168.1.7:/shared /shared nfs rw 0 0

显然,作为服务器上的 root,我可以做任何我想做的事情。然而,在客户端上,我的常规用户“gabe”可以更改 nfs 挂载(假设我有权限),但 root 不能。

作为我的普通用户:

gabe@client$ cd /shared
gabe@client$ ls -l
total 8
drwxrwxrwx  4 gabe  wheel   512 Mar 20 19:20 tmp
gabe@client$ cd tmp
gabe@client$ touch test.txt
gabe@client$ rm test.txt

作为根用户:

# cd /shared/tmp
# touch test.txt
touch: test.txt: Permission denied

再说一次,这一切都在 NFS 上客户事情的一面,我怀疑它可能与 -maproot 选项有关。这是我第一次设置 NFS,我刚刚注意到这个特性。我现在要做一些阅读,看看我是否能解决这个问题,但如果有人有任何见解,我将不胜感激。

答案1

NFS 的设计思想是用户和组 ID 在网络上的所有计算机上都是相同的。对于普通用户来说,这样就可以了。但 root 的 UID 始终为 0,并且仅仅因为您在一台机器上拥有 root 权限,并不意味着您应该对网络上的每台计算机都具有 root 访问权限。

因此,NFS对root有特殊的对待。默认情况下,root 映射到nobody用户,该用户通常没有写访问权限。该-maproot选项允许您更改 root 的处理方式。 BSD 的选项-maproot=root对应于 Linux 的no_root_squash选项。

答案2

这是传统 NFS 实现的常见行为。 NFS 用户映射的执行与上下文无关,因此客户端 root 的所有访问都必须映射到特定用户(通常nobody默认情况下)。因此,出现了这种奇怪的行为,客户端根无法直接访问您的文件,但可以su gabe访问它们。

(NFS 的“最新”版本,即 NFSv4,也许还有 NFSv3,如果双方都支持,则允许更明智的行为,但我不知道详细信息。)

相关内容