访问控制列表ACL使用说明

一、什么是ACL

ACL(Access Control List)可灵活地,更细粒度地定义访问文件或目录的权限。

二、为什么使用ACL

Linux上文件系统的文件系统权限管理的对象分为三类:owner,group,other。这种分类非常简单,如果我希望有一个用户拥有不同于这三类对象的权限,或者再定义一个用户组的权限,传统的权限管理就不能实现,而ACL可以很好的解决这个问题。

三、ACL条目

 一系列ACL条目构成了ACL。条目应包含标签类型(tag type),可选择的标签修饰定语,以及权限设定。

其中标签类型分为:

 1.acl_user_obj:  文件的属主

 2.acl_user:     自定义用户

 3.acl_group_obj:  文件的所属组

 4.acl_group:    自定义用户组

 5.acl_mask:    规定了acl_user,acl_group_obj,acl_group可被授予的最大权限

 6.acl_other:    不在acl里定义的其他用户

[root@centos7 data]# getfacl f1
# file: f1
# owner: root
# group: mysql
user::rwx                #acl_user_obj
user:cutemsyu:rw-        #acl_user               
group::r-x               #acl_group_obj          #effective:r--
group:cutemsyu:rw-       #acl_group
group:fly:r--            #acl_group
mask::rw-                #acl_mask
other::---               #acl_other

 tag type 可简写,如u表示user,g表示group。

四、ACL设置和查看方法

 setfacl :设置    getfacl :查看

 格式:setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file …

     getfacl [-aceEsRLPtpndvh] file …

 1、直接设置模式:

 -m :修改权限

 -x :移除权限

 –set:设置权限,取代原来的acl权限设置,必需包含u,g,o的tag type

 例如,修改权限并查看

[root@centos7 testdir]# setfacl -m u:cutemsyu:r,g:cutemsyu:r example
[root@centos7 testdir]# getfacl example
# file: example
# owner: root
# group: root
user::rw-
user:cutemsyu:r--
group::r--
group:cutemsyu:r--
mask::r--
other::r--

 移除权限并查看

[root@centos7 testdir]# setfacl -x g:cutemsyu example
[root@centos7 testdir]# getfacl example 
# file: example
# owner: root
# group: root
user::rw-
user:cutemsyu:r--
group::r--
mask::r--
other::r--

 2、通过文件设置

 ACL支持读取文件来设置权限

 -M:修改权限

 -X:移除权限

 这里我给出一个文本acl_file,

[root@centos7 testdir]# cat acl_file 
u:cutemsyu:rw         #一行只能写一个条目
u:fly:rw
g:cutemsyu:r

 修改权限并查看

[root@centos7 testdir]# touch example2
[root@centos7 testdir]# setfacl -M acl_file example2
[root@centos7 testdir]# getfacl example2
# file: example2
# owner: root
# group: root
user::rw-
user:cutemsyu:rw-
user:fly:rw-
group::r--
group:cutemsyu:r--
mask::rw-
other::r--

 再创建一个文本用来移除权限

[root@centos7 testdir]# cat acl_file_remove 
u:cutemsyu
u:fly
g:cutemsyu

 移除权限并查看

[root@centos7 testdir]# setfacl -X acl_file_remove example2
[root@centos7 testdir]# getfacl example2
# file: example2
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

 3、为目录设置ACL

 为目录设置ACL,设置方法相同,可用-R进行递归

 另外目录的ACL可加默认权限,不作用于目录本身,表示再此目录下新建的文件或目录继承默认权限

 例如:

[root@centos7 testdir]# setfacl -m o::-,u:fly:rwx,d:u:fly:rwx test/   #d:表示默认权限
[root@centos7 testdir]# getfacl test/
# file: test/
# owner: root
# group: root
user::rwx
user:fly:rwx
group::r-x
mask::rwx
other::---
default:user::rwx                   #未定义的默认tag type会跟随目录相应权限
default:user:fly:rwx
default:group::r-x
default:mask::rwx
default:other::---

 在此目录下新建目录和文件,查看ACL

[root@centos7 test]# mkdir dir1;touch file1;
[root@centos7 test]# getfacl dir1 file1 
# file: dir1
# owner: root
# group: root
user::rwx
user:fly:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:fly:rwx
default:group::r-x
default:mask::rwx
default:other::---

# file: file1
# owner: root
# group: root
user::rw-
user:fly:rwx			#effective:rw-
group::r-x			#effective:r--
mask::rw-           #文件mask不继承x权限
other::---

 4、复制一个文件的ACL

 setfacl 支持管道输入 –set-file=-

getfacl file1|setfacl --set-file=- example      #复制file1权限到example

 5、备份和恢复ACL

 mv和cp备份文件时都会保留ACL信息,cp指令需加-p选项

 但是tar等工具工具备份文件时不会保留ACL信息,这时需要我们备份ACL信息

getfacl -R /testdir/data  >acl.bak         #递归备份ACL信息
setfacl -R --set-file=acl.bak /testdir/data        #递归恢复ACL信息

 6、清除ACL

setfacl -k dir       #清除默认acl设置
setfacl -b file      #清除所有acl设置

五、ACL和文件权限位的关系

 设置ACL的文件或目录,ls -l 查看权限位最后的 "."会变成"+"

drwxrwx---+ 2 root root 6 Aug  6 10:32 dir1

 owner位与ACL中acl_user_obj 对应

 group位与ACL中acl_mask对应

 other位与ACL中acl_other对应

六、ACL权限允许访问逻辑

 当一个线程访问一个被ACL保护的文件时,其获权逻辑如下:

 1.当线程的有效用户ID与文件owner相匹配时,如果owner拥有相应权限,则允许访问,否则拒绝。

 2.当线程的有效用户ID与acl_user相匹配时,如果mask和acl_user都具有相应权限则允许访问,否则拒绝。

 3.当线程的有效组ID或者补充组ID与文件所属组或任意acl_group相匹配时,

  (1)当ACL含有mask条目时

     如果mask和任何匹配的组拥有相应权限,则允许访问,否则拒绝

  (2)当ACL不含有mask条目时

     如果文件所属组拥有相应权限,则允许访问,否则拒绝

 4.如果acl_other拥有相应权限,则允许访问

 5.其他则拒绝

原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/29774

(0)
cutemsyucutemsyu
上一篇 2016-08-08 16:16
下一篇 2016-08-08 16:16

相关推荐

  • 与正则表达式的第一次亲密接触

    Linux文本处理三剑客 grep:文本过滤(模式:psttern)工具 grep,egrep,fgrep (不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器 下面就先谈一谈:grep及正则表达式;egrep及扩展的正则表达式 grep grep:Goobal search REgu…

    Linux干货 2017-04-06
  • 软件编译安装小结

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1439073     本文主要针对 configure 和 cmake 做一个介绍以及我们重新配置编译参数文件时,都需要做哪些清…

    Linux干货 2016-08-15
  • ThridWeek_FirstDay

    python学习笔记整理

    Linux干货 2017-10-09
  • $@与$*的不同之处

    $@与$*的不同之处 $*: 把我们传递给脚本的参数全部合为一个字节,当成一个字符串或者参数来使用。 $@: 把我们传递给脚本的所有参数,每个参数都为独立字符串,当我们用 \((n) 来调用的时候, 输入参数的位置为第几个,那我们就用用\)n来调用第几个,一对应。 下面我们用代码来看一下这两个的区别: 创建一个简单的脚本让他输出我们输入的多个参数:&#822…

    2017-06-06
  • 马哥教育-第二周作业

    问题一:文件管理类命令 常规命令:mkdir、rmdir、stat、touch、copy、mv、rm (1).mkdir  创建目录: 注意:路径基名方为命令的作用对象;基名之前的路径必须得存在; -p:自动按需创建父目录; -v:显示创建过程; -m 参数:直接给定所需权限; 例子:问题:创建 /tmp/x ; /tmp/x/y1 ; /tmp/…

    Linux干货 2016-12-11
  • LVS集群讲解

    目录 LVS介绍 LVS集群类型 LVS调度算法 ipvsadm/ipvs LVS-NAT模型演练 LVS-DR模型演练 LVS定义多集群 FWM实现多集群统一调度 LVS持久连接  每端口持久 每FWM持久 每客户端持久 LVS介绍 一般来说,LVS采用三层结构:负载调度器、服务器池、共享存储。工作在TCP/IP协议的四层,其转发是依赖于四层协议…

    Linux干货 2016-11-07