linux 中ACL权限

ACL即Access Control List 主要的目的是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。如,某一个文件,不让单一的某个用户访问。

ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL,请参考文档。场景:Tom,Jerry两个用户,Tom在一个公共目录创建一个文件,只希望Jerry也可以访问,并能够编辑修改保存。用户之间文件共享。

一般我们会用这两个命令:

    getfacl:取得某个文件/目录的ACL设置项目

    setfacl:设置某个文件/目录的ACL设置项目
setfacl 参数

  -m:设置后续acl参数 

  -x:删除后续acl参数  

  -b:删除全部的acl参数

  -k:删除默认的acl参数

  -R:递归设置acl,包括子目录

  -d:设置默认acl

1.1首先我们创建一个test文件,先看一下没有设置setfacl之前

 [root@localhost /]# ll test
-rwxrwxrwx. 1 root root 0 Aug  1 08:02 test
[root@localhost /]# getfacl test
# file: test
# owner: root
# group: root
user::rwx
group::rwx
other::rwx   //其它用户为可读可写可执行

1.2 下面我们为user1用户设置ACL策略,使用用户user1设置为只读。

[root@localhost /]# ll /test
-rwxrwxrwx+ 1 root root 0 Aug  1 08:02 /test //这里可以看到“+”号设置了acl

这里我们看到了user1设置了只读权限

[root@localhost /]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
user:user1:r--       //定义了ACL_USE,user1设置了只读权限
group::rwx
mask::rwx
other::rwx

注:user1的权限并不是只根据ACL配置来决定的,它是由user1用户基本权限与配置的ACL权限的“与”运算决定的,即other:rwx 与 user1:r--  = user1:r--

1.3  现在我们测试文件是否可以写入,我们切换成user1想编辑插入数据发现只可以读

-- INSERT -- W10: Warning: Changing a readonly file
"test" [readonly] 1L, 15C

这里说明我们设置setfacl权限可以了!

1.4 除了对单个用户进行设置外,还可以对用户组、有效权限(mask)进行设置如对用户组设置:    g:[用户组]:[rwx] 

      注:有效权限(mask) 即用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效

1.5 现在我们来看一下ACL_MASK 怎么设置

a.我们首先先给用户user1设置ACL为rwx可读可写可执行

[root@localhost ~]# setfacl -m  u:user1:rwx /test
[root@localhost ~]# getfacl
Usage: getfacl [-aceEsRLPtpndvh] file ...
Try `getfacl --help' for more information.
[root@localhost ~]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
user:user1:rwx     //可以看到这里是可读可写可执行
group::rwx
mask::rwx
other::rwx

b.那我们为这个文件设置mask为只读,

[root@localhost ~]# setfacl -m  mask::r-- /test
[root@localhost ~]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
user:user1:rwx			#effective:r--
group::rwx			#effective:r--
mask::r--
other::rwx

这时候我们可以看到ACL_USER和ACL_GROUP_OBJ旁边多了个#effective:r--,这是什么意思呢?
让我们再来回顾一下ACL_MASK的定义。它规定了ACL_USER,ACL_GROUP_OBJ和ACL_GROUP的最大权限。
那么在我们这个例子中他们的最大权限也就是read only。
虽然我们这里给ACL_USER和ACL_GROUP_OBJ设置了其他权限,但是他们真正有效果的只有read权限。

c. 现在我们测试一下user1是什么权限呢,我们明明设置了rwx权限,发现只有只读权限,这就是ACL_MASK作用!

[user1@localhost /]$ echo "1111" > test
bash: test: Permission denied

"test" [readonly] 1L, 15C

d.这时候我们可以看到ACL_USER和ACL_GROUP_OBJ旁边多了个#effective:r--,这是什么意思呢?让我们再来回顾一下ACL_MASK的定义。它规定了ACL_USERACL_GROUP_OBJACL_GROUP的最大权限。那么在我们这个例子中他们的最大权限也就是read only。虽然我们这里给ACL_USERACL_GROUP_OBJ设置了其他权限,但是他们真正有效果的只有read权限。

1.7 我们看一下怎么取消设置的ACL

[root@localhost ~]# setfacl -x u:user1 /test
[root@localhost ~]# getfacl /test
getfacl: Removing leading '/' from absolute path names
# file: test
# owner: root
# group: root
user::rwx
group::rwx
mask::rwx
other::rwx

1.8需要注意的几点

如果你的文件系统不支持ACL的话,你也许需要重新mount你的file system:

mount -o remount, acl [mount point]

如果用chmod命令改变Linux file permission的时候相应的ACL值也会改变,反之改变ACL的值,相应的file permission也会改变。

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/81285137