NFS 相关权限主要包括
- 服务端侧控制的文件系统读写权限和用户映射规则
- 客户端侧控制的用户ACL权限
一、NFS 服务端mount选项
#/etc/exports 设置示例 /nfs *(ro, sec=sys,fsid=0) #伪文件系统根目录 #允许主机名为host1挂载/nfs/dir0目录,有读写权限,sec=sys无安全认证;允许主机名为host2挂载/nfs/dir0目录,只读权限 /nfs/dir0 host1(rw,sec=sys) host2(ro, sec=sys) #允许主机名为host2的主机挂载/nfs/dir1,有读写权限,sec=sys无安全认证 /nfs/dir1 host2(rw, sec=sys) #允许主机名为host2的主机挂载/nfs/dir0/dir0/dir0-0,有读写权限,sec=sys无安全认证 /nfs/dir0/dir0-0 host2(rw, sec=sys) |
ro:共享文件系统只读;
rw:共享文件系统可读可写;
all_squash:所有访问用户都映射为匿名用户或用户组;
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限;
anonuid=:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);
anongid=:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);
设置sec=sys,export中设置的共享目录只认证主机名或者ip是否匹配,sec=krb5使用kerberos认证;
对于子目录下挂载的文件系统,需要在exports中设置共享,否则无法访问。对同一个文件系统,共享目录的rw,ro权限会覆盖子目录的权限,如果子目录挂载了其他文件系统并通过exports共享则不会覆盖。
nfsv4将所有共享使用一个虚拟文件系统展示给客户端,一个nfs4服务器将它所有要共享的文件系统放到一个虚拟根目录(/)下,虚拟根使用fsid=0标示,只有一个共享可以是fsid=0。客户端可以使用“nfs server ip:/”挂载根目录,挂载根目录后只能看到有挂载权限的文件系统。如果没有指定fsid=0 的伪文件系统根目录,根目录仍然存在,可以被挂载,只能看到有权限的文件系统目录,根目录为只读。
exportfs -r 重新读取/etc/exports 配置并共享目录
/etc/exports 设置示例对应目录权限,假设服务器端目录/nfs/dir0,/nfs/dir1,/nfs/dir0/dir0-0分别挂载了三个文件系统:
挂载(/)目录后host1客户端权限:
挂载(/)目录后host2客户端权限:
二、ACL权限
1.1 UGO权限
Linux对于文件权限的控制,最原始的是UGO权限,能够对文件的所有者owner,owner group,other三类用户进行读r写w执行x三种权限的设置。
UGO 示例,通过ls –l file命令查询得到的结果: drwxr-xrw-+ 2 root row 21 May 17 15:34 dir0 第一位d,表示dir0是一个目录 2-4位rw-,表示dir0的owner:root有读、写权限 5-7位rwx,表示dir0的owner group:root的所有用户有读、写、执行权限 8-10位r--,表示dir0的other用户只有读权限 第11位+,表示这个文件设置有3种基本用户外的acl属性,5-7位的权限要参考具体的acl属性描述。
通过chmod 754 aclfile可以修改文件的UGO权限 7表示U,即user,也就是owner具有rwx权限 5表示G,即group,也就是属于owner group的用户具有r-x权限 4表示O,即other,也就是其他用户(不属于前面2种情况的用户)具有r--权限 |
Unix的UGO权限将用户分为owner、owner group、other三类,将访问权限分为r、w、x、-四类,对每个文件将用户和权限进行了组合描述。
1.2 POSIX ACL
UGO权限组合局限性比较大,如果我们需要把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合,UGO组合无法做到。POSIX ACL则可以解决这样的问题:
NFSv3协议使用的是POSIX acl,客户端以NFSv3协议mount到服务器端后,如果-o参数打开了acl,则会通过NFSACL协议在客户端和服务器之间传递POSIX ACL属性信息,设置和查询命令为setfacl、getfacl。
POSIX ACL 示例,通过getfacl dir0命令查询得到如下结果 # file: dir0/ # owner: root # group: root user::rwx #owner:acl具有rwx权限 user:user1:r-- #named user:user1具有r权限 group::r-- #owner group的所有用户具有r权限 group:user1:rw- #effective:r-- group user1的所有用户具有rw权限,但是mask限制等效于只有r权限 mask::r-x #user:user1,group, group:user1最大权限为r-x other::rw- #other权限为rw- default:user::r-x #子目录继承ACE default:group::--- default:group:user1:r-x default:mask::r-x default:other::--- |
与UGO权限对比,简单归纳如下
(1) 用户分类从3类增加到5类,即owner、owner group、other和新增的named user、named group
(2) 权限仍然是四类r、w、x、-
(3) 增加了特殊的ACE——mask,对named user、group、named group这三类对象的ACE描述的权限进行与操作后,才是用户对文件的实际权限
(4) 对目录除了有存取ACE,还有默认ACE,或者叫做继承ACE,用来描述目录下新建文件/子目录的ACL属性。
POSIX ACL的ACE格式:[default]:tag type:[uid/gid]:permissions
1.2.1 Tag type:[uid/gid]
ACE类型 |
标识 |
说明 |
ACL_USER_OBJ |
user: |
文件所有者owner |
ACL_USER |
user:uid |
自定义用户,user:acl1 |
ACL_GROUP_OBJ |
group: |
文件所有者用户组owner group |
ACL_GROUP |
group:gid |
自定义用户组,group:aclg1 |
ACL_OTHER |
other: |
其他用户 |
ACL_MASK |
mask: |
自定义用户、用户组、自定义用户组的ACE最大权限 |
1.2.2 Permissions
权限类型 |
标识 |
说明 |
READ |
r |
读文件、列出目录 |
WRITE |
w |
写文件、在目录下创建文件/子目录 |
EXEC |
x |
执行文件、进入目录 |
无权限 |
- |
没有权限 |
1.2.3 Default
用于标识用于目录的继承ACE,只有目录才有这种类型的ACE
1.3 NFSv4 ACL
NFSv4协议在参考Window的ACL特性后,定义了NFSv4 ACL,扩展了权限分类、明确了允许、拒绝,增加了记录、告警,ACE组合比POSIX ACL更加精细。yum install nfs4-acl-tool可以使用nfs4_getfacl与nfs4_setfacl查询和设置ACL,但是在使用NFSv4协议时无法使用POSIX ACL。
nfs4acl 示例,通过nfs4_getfacl dir0命令查询nfs4.acl属性如下: #对应posix acl的nfs4 acl # file: dir0 A::OWNER@:rwaDxtTcCy #只有OWNER能有TC权限,且不能取消 D::user1@example.com:waD #对应禁止w A::user1@example.com:rtcy #对应允许r A::GROUP@:rtcy #对应允许r A:g:user1@example.com:rtcy #对应允许r D::GROUP@:waD #对应禁止w D:g:user1@example.com:waD #对应禁止w A::EVERYONE@:rwaDtcy #对应所有用户都有rw-权限 A:fdi:OWNER@:rxtTcCy #子目录继承ACE,相当于posix中default,对应default:user:r-x A:fdi:GROUP@:tcy #对应default:group::--- A:fdig:user1@example.com:rxtcy #对应default:group:user1:r-x A:fdi:EVERYONE@:tcy #对应default:other::--- |
与POSIX ACL相比,归纳如下
(1) 增加ACE类型,对ACE有允许A(Allow)、拒绝D(Deny)、记录U(Audit)、告警L(Alarm)
(2) 权限分类增加到17种,文件有13种(rwaxdtTnNcCoy),目录有14种(rwaxdDtTnNcCoy)
(3) 增加了ACE标志,分为3类,分组标志2个:用户组g、空白表示用户,继承类标志4个:文件继承f、目录继承d、仅添加到继承ACE中i(与f、d配合使用)、不要将ACE设置给新建子目录n,管理标志2个:成功访问S、失败访问F
(4) 增加了用户类型到12种,OWNER、GROUP、EVERYONE、named user、named group,以及INTERACTIVE、NETWORK、DIALUP、BATCH、ANONYMOUS、AUTHENTICATED、SERVICE等7种特殊的系统用户。
NFSv4 ACL的ACE格式定义::::
1.3.1 Type 类型
类型名 |
标识 |
说 明 |
ALLOW |
A |
允许:允许的ACL权限条目 |
DENY |
D |
禁止:禁止的ACL权限条目 |
AUDIT |
U |
检查:将所有需要权限的访问记录写入日志文件,需要1个或2个成功访问和失败访问标识。不是所有系统都支持该条目类型。 |
ALARM |
L |
告警:对所有需要权限的访问操作生成一个系统告警,需要1个或2个成功访问和失败访问标识。不是所有系统都支持该条目类型。 |
1.3.2 Flags 标识
标识名 |
标识 |
说 明 |
空 |
空 |
指定用户 |
ACE4_IDENTIFIER_GROUP |
g |
指定用户组 |
ACE4_FILE_INHERIT_ACE |
f |
文件继承。新创建的文件将会继承该目录的ACE,同时继承的文件会去掉遗传标志。新创建的子目录会继承父目录的ACE。 |
ACE4_DIRECTORY_INHERIT_ACE |
d |
文件夹继承。即添加到指定文件夹的ACL权限中,也指定到该目录中新建文件夹的ACL权限中,新建文件夹也会继承相应的遗传ACL条目。 |
ACE4_INHERIT_ONLY_ACE |
i |
仅添加到继承ACL权限中,不添加到指定目录的ACL权限中。即,仅添加到该目录的新建文件或目录的ACL权限中,通常与f和d配合使用。 |
ACE4_NO_PROPAGATE_INHERIT_ACE |
n |
该标识告诉服务器不要将ACE设置给新创建的目录 |
ACE4_SUCCESSFUL_ACCESS_ACE_FLAG |
S |
成功访问。如果一个访问覆盖了ACL条目中允许的权限,则触发一个告警或日志 |
ACL4_FAILED_ACCESS_ACE_FLAG |
F |
失败访问。如果一个访问覆盖了ACL条目中禁止的权限,则触发一个告警或日志 |
1.3.3 Principal/who 用户
成员名 |
标识 |
说 明 |
named user |
acl1@nfs4 |
自定义用户 |
named group |
aclg1@nfs4 |
自定义用户组 |
OWNER |
OWNER@ |
文件拥有者 |
GROUP |
GROUP@ |
和文件相关联的组 |
EVERYONE |
EVERYONE@ |
所有用户 |
INTERACTIVE |
INTERACTIVE@ |
通过交互终端访问 |
NETWORK |
NETWORK@ |
通过网络访问 |
DIALUP |
DIALUP@ |
作为服务器的拨号用户访问 |
BATCH |
BATCH@ |
通过一批工作访问 |
ANONYMOUS |
ANONYMOUS@ |
未经任何认证访问 |
AUTHENTICATED |
AUTHENTICATED@ |
任何认证用户(与ANONYMOUS相对) |
SERVICE |
SERVICE@ |
通过系统服务访问 |
1.3.4 Permissions 权限
访问权限 |
标识 |
说 明 |
READ_DATA |
r |
允许读取文件内容 |
LIST_DIRECTORY |
[r] |
允许显示目录内容,合入r权限 |
WRITE_DATA |
w |
允许修改文件内容 |
ADD_FILE |
[w] |
允许在目录中添加新文件,合入w权限 |
APPEND_DATA |
a |
允许向文件中添加内容 |
ADD_SUBDIRECTORY |
[a] |
允许在目录中添加子目录,合入a权限 |
EXECUTE |
x |
允许执行一个文件,更改目录 |
DELETE |
d |
允许删除文件/目录 |
DELETE_CHILD |
D |
允许删除一个目录中的文件或者目录,仅能指定给目录 |
READ_ATTRIBUTES |
t |
允许读取一个文件的基本属性 |
WRITE_ATTRIBUTES |
T |
允许修改基本属性 |
READ_NAMED_ATTRS |
n |
允许读取一个文件的自定义属性 |
WRITE_NAMED_ATTRS |
N |
允许写入一个文件的自定义属性 |
READ_ACL |
c |
允许读取ACL权限 |
WRITE_ACL |
C |
允许写入ACL权限 |
WRITE_OWNER |
o |
允许修改拥有者 |
SYNCHRONIZE |
y |
允许在服务器本地通过同步方式读写文件 |
nfs4 acl可以通过别名设置 ACL,分别对应R 对应 rtcy ,W 对应 watTcCy(对目录有D),X 对应 xtcy,类似与POSIX 下 rwx 权限。
别名 |
对应权限 |
R |
rtcy |
W |
watcy(若是目录则添加D) |
X |
xtcy |