Linux命令之:setfacl和getfacl

命令总结之:setfacl和getfacl

acl:access control list,实现灵活的权限管理

除了文件的所有者,所属组合其他人,可以对更多的用户设置权限

acl生效顺序:所有者、自定义用户、自定义组、其他人

1、首先我们查看man帮助文档说明

[root@centos7 sixijie]# man setfacl

根据man文档节选出来几个我们会经常用到的功能和选项加以说明:

    setfacl - set file access control lists

    The --set and --set-file options set the ACL of a file or a directory. The previous ACL is replaced.   ACL  entries
    for this operation must include permissions

    The -m (--modify) and -M (--modify-file) options modify the ACL of a file or directory.  ACL entries for this oper‐
    ation must include permissions.

    The -x (--remove) and -X (--remove-file) options remove ACL entries. It is not an error to remove  an  entry  which
    does  not  exist.   Only  ACL entries without the perms field are accepted as parameters, unless POSIXLY_CORRECT is
    defined.

    -b, --remove-all
       Remove all extended ACL entries. The base ACL entries of the owner, group and others are retained.

    -k, --remove-default
       Remove the Default ACL. If no Default ACL exists, no warnings are issued.

    -R, --recursive
       Apply operations to all files and directories recursively. This option cannot be mixed with `--restore'.

    -   If the file name parameter is a single dash, setfacl reads a list of files from standard input.

2、-m和-x选项分别为modify(设定)和remove(移除)acl权限

[root@centos7 sixijie]# setfacl -m u:sixijie:rwx f1
[root@centos7 sixijie]# getfacl f1
[root@centos7 sixijie]# setfacl -x u:sixijie f1
[root@centos7 sixijie]# getfacl f1

Linux命令之:setfacl和getfacl Linux命令之:setfacl和getfacl

3、-M和-X选项可以通过文件批量设定acl和移除acl

acl.txt:
u:user1:rw
u:user2:r
u:user3:rwx

[root@centos7 sixijie]# setfacl -M acl.txt f1
[root@centos7 sixijie]# getfacl f1

Linux命令之:setfacl和getfacl

acl.del
u:user1
u:user2

[root@centos7 sixijie]# setfacl -X acl.del f1
[root@centos7 sixijie]# getfacl f1

Linux命令之:setfacl和getfacl

4、–set和–set-file选项:

注意:--set和--set-file会把原有的ACL表项都删除    

--set-file

man手册中有这样一句话:

Copying the ACL of one file to another
          getfacl file1 | setfacl --set-file=- file2

因此
[root@centos7 sixijie]# getfacl f1 | setfacl --set-file=- f2
上述命令即复制f1的ACL给f2
[root@centos7 sixijie]# getfacl f2

Linux命令之:setfacl和getfacl

--set选项

注:一定要包含UGO的设置

[root@centos7 sixijie]# setfacl --set u::rw,u:sixijie:rwx,g::r,o::rw f1
[root@centos7 sixijie]# getfacl f1

Linux命令之:setfacl和getfacl

5、-b选项:清除所有ACL权限

[root@centos7 sixijie]# setfacl -b f1
[root@centos7 sixijie]# getfacl f1

Linux命令之:setfacl和getfacl

6、设置默认的ACL权限及其删除

(1)设置默认ACL 一般只针对目录
[root@centos7 sixijie]# setfacl -m d:u:sixijie:rw,d:g:hadoop:r dir1
[root@centos7 sixijie]# getfacl dir1

Linux命令之:setfacl和getfacl

(2)我们在dir1/目录下创建一个文件和目录
[root@centos7 sixijie]# cd dir1/
[root@centos7 dir1]# touch f3
[root@centos7 dir1]# mkdir d2
[root@centos7 dir1]# getfacl f3
[root@centos7 dir1]# getfacl d2

Linux命令之:setfacl和getfacl

我们可以看到dir1目录下的文件及其子目录继承了父目录dir1的ACL权限,这就叫做默认的ACL

删除的方法很简单:一个-k选项即可
[root@centos7 sixijie]# setfacl -k dir1/
[root@centos7 sixijie]# getfacl dir1/

Linux命令之:setfacl和getfacl

7、mask介绍

[root@centos7 tmp]# man acl
节选其中的一段话:acl_mask条目表示最大的访问权限

ACL_MASK        The ACL_MASK entry denotes the maximum access rights 
                that can be granted by entries of type ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP.

所以我们可以在getfacl中看到这样的条目:effective:Mode

[root@centos7 ~]# setfacl -m u:sixijie:rx,g:user1:rwx f1
[root@centos7 ~]# getfacl f1

设置mask
[root@centos7 ~]# setfacl -m m:r f1
[root@centos7 ~]# getfacl f1

Linux命令之:setfacl和getfacl

可见自定义用户,自定义组及其所属组的权限不能大于mask设置的权限

一个小的知识点:setfacl和chmod设置的所属组的权限可以相互覆盖,当二者设置的权限不一致时,以使用getfacl看到的“#effective:”后的权限为准

8、备份和恢复ACL

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

方法如下:

[root@centos7 ~]# getfacl -R /tmp/dir1 > acl.txt
[root@centos7 ~]# setfacl -R -b /tmp/dir1
[root@centos7 ~]# setfacl -R --set-file=acl.txt /tmp/dir1
[root@centos7 ~]# getfacl -R /tmp/dir1

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

(0)
sixijiesixijie
上一篇 2016-08-04
下一篇 2016-08-04

相关推荐

  • 马哥教育网络班21期第七周作业

    1、创建一个10G分区,并格式为ext4文件系统;   (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;   (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]#…

    Linux干货 2016-10-09
  • 【26期】Linux第六周学习小总结

        时光匆匆,一周时光悠然而逝,带给我们的只有知识的充实,和每日强大的自信心,学习的日益深入,慢慢的然我们的思绪和状态带回高中时光,吃饭上课睡觉三点一线的生活,枯燥中透露出稍微的晨曦,让每个明天都充满着期待,那我们的本周的学习中磁盘管理算是占了很大的比重,毕竟关于磁盘的知识很是难理解,那我就把本周的知识回顾温习,同时分享给大家。 &n…

    2017-08-19
  • MySQL存储过程中IN、OUT、INOUT参数使用

    MySQL存储过程中IN、OUT、INOUT参数使用 MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN、OUT、INOUT形式如:CREATE PROCEDURE([IN|OUT|INOUT] 参数名 数据类型,…) IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值。| 意思…

    Linux干货 2017-05-08
  • Linux基础之软件包管理

    一.概述 在redhat系列的发行版中,采用rpm软件包管理器,rpm原名是Red Hat Package Manager,后来当其他发行版也采用这种软件包管理机制以后,重新命名,改为RPM Package Manager,它所能提供的功能是将编译好的应用程序文件打包成一个或几个程序文件,从而使得用户能够方便的安装,升级,卸载软件,而yum则是rpm包管理器…

    Linux干货 2016-11-16
  • 文件权限

    小技巧 除root用户外其他用户将不能登录 touch /etc/nologin 或touch /run/nologin echo “system is maintaining”>> /etc/nologin 文件属性 文件的权限主要针对三类对象进行定义: owner: 属主, u 修改文件的属主: chown [OPTION]… […

    Linux干货 2016-08-08
  • 马哥教育网络班N22期+第5周课程练习

    马哥教育网络班N22期+第5周课程练习 1. 显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;  grep -E "^[#][[:space:]]+[^[:space:]].*" /etc/rc.d/rc.sysinit 2. 显示…

    Linux干货 2016-09-19