zoukankan      html  css  js  c++  java
  • Linux权限管理之ACL权限

    ACL 是什么
    ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限(属主,属组,其他人)管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制。它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。


    ACL有什么用
    既然是作为UGO权限管理的补充,ACL自然要有UGO办不到或者很难办到的本事,例如:

    可以针对特定用户来设置权限
    可以针对特定用户组来设置权限
    子文件/目录继承父目录的权限

    最主要的是当我们的某个目录或文件对其他人设置的权限是---但是某个用户又需要查看里面的内容,这个用户即不是这个文件或目录的拥有者或拥有组中的用户,他只属于
    其他用户,其他用户还对这个文件没有任何权限,这时候我们就可以用ACL来设置。

    一、检查Linux是否支持ACL
    ACL需要Linux内核和文件系统的配合才能工作,当前我们能见到的大多数Linux发行版本默认都是支持的。但最好还是能够先检查一下:

    sudo tune2fs -l /dev/sda1 |grep "Default mount options:"
    Default mount options: user_xattr acl
    我们能够看到默认情况下(Default mount options:)已经加入 acl 支持了。

    二、如何设置ACL
    我们可以使用setfacl和getfacl命令来设置或查看文件/目录的acl权限。 

    用法:

    setfacl [参数] 文件/目录名

    参数

    -m :配置后面的 acl 参数给文件/目录使用,不可与 -x 合用;
    -x :删除后续的 acl 参数,不可与 -m 合用;
    -b :移除所有的 ACL 配置参数;
    -k :移除默认的 ACL 参数;
    -R :递归配置 acl;
    -d :配置“默认 acl 参数”,只对目录有效,在该目录新建的数据会引用此默认值;

    给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
    给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名

    查看文件/目录的acl权限

    用法:

    getfacl 文件/目录名

    三、下面我们通过一些示例来演示 ACL 权限的基本用法。

    针对用户来设置权限

    1、假设pi1用户创建了一个文件ii权限如下
    -----------------------------------------------
    [root@CentOS7 home]# ll ii
    -rw-r-----. 1 pi1 pi1 14 7月 16 13:55 ii #其他用户没有任何权限
    [root@CentOS7 home]#
    -----------------------------------------------

    2、为用户pi2添加读写权限,pi2对于ii文件属于其他用户
    -----------------------------------------------
    [pi1@CentOS7 home]$ setfacl -m u:pi2:rw ii #root或文件拥有者可以通过setfacl命令来添加权限
    -----------------------------------------------

    3、再次查看ii权限
    -----------------------------------------------
    [root@CentOS7 home]# ll ii
    -rw-r-x---+ 1 pi1 pi1 14 7月 16 13:55 ii #可以看到权限部分多了个+
    [root@CentOS7 home]#
    -----------------------------------------------

    4、查看ii文件的ACL 权限
    -----------------------------------------------
    [root@CentOS7 home]# getfacl ii
    # file: ii #说明文件
    # owner: pi1 #ii文件的拥有着
    # group: pi1 #ii文件的拥有组
    user::rw- #使用者列表栏为空,代表文件拥有着的权限
    user:pi2:rw- #针对pi2的权限设置为rx,与拥有者不同
    group::r-- #针对文件拥有组的权限设定仅有r
    mask::rw- #此文件预设的有效权限(mask)
    other::--- #其他人拥有的权限

    [root@CentOS7 home]#
    -----------------------------------------------

    5、为用户组pi2添加读写权限,pi2对于ii文件属于其他用户
    -----------------------------------------------
    [root@CentOS7 home]# setfacl -m g:pi2:rw ii
    -----------------------------------------------

    6、查看ii文件的ACL 权限
    -----------------------------------------------
    [root@CentOS7 home]# getfacl ii
    # file: ii
    # owner: pi1
    # group: pi1
    user::rw-
    user:pi2:rw-
    group::r--
    group:pi2:rw- #多了一个pi2组的权限
    mask::rw-
    other::---

    [root@CentOS7 home]#
    -----------------------------------------------

    四、最大有效权限 mask


    我们给用户或用户组设定 ACL 权限其实并不是真正我们可用的权限,是与 mask 的权限“相与”之后的权限才是用户的真正可用的权限,这是什么意思那就是当你为pi1这个用户设置了rwx的权限,但是mask的权限是r--那么ip1用户实际得到的权限就只有r,一般默认mask权限都是与你ACL添加的权限一样的,所以你设定了什么权限用户就具有什么权限。

    举例:改变mask权限
    -----------------------------------------------
    [root@CentOS7 home]# setfacl -m m:r ii #设置mask只有r权限
    [root@CentOS7 home]# getfacl ii
    # file: ii
    # owner: pi1
    # group: pi1
    user::rw-
    user:pi2:rw- #effective:r-- #系统提示有效的权限为r
    group::r--
    group:pi2:rw- #effective:r--
    mask::r--
    other::---
    -----------------------------------------------

    五、递归 ACL 权限

    通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限。

    setfacl -m u:用户名:权限 -R 文件名

    六、默认 ACL 权限

    如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限。

    setfacl -m d:u:用户名:权限 文件名


    七、删除 ACL 权限

    1、删除指定用户的 ACL 权限

    setfacl -x u:用户名 文件名

    2、删除指定用户组的 ACL 权限

    setfacl -x g:组名 文件名

    3、删除文件的所有 ACL 权限

    setfacl -b 文件名

     

  • 相关阅读:
    Next Permutation leetcode java
    用户上网行为管理之Panabit
    ROS之冗余线路Recursive Route
    ros的romon功能介绍以及使用条件
    nf_conntrack: table full, dropping packet. 终结篇
    nf_conntrack满之解决方法nginx报502错误
    Ros之BGP学习87-88课
    ros关于动态路由ospf优先级cost和priority的区别和联系
    ros ppp隧道up或者down的时候,可以写脚本,脚本可以调用的参数$user $local-address $remote-address $caller-id $called-id $interface
    ROS 6.X目前限速比较稳定的一个脚本小包优先
  • 原文地址:https://www.cnblogs.com/pipci/p/11196001.html
Copyright © 2011-2022 走看看