TrueNas Scale应用备忘三:ACL权限

在设计SMB共享时,遇到一些问题,需要用ACL来做组合的权限分配。下面就ACL的相关基础知识做备忘【以下文字来自网络】

01.ACL权限

1.什么是NFS ACL

在存储领域的理解,ACL是文件访问控制列表Access Control List的缩写,为了控制特定用户/用户组对特定文件对象的访问权限而定义的条目的集合。

UGO权限

Linux对于文件权限的控制,最原始的是UGO权限(在nfs3.acl中描述为File mode,在nfs4.acl中描述为FATTR4_MODE),能够对文件的所有者owner,owner group,other三类用户进行读r写w执行x三种权限的设置。

通过 ls 令查询得到的结果:

[root@gp-mdw ~]# ls -la all_host 
-rw-r--r--. 1 root root 42 Sep 28 11:26 all_host
[root@gp-mdw ~]#

1位-,表示aclfile是一个普通文件
2-4位rw-,表示aclfile的owner:acl有读、写权限
5-7位rwx,表示aclfile的owner group:aclg的所有用户有读、写、执行权限
8-10位r–,表示aclfile的other用户只有读权限
第11位+,表示这个文件设置有3种基本用户外的acl属性,5-7位的权限要参考具体的acl属性描述。

通过chmod 可以修改文件的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、-四类,对每个文件将用户和权限进行了组合描述,是文件的一种属性,就像文件的大小,名称,类型,创建时间等属性一样。

ACL

ACL是Access Control List(访问控制列表)的缩写。

在TrueNAS中有两种ACL模式:NFSv4 ACL 和 POSIX ACL。

用户通过共享文件系统在多个用户和群组之间共享文件时,权限的控制和管理成为了不可缺少的功能。
针对不同目录或文件,文件系统管理员需要给不同的用户和群组设置相应的权限,实现访问隔离。
针对这个需求,TrueNAS SCALE 支持NFS ACL功能,ACL是与文件或目录关联的权限列表,由一个或多个访问控制项(ACE)组成。

POSIX ACL

POSIX ACL 是 NFS v3 协议能够扩展支持的权限控制协议。POSIX ACL对mode权限控制进行了扩展,能够对owner、group、other以外的特定用户和群组设置权限,也支持权限继承。
NFS v4 ACL 是 NFS v4 协议能够扩展支持的权限控制协议,提供比POSIX ACL更细粒度的权限控制。
您可以使用 NFS v3 协议挂载含有 NFS v4 ACL 的文件系统,挂载后 NFS v4 ACL 会被转化为POSIX ACL。
您也可以用 NFS v4 协议挂载含有 POSIX ACL 的文件系统,挂载后POSIX ACL会被转化为NFS v4 ACL。但由于NFS v4 ACL和POSIX ACL并不完全兼容,加上mode和ACL之间的互操作也无法尽善尽美,另外NAS NFS v3挂载不支持锁,所以建议您在使用NFS v4 ACL功能时尽量只使用NFS v4协议挂载并设置NFS v4 ACL,不使用mode和POSIX ACL。

POSIX ACL
随着应用的发展,UGO权限组合已不能适应现时复杂的文件系统权限控制要求。
例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了。

为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。

通过getfacl 命令查询得到如下结果

[root@gp-mdw ~]# getfacl all_host 
# file: all_host
# owner: root
# group: root
user::rw-               # owner:acl具有读、写权限
group::r--              # owner group:aclg的所有用户具有读权限
other::r--              # other其他用户只有读权限

[root@gp-mdw ~]# 

上面每一行描述称为一个ACE。

通过getfacl 命令查询目录的acl属性

[root@gp-mdw ~]# getfacl /opt/greenplum
# file: aclfolder
# owner: acl
# group: aclg
user::rwx
group::r-x
other::r-x
default:user::rwx           #继承ACE
default:user:acl1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

与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属性。

客户端以NFSv3协议mount到服务器端后,如果-o参数打开了acl,则会通过NFSACL协议在客户端和服务器之间传递POSIX ACL属性信息,设置和查询命令为setfacl、getfacl。

NFSv4 ACL

NFSv4协议在参考Window的ACL特性后,定义了NFSv4 ACL,扩展了权限分类、明确了允许、拒绝,增加了记录、告警,ACE组合比POSIX ACL更加精细,同时也更复杂。

通过nfs4_getfacl aclfile命令查询nfs4.acl属性如下:

A::OWNER@:rwatTnNcCoy #允许用户OWNER有读、写、追加写等权限
A::acl1@localdomain:rwaxtTnNcy #允许用户acl1有读、写追加写等权限
A::GROUP@:rtncy #允许GROUP组的用户有读、读属性、读自定义属性等权限
A::EVERYONE@:rtncy #允许其他用户有读、读属性、读自定义属性、读ACL权限

与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种特殊的系统用户。

2.通过控制台配置NFS ACL功能

https://www.truenasscale.com/2021/12/26/411.html

2.1.添加数据集

添加数据集,默认配置 POSIX ACL

2.2.修改或添加配置为 NFSv4 ACL
step 1.“查看默认权限”
step 2.“编辑权限”

“高级选项”

ACL Types & ACL Modes
对ACL类型的更改会影响写入和读取磁盘上ZFS ACL的方式。
当ACL类型从POSIX更改为NFSv4时,不会将默认ACL和在posix1e acl扩展属性中编码的访问ACL迁移到本机ZFS ACL。
当ACL类型从NFSv4更改为POSIX时,本机ZFS ACL不会转换为posix1e扩展属性,但本机ACL将由ZFS在内部用于访问检查。 这意味着用户必须在ACL类型更改后的数据集,以避免意外的权限行为。 此操作将具有破坏性,因此建议在ACL类型更改和权限修改之前对数据集进行 ZFS 快照。

修改 ACL 为 NFSv4

2.3.编辑 ACL 权限
step 1.“编辑权限”
step 2.“设置 ACL”
step 3.进入选择ACL的配置规则
step 4.查看ACL 默认的配置
step 5.点击“使用ACL预设”
可以使用预设的ACL 规则
step 6.“添加项目”

权限类型有基本和高级

基本
读取:只允许用户读取(可进入文件夹,即文件夹的执行权)
调整:允许用户读,写,执行,修改
遍历:只允许查看(无法进入文件夹)
完全控制:有所有的权限(包括修改权限)

高级
读取数据:只能读
写数据:不可读,不存在则创建;存在则清空内容
追加数据:可读; 不存在则创建;存在则只追加内容
读取命名属性:未知
写入命名属性:未知
执行:执行权,体现在文件夹上是可进入文件夹
删除子项:可删除子文件或文件夹
读取属性:读取属性,允许此访问掩码位
写属性:写入属性
删除:删除文件或文件夹,重命名文件或文件夹
读取ACL:读取文件的权限
写入ACL:写入文件夹权限
写所有者:更改文件的属主或组的权限
同步:占位符。当前未实现。

未经允许不得转载:生于七零年代 » TrueNas Scale应用备忘三:ACL权限

赞 (0) 打赏

评论

1+5=

觉得文章有用就打赏一下文章作者

微信扫一扫打赏