IT星球论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 191|回复: 0

NFS服务器uid/gid照射

[复制链接]

2004

主题

1

好友

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

优秀会员 助人为乐 辛勤工作 技术精英 多才多艺 优秀班竹 灌水天才 星球管理 宣传大使 灌水之王 财富勋章 版主勋章 动漫勋章 勤奋会员 论坛精英 PS高手 心 8 闪游皮肤 双鱼座 8★8➹ 志愿者 乖

发表于 2016-2-23 13:40:14 |显示全部楼层
NFS服务器uid/gid照射
NFS服务器uid/gid映射
    NFS服务器uid/gid映射
案例说明
云计算环境中,每个虚拟机中的相同用户账号,可能分配的uid/gid都是不同的。如果这些虚拟机想通过一个共享的存储,例如NAS来交换文件,就会遇到一个问题:NFS协议是通过uid来控制文件读写权限的,如果每个vm中用户写入的文件uid和IT论坛vm不同,就无法被IT论坛vm中的应用进程读取或修改。

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

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

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

服务器端必须是user-mode NFS
配置文件需要针对每个客户端来分开设置(这点对于海量NFS客户端不现实) - 原文测试使用同一个map_static文件针对多个客户端则只有一个客户端生效
如果使用user-mode NFS服务器,可以简单如下设置客户端uid 501 和 502 都映射成NFS服务器上的uid 500

设置NFS服务器的 /etc/exports

/somedir 10.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 文件如下:

# remote local
uid 501 500
uid 502 500
设置NFS服务器 /etc/nfs.map.mac 文件如下:

# remote local
gid 501 500
gid 502 500
总之,这个方案在现有Linux环境下不容易实施部署。

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

/home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
Note GlusterFS也有类似NFS的anonuid和anongid参数功能,这个功能是 Bug 1043886 - [RFE] Add two more options in ‘gluster volume set’ command server.anonuid and server.anongid 2013年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
chmod 777 /uidtest
NFS服务器启动nfs服务:

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

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

mount -t nfs 192.168.1.1:/uidtest
此时在NFS客户端test1和test2上看到挂载的NFS服务器输出如下:

192.168.1.1:/uidtest
                    47G  3.0G   42G   7% /uidtest
并且可以看到挂载目录的属性是777,而属主是500:

drwxrwxrwx   5  500  500 4.0K Apr 12 22:21 uidtest
Note NFS服务器端的admin账号的uid/gid是500,这个属主属性表现在所有NFS客户端。
此时不管是test1主机还是test2主机都可以读写挂载的 /uidtest 目录,但是,所有写入到NFS服务器输出卷中的文件,不管是test1还是test2,看到的文件的属主都是500,而不是客户端admin用户作为属主。特别巧妙的是,即使不是admin用户的文件,也可以读写:

-rw-r--r-- 1 500 500   41 Apr 12 22:40 test.txt
drwxr-xr-x 3 500 500 4.0K Apr 12 22:18 test1
drwxr-xr-x 2 500 500 4.0K Apr 12 22:21 test3
Netapp Data ONTAP的anon设置 [3]
NetApp存储操作系统Data ONTAP

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

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

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

用户账号
用户组或者网络组
客户端协议
客户端IP地址
文件类型
在NFS中的文件访问支持类似前述的 anonuid 设置,称为 anon 参数:

> anon=<uid>|<name> Specifies the effective user ID (or name) of all anonymous or root NFS client users that Access the file system path.
NFS服务器uid/gid照射
http://www.myexception.cn/operating-system/1656865.html

该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

回顶部