NFS网络挂载:设置所有者为特定账户

9

好的,我对这些东西感到非常困惑,因此真正详细的答案将不胜感激,尤其是如果它们能使整个安装过程变得不那么神秘,更加可预测。

我正在尝试使用nfs将我的Drobo-FS NAS挂载,以获得比cifs更好的性能。

Drobo正在运行一些简化版的Linux发行版。

在客户机(IP:192.168.1.150的Ubuntu)的/etc/fstab中:

# Mount Drobo
192.168.1.100:/mnt/DroboFS/Shares/public /media/drobonfs nfs rw,soft,proto=tcp,users 0 0

我在Drobo上安装了unfsd,并通过ssh进行访问。下面是服务器机器(IP为192.168.1.100的Drobo-FS)上的exports文件:

# Allow access for client machine
/mnt/DroboFS/Shares 192.168.1.150(rw,no_root_squash)

安装工作正常,但是挂载的文件都由root用户拥有,大部分文件权限设置为744。在客户端上挂载时显示的文件权限与服务器上实际权限相匹配。例如:
client$ sudo chmod 123 /media/drobonfs/somefile
client$ ls -l /media/drobonfs/somefile
---x-w--wx 1 root root 0 2012-01-04 14:15 /media/drobonfs/somefile

drobo$ ls -l /mnt/DroboFS/Shares/public/somefile
---x-w--wx    1 root     root            0 Jan  4 14:15 /mnt/DroboFS/Shares/public/somefile

在每个命令前面写sudo很麻烦,我想了解发生了什么,那么我该怎么做才能将其挂载到客户端机器上,并将所有者/组设置为我的帐户而不是root?

3个回答

8

当共享挂载时,主机系统的用户ID(UID)会映射到客户端的用户ID(UID)。

在客户端上,基于用户ID的映射用户将成为挂载共享的所有者。

您的问题是因为主机使用的UID与客户端不同。

您可以通过定义一个 /etc/nfs.map 文件来解决此问题:

/etc/nfs.map

该文件看起来像:

# remote local gid 500 1000 # drobo client uid 500 2003 # drobo client

因此,在使用NFS时,您需要确保主机和客户端用户之间存在UID/GID匹配。 还请阅读以下文章:http://www.kernelcrash.com/blog/nfs-uidgid-mapping/2007/09/10/

另一种解决此问题的好方法是查看主机和客户端系统上的UID,方法是查看两个系统上的 /etc/passwd 文件。

或者通过输入以下内容:

id tom

使用以下方法更改UID:

usermod -u 10000 tom

Good luck!


1
在默认安装了nfs-server的CentOS 7 x86_64上,无法识别用于设置nfs.map的map_static。出现了“unknown keyword 'map_static=/etc/nfs.map'”错误。 - Nick Dong
将UID/GID更改为让服务器和客户端具有相同的UID/GID号码对我很有效。Linux更改用户的UID和GID - Nick Dong

2

看起来这应该适用于Drobo上的导出:

/mnt/DroboFS/Shares 192.168.1.150(rw,all_squash,anonuid=NNN)

其中NNN是客户端的数字用户ID。


1
很遗憾,这并没有起作用。它仍然被挂载,但所有者/组仍然设置为root。 - Matthew

-1

/etc/exports 更改为:

/mnt/DroboFS/Shares 192.168.1.150(rw,insecure)

然后,在NFS服务器上运行:

$ sudo exportfs -a

现在,当您将目录作为非root用户挂载到NFS客户端时,它将以适当的所有者和组挂载。

1
为什么这里应该使用选项insecure呢? - some-non-descript-user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接