Linux访问控制列表(Access Control List,简称ACL)

                                           作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.ACL概述

  ACL:Access Control List,实现灵活的权限管理
  
  除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
  
  CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
  
  CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
    tune2fs –o acl /dev/sdb1
    mount –o acl /dev/sdb1 /mnt/test
  
  ACL生效顺序:所有者,自定义用户,自定义组,其他人

二.为jason用户对某个文件设置ACL权限

[root@node101.yinzhengjie.org.cn ~]# ll /data/
total
-rw-r--r--. jason devops Sep : jason.txt
-rw-r--r--. root devops Sep : root.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:- /data/root.txt       #这里我们对jason用户设置的权限为空("-"),即无权限访问"/data/root.txt"文件。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /data/
total
-rw-r--r--. jason devops Sep : jason.txt
-rw-r--r--+ root devops Sep : root.txt                    #大家注意,该文件设置后属性后面的"."变成了"+",说明设置ACL权限啦
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt                #我们可以使用该命令查看相应的ACL设置
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: devops
user::rw-
user:jason:---    #我们发现jason用户对该文件的权限为0
group::r--
mask::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# su -l jason
Last login: Tue Sep :: PDT on pts/
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ ll /data/root.txt
-rw-r--r--+ root devops Sep : /data/root.txt
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt
cat: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ echo "尹正杰到此一游">> /data/root.txt
-bash: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$

三.为属组对某个文件设置ACL权限

