NFS服务器uid/gid映射

NFS服务器uid/gid映射

案例说明

在云计算环境中,每个虚拟机中的相同用户账号,可能分配的uid/gid都是不同的。如果这些虚拟机想通过一个共享的存储,例如NAS来交换文件,就会遇到一个问题:NFS协议是通过uid来控制文件读写权限的,如果每个vm中用户写入的文件uid和其他vm不同,就无法被其他vm中的应用进程读取或修改。

所以就产生了本文说描述的解决方案,将不同的uid/gid映射成NAS上相同的uid/gid,以提供文件交换功能。

user-modeNFS服务器的uid/gid映射

user-modeNFS服务器支持特别的uid/gid重映射功能,可以将客户端访问不同的uid/gid映射成相同的服务器上的uid/gid,这样在一些特殊的应用场景中,可以实现文件交换。但是,很不幸,现在主要的发行版本使用的是基于内核的NFS服务器,不包含这个uid/gid重映射功能。[1]

我没有实际测试,根据参考文档,主要有两个要求:

服务器端必须是user-modeNFS

配置文件需要针对每个客户端来分开设置(这点对于海量NFS客户端不现实)-原文测试使用同一个map_static文件针对多个客户端则只有一个客户端生效

如果使用user-modeNFS服务器,可以简单如下设置客户端uid501和502都映射成NFS服务器上的uid500

设置NFS服务器的/etc/exports

/somedir10.1.2.1(rw,insecure,map_static=/etc/nfs.map.linux)10.1.2.2(rw,insecure,map_static=/etc/nfs.map.mac)

设置NFS服务器/etc/nfs.map.linux文件如下:

#remotelocal

uid501500

uid502500

设置NFS服务器/etc/nfs.map.mac文件如下:

#remotelocal

gid501500

gid502500

总之,这个方案在现有Linux环境下不容易实施部署。

NFS服务器的anonuid和anongid映射

NFS输出参数anonuid和anongid[2]

anonid和anongid参数是用于设置匿名账号访问的uid和gid。这个参数主要用于PC/NFS客户端,此时,可能希望所有请求都表现为从一个用户访问的。例如,以下配置所有请求都并映射为uid150,也就是用户joe:

/home/joepc001(rw,all_squash,anonuid=150,anongid=100)

NoteGlusterFS也有类似NFS的anonuid和anongid参数功能,这个功能是Bug1043886-[RFE]Addtwomoreoptionsin‘glustervolumeset’commandserver.anonuidandserver.anongid2013年12月17日提出的功能需求,将anonymous用户的uid和gid映射成一个常规的用户uid和gid。并且已经进入master分支功能。(也许3.5.x版本应该具备)

测试NFS服务器的anonuid/anongid

NFS服务器上配置/etc/exports内容如下:

/uidtest*(rw,all_squash,anonuid=500,anongid=500)

NFS服务器上创建/uidtest目录,并设置为777属性(客户端挂载以后会继承NFS服务器的目录权限):

mkdir/uidtest

chmod777/uidtest

NFS服务器启动nfs服务:

/etc/init.d/nfsstart

NFS客户端使用了两个客户机test1和test2测试,其中test1服务器上admin用户的uid/gid是501,而test2服务器上admin用户的uid/gid是502

NFS客户端挂载NFS服务器的输出目录:

mount-tnfs192.168.1.1:/uidtest

此时在NFS客户端test1和test2上看到挂载的NFS服务器输出如下:

192.168.1.1:/uidtest

47G3.0G42G7%/uidtest

并且可以看到挂载目录的属性是777,而属主是500:

drwxrwxrwx55005004.0KApr1222:21uidtest

NoteNFS服务器端的admin账号的uid/gid是500,这个属主属性表现在所有NFS客户端。

此时不管是test1主机还是test2主机都可以读写挂载的/uidtest目录,但是,所有写入到NFS服务器输出卷中的文件,不管是test1还是test2,看到的文件的属主都是500,而不是客户端admin用户作为属主。特别巧妙的是,即使不是admin用户的文件,也可以读写:

-rw-r--r--150050041Apr1222:40test.txt

drwxr-xr-x35005004.0KApr1222:18test1

drwxr-xr-x25005004.0KApr1222:21test3

NetAppDataONTAP的anon设置[3]

NetApp存储操作系统DataONTAP

DataONTAP是著名的NAS供应商NetApp的存储设备filer的核心操作系统,实现了专有的称为WAFL文件系统,支持NFS,CIFS的文件网络共享。[4]

NetApp存储的DataONTAP系统通过文件管理来支持以下访问协议:

NFS

CIFS

FTP

HTTP

每个协议对于文件访问的控制采用不同的方式,这样用户访问文件时,DataONTAP使用许可列表来确定是否允许访问。使用的机制包括:

用户账号

用户组或者网络组

客户端协议

客户端IP地址

文件类型

在NFS中的文件访问支持类似前述的anonuid设置,称为anon参数:

>anon=<uid>|<name>SpecifiestheeffectiveuserID(orname)ofallanonymousorrootNFSclientusersthataccessthefilesystempath.

相关推荐