为什么不能在一台机器上root从另一台机器上更改nfs挂载的内容?


14

在我的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,我刚刚注意到了这种特殊性。我现在将做一些阅读,看是否能解决这个问题,但是如果有人有任何见识,我将不胜感激。

Answers:


18

NFS的设计理念是,网络上所有计算机上的用户名和组ID均相同。对于普通用户,这没问题。但是root的UID始终为0,仅因为您在一个盒子上拥有root,但这并不意味着您应该对网络上的每台计算机都具有root访问权限。

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


确实是的。这解决了我的问题。关于maproot所做的事情,我正在阅读的手册页有些含糊(或者我的理解是)。谢谢!
gabe。

这里的另一个菜鸟。我想知道你们是否知道一种方法,可以判断是否已将NFS驱动器配置为使用该-maproot选件而不访问NFS服务器。
约翰

@John,这完全不同,您应该问一个新问题而不是添加评论。
cjm 2011年

5

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

(NFS的“最新”版本,即NFSv4或NFSv3,如果双方都支持,则行为更明智,但我不知道细节。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.