• linux:ACL权限


    ACL权限是为了防止权限不够用的情况,一般的权限有所有者、所属组、其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限;

    比如:一个网络老师,给一个班的学员上课,他在linux的根目录下面建立了一个文件,只允许本班级的 学员对该目录进行上传下载,其他人都不行,这是该目录的权限一般是770(一般我们设置权限都是所有者的权限大于所属组的权限,所属组的权限大于其他人的权限,依次往下),此时有个同学想试听我们的课程,该怎么给他分配权限呢?此时的话所属组、所有者、其他人都不满足,这是就用到ACL权限;

    ACL权限的原理类似windows给一个文件添加用户(这个用户对该文件具有的权限):

      

    linux的ACL权限也是给一个文件或者目录添加指定的用户或者组,然后给对应的权限;

    一、ACL权限的开启

      1.查看acl权限是否支持(文件系统是否支持ACL权限):

        a.ext4文件系统:使用 dumpe2fs -h /dev/sda3 来查看超级块中的信息,里面有 Default mount options:    user_xattr acl 或者使用 mount 查询

        b.xfs文件系统 :xfs系统貌似已经强制开启了ACL权限了

      2.开启acl权限

        a.临时开启:mount -o remount,acl / remount:重新挂载;[,acl]添加acl权限;[/]分区)

        b.永久开启:编辑我们开机挂载文件/etc/fstab

             
        然后需要让修改生效,因为是开机自动挂载的文件,所以要让修改生效有两种方式:

          1.重启系统

          2.重新挂载:mount -o remount /

    二、查看和设置ACL权限

      1.查看ACL权限:getfacl 文件名 下面是我做的试验之后的数据,我添加了一个st用户和一个tgroup2组,这两个就是alc权限做到的在

          

      2.设定ALC权限:setfacl 命令设置(下面是我做的试验)

    [root@study tmp]# mkdir project
    [root@study tmp]# ls -l
    total 0
    srwxrwxrwx 1 mysql mysql 0 Jul 20 09:56 mysql.sock
    srw-rw---- 1 root  root  0 Jul 20 09:56 php-fcgi.sock
    drwxr-xr-x 2 root  root  6 Jul 20 10:37 project
    [root@study tmp]# chmod 770 project/
    [root@study tmp]# groupadd zhy
    [root@study tmp]# chown root:zhy project/
    [root@study tmp]# ls -ld project/
    drwxrwx--- 2 root zhy 6 Jul 20 10:37 project/
    [root@study tmp]# useradd zgw1
    useradd: user 'zgw1' already exists
    [root@study tmp]# useradd zgw2
    [root@study tmp]# useradd zgw3
    [root@study tmp]# gpasswd -a zgw2 zhy
    Adding user zgw2 to group zhy
    [root@study tmp]# gpasswd -a zgw3 zhy
    Adding user zgw3 to group zhy
    [root@study tmp]# ls -ld zhy
    ls: cannot access zhy: No such file or directory
    [root@study tmp]# ls -ld project/
    drwxrwx--- 2 root zhy 6 Jul 20 10:37 project/
    [root@study tmp]# su zgw3
    Attempting to create directory /home/zgw3/perl5
    [zgw3@study tmp]$ cd project/
    [zgw3@study project]$ ls -l
    total 0
    [zgw3@study project]$ vi a
    [zgw3@study project]$ ls -l
    total 4
    -rw-rw-r-- 1 zgw3 zgw3 8 Jul 20 10:44 a
    [zgw3@study project]$ exit
    exit
    [root@study tmp]# su st
    [st@study tmp]$ cd project/
    bash: cd: project/: Permission denied
    [st@study tmp]$ exit
    exit
    
    [root@study tmp]# setfacl -m u:st:rx project/
    [root@study tmp]# getfacl project/
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    user:st:r-x
    group::rwx
    mask::rwx
    other::---
    
    [root@study tmp]# su st
    [st@study tmp]$ cd project/
    [st@study project]$ ls -l
    total 4
    -rw-rw-r-- 1 zgw3 zgw3 8 Jul 20 10:44 a
    [st@study project]$ touch a
    touch: cannot touch ‘a’: Permission denied
    [st@study project]$ 

      设置用户:setfacl -m u:st:rx project [u指定用户]

      设置组:setfacl -m g:tgroup:rx project [g指定组]

    [root@study tmp]# getfacl project/
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    user:st:r-x
    group::rwx
    mask::rwx
    other::---
    
    [root@study tmp]# groupadd zhy2
    [root@study tmp]# setfacl -m g:zhy2:rx project/
    [root@study tmp]# getfacl project/
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    user:st:r-x
    group::rwx
    group:zhy2:r-x
    mask::rwx
    other::---

    三、ACL权限的最大有效权限,和删除acl权限

    [root@study tmp]# getfacl project/
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    user:st:r-x
    group::rwx
    group:zhy2:r-x
    mask::rwx
    other::---

      大家看上面的acl权限中有个"mask"的选项,它就是ACL权限的最大权限,现在是rwx,当你设置某个用户或组的ACL权限时,要跟mask的权限“相与”之后产生的权限才是该用户的最终权限,也就是加入mask的最大权限是rx,但是你给st用户设置的是rwx权限,此时st用户它的权限只有rx的权限,因为与最大权限“相与”得出的结果就是rx

      命令:setfacl -m m:rx project 

      

      

      2.删除ACL权限

        删除ACL用户权限:setfacl -x u:st 文件名

        删除ACL组权限:setfacl -x g:tgroup 文件名

        删除整个ACL权限:setfacl -b 文件名

    [root@study tmp]# getfacl project/
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    user:st:r-x
    group::rwx                      #effective:r-x
    group:zhy2:r-x
    mask::r-x
    other::---
    
    [root@study tmp]# setfacl -x u:st project/
    [root@study tmp]# getfacl project/        
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    group::rwx
    group:zhy2:r-x
    mask::rwx
    other::---
    
    [root@study tmp]# setfacl -x g:zhy2 project/
    [root@study tmp]# getfacl project/          
    # file: project/
    # owner: root
    # group: zhy
    user::rwx
    group::rwx
    mask::rwx
    other::---
    
    [root@study tmp]# ls -ld project/
    drwxrwx---+ 2 root zhy 14 Jul 20 10:44 project/
    [root@study tmp]# setfacl -b project/
    [root@study tmp]# ls -ld project/    
    drwxrwx--- 2 root zhy 14 Jul 20 10:44 project/

     四、设置默认ACL权限和递归ACL权限

      1.命令:setfacl -m u:st:rx -R project 递归只对该目录下面现有的子文件或目录有用,对于该目录下面新添加的子文件或目录没用

    [root@study tmp]# cd project/
    [root@study project]# ls -l
    total 4
    -rw-rw-r-- 1 zgw3 zgw3 8 Jul 20 10:44 a
    [root@study project]# cd ..
    [root@study tmp]# setfacl -m u:st:rx -R project/
    [root@study tmp]# ls -l project/
    total 4
    -rw-rwxr--+ 1 zgw3 zgw3 8 Jul 20 10:44 a

    [root@study tmp]# cd project/
    [root@study project]# ls -l
    total 4
    -rw-rwxr--+ 1 zgw3 zgw3 8 Jul 20 10:44 a
    [root@study project]# touch b
    [root@study project]# ls -l
    total 4
    -rw-rwxr--+ 1 zgw3 zgw3 8 Jul 20 10:44 a
    -rw-r--r-- 1 root root 0 Jul 20 11:34 b
    [root@study project]#

      2.默认权限:使用d ,格式:setfacl -m d:u:st:rx project 默认权限只对该目录下面新建的文件或目录有效,对已经存在的子文件无效

    [root@study tmp]# setfacl -m d:u:st:rx project/
    [root@study tmp]# ls -l project/
    total 4
    -rw-rwxr--+ 1 zgw3 zgw3 8 Jul 20 10:44 a
    -rw-r--r--  1 root root 0 Jul 20 11:34 b
    [root@study tmp]# touch project/c
    [root@study tmp]# ls -l project/
    total 4
    -rw-rwxr--+ 1 zgw3 zgw3 8 Jul 20 10:44 a
    -rw-r--r--  1 root root 0 Jul 20 11:34 b
    -rw-rw----+ 1 root root 0 Jul 20 11:38 c
  • 相关阅读:
    带妹入坑,她该怎样提高自己的编程能力?
    性能测试--cpu使用率过高怎么办
    loadrunner Controller 删除available scripts中无用脚本
    loadrunner 立即执行+定时执行设置
    loadrunner11 :脚本日志打印设置及举例说明
    loadrunner录制chrome脚本:页面无响应
    Error -27492: "HttpSendRequest" failed, Windows error code=12152 (invalid server response) and retry。。。
    loadrunner11错误:Error -27776: Server "wsg.cmszmail.ad" shut connection during attempt to negotiate SSL session [MsgId: MERR-27776]解决办法
    loadrunner11 错误:Error -26377: No match found for the requested parameter XXXX. web_custom_request(XXX) highest severity level was "ERROR",....... [MsgId: MMSG-26387]
    loadrunner11 执行bat批处理文件时获取bat文件所在路径 正确方式与采坑说明
  • 原文地址:https://www.cnblogs.com/zengguowang/p/5687499.html
Copyright © 2020-2023  润新知