[root@node101.yinzhengjie.org.cn ~]# groupadd devops
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# id jason
uid=(jason) gid=(jason) groups=(jason)
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# usermod -G devops jason          #为了测试,我们将jason用户加入devops组
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# id jason
uid=(jason) gid=(jason) groups=(jason),(devops)
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ll /data/
total
-rw-r--r--. root root Oct : root.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/
getfacl: Removing leading '/' from absolute path names
# file: data/
# owner: root
# group: root
# flags: --t
user::rwx
group::r-x
other::rwx [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# su -l jason
Last login: Wed Oct :: CST on pts/
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt
尹正杰到此一游
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt         #我们发现没有设置ACL权限无法写入数据。
-bash: /data/root.txt: Permission denied
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ exit
logout
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -m g:devops:rw /data/root.txt         #我们为devops组添加读写权限
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[jason@node101.yinzhengjie.org.cn ~]$ echo "jason到此一游" >> /data/root.txt          #再次写入数据,发现数据写入成功啦!
[jason@node101.yinzhengjie.org.cn ~]$
[jason@node101.yinzhengjie.org.cn ~]$ cat /data/root.txt
尹正杰到此一游
jason到此一游
[jason@node101.yinzhengjie.org.cn ~]$

四.将一个文件的权限复制给另一个文件权限

[root@node101.yinzhengjie.org.cn ~]# setfacl -m u:jason:rw /data/root.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# touch /data/a.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt | setfacl --set-file=- /data/a.txt      #将/data/root.txt文件权限复制给/data/a.txt文件
getfacl: Removing leading '/' from absolute path names
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#

五.清除ACL权限

1>.清除指定用户的ACL权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -x u:jason /data/a.txt         #清除jason用户的ACL权限。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#

2>.清除指定组的ACL权限

 [root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -x g:devops /data/a.txt       #仅仅清除掉devops组的ACL权限
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/a.txt
getfacl: Removing leading '/' from absolute path names
# file: data/a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

3>.清除所有ACL权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
group:devops:rw-
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt         #清除所有ACL权限
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]#

六.访问控制列表的注意事项

1>.mask只影响除所有者和other的之外的人和组的最大权限

[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -m mask::rw /data/root.txt     #mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission),用户和组的设置必须存在于mask权限设定范围内才会生效。
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
mask::rw-
other::r-- [root@node101.yinzhengjie.org.cn ~]#

2>.--set选项会把原来又的ACL选项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能像-m一样只是添加ACL就可以

[root@node101.yinzhengjie.org.cn ~]# setfacl -b /data/root.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
group::r--
other::--- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl --set u::rw,u:jason:rw,g::r,o::- /data/root.txt
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# getfacl /data/root.txt
getfacl: Removing leading '/' from absolute path names
# file: data/root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
mask::rw-
other::--- [root@node101.yinzhengjie.org.cn ~]#

3>.备份和恢复ACL(主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息)

[root@node101.yinzhengjie.org.cn ~]# getfacl -R /data/ > acl.txt        #备份某个目录的文件ACL权限
getfacl: Removing leading '/' from absolute path names
[root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# cat acl.txt                  #查看备份目录的ACL权限信息
# file: data/
# owner: root
# group: root
# flags: --t
user::rwx
group::r-x
other::rwx # file: data//root.txt
# owner: root
# group: root
user::rw-
user:jason:rw-
group::r--
mask::rw-
other::--- # file: data//a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r-- [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# setfacl -R --set-file=acl.txt /data/ #恢复指定目录的ACL权限
[root@node101.yinzhengjie.org.cn ~]#

七.小试牛刀

>.在/testdir/dir里创建新文件自动属于webs组,组apps的成员如tomcat能对这些新文件有读写权限,组dbs的成员如:mysql只能对新文件有读权限,其它用户(不属于webs,apps,dbs)不能访问这个文件夹

>.备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/test/dir中所有ACL权限,最后还原ACL权限。

Linux访问控制列表(Access Control List,简称ACL)的更多相关文章

  1. Linux 访问控制列表(access control list)

    简介 随着应用的发展,传统的linux文件系统权限控制无法适应复杂的控制需求,而ACL的出现,则是为了扩展linux的文件权限控制,以实现更为复杂的权限控制需求.其可以针对任意的用户和用户组进行权限分 ...

  2. 【windows 访问控制】七、window 访问控制编辑器(Access Control Editor)

    window 访问控制编辑器(Access Control Editor) 右键(文件.目录.程序)>选择属性>安全>高级   进入访问控制编辑器

  3. linux访问控制列表 ACL实现文件权限设置

    ACL:Access Control List,实现灵活的文件权限管理 除了文件的所有者,所属组和其它人,可以对更多的用户设置权限 CentOS7 默认创建的xfs和ext4文件系统具有ACL功能 A ...

  4. Linux访问控制列表

    首先我们来了解下权限,在Linux里常规的权限有r(读)w(写)x(执行),特殊权限有SUID,SGID,Sticky权限,分别作用在文件(或目录)的所有者,所属组和其他(既不是所有者,也不是所属组的 ...

  5. RBAC: 基于角色的访问控制(Role-Based Access Control)

    本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问 ...

  6. Windows Azure Virtual Network (10) 使用Azure Access Control List(ACL)设置客户端访问权限

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的China Azure. 我们在创建完Windows Azure Virtual Machi ...

  7. 浅谈访问控制列表(ACL)

    1.ACL简介2.前期准备3.ACL的基本操作:添加和修改4.ACL的其他功能:删除和覆盖5.目录的默认ACL6.备份和恢复ACL7.结束语 1.ACL简介 用户权限管理始终是Linux系统管理中最重 ...

  8. Linux 系统访问控制列表ACL

    常见的文件系统的一般权限(rwx).特殊权限(SUID,SGID,STICK).隐藏权限(chattr)其实有个共性——权限是针对某一类用户设置的.而如果希望对某个指定的用户进行单独的权限控制,那么就 ...

  9. Phalcon 訪问控制列表 ACL(Access Control Lists ACL)

    Phalcon在权限方面通过 Phalcon\Acl 提供了一个轻量级的 ACL(訪问控制列表). Access Control Lists (ACL) 同意系统对用户的訪问权限进行控制,比方同意訪问 ...

随机推荐

  1. Docker使用 - 容器

    查看容器 命令:docker  ps  [options] options有: -a:查看所有容器,包含不在运行中的(不带-a参数,是只显示运行中的容器) -q:只显示容器ID -s:多加一列来显示总 ...

  2. javafx这些学会后,开发就不难了,往tablecloumn列中添加按钮,修改javafx中tableview中tablecell中的值,修改完回车表示保存到内存中

    javafx开发过程中遇见难题,往tablecloumn列中添加按钮 想了很久的方法,也配有办法判断每行中有数据的地方添加按钮set bank_caozuo.setCellFactory((col)- ...

  3. 使用Javascript从Google Places搜索api获取纬度和经度

    如何使用谷歌地图搜索框api从搜索到的位置获取经度和纬度. 我使用与谷歌演示相同的代码 – https://developers.google.com/maps/documentation/javas ...

  4. nexus 3.x最新版下载安装和上传下载jar

    注意: nexus 3.x最新版好像不用下载索引了,目前我使用一些基本功能没有索引也能耍的很6 下载 nexus最新版下载https://www.sonatype.com/download-oss-s ...

  5. windows mysql手动添加my.ini 服务启动不了

    [mysqld] character-set-server=utf8 #绑定IPv4和3306端口 bind-address=0.0.0.0 port= default_storage_engine= ...

  6. Hadoop window win10 基础环境搭建(2.8.1)(转)

    下面运行步骤除了配置文件有部分改动,其他都是参照hadoop下载解压的share/doc/index.html. hadoop下载:http://apache.opencas.org/hadoop/c ...

  7. (CSDN 迁移) JAVA多线程实现-可回收缓存线程池(newCachedThreadPool)

    在前两篇博客中介绍了单线程化线程池(newSingleThreadExecutor).可控最大并发数线程池(newFixedThreadPool).下面介绍的是第三种newCachedThreadPo ...

  8. 接口和抽象类的区别,注意JDK8的接口可以有实现。

    Java中,抽象类和接口有相似的地方.下面我们就来细说说接口和抽象类的异同. 首先是相同的地方: 1. 接口和抽象类都能定义方法和属性. 2. 接口和抽象类都是看作是一种特殊的类.大部分的时候,定义的 ...

  9. react中的ref在input中的详解

    当我们在项目中遇见文本输入框的时候,获取时刻输入框中的值 1.受控组件 class NameForm extends React.Component { constructor(props) { su ...

  10. Go基础编程实践(三)—— 日期和时间

    日期和时间 package main import ( "fmt" "time" ) func main() { // 获取当前时间 current := ti ...