20.权限管理之高级权限 ACL

1|0引入

  • 前一篇所说的基础权限 u, g, o 以及特殊权限都是针对一类用户设置的

  • 但如果咱们想要自定义用户分配,也就是更精细化的控制权限分配

  • 比如 :让某一个用户对某个文件具有某种权限

  • 这时咱们就可以使用到文件的访问控制列表 ACL(Access Control List)

   ⛅"u g o"只能设置一个用户, 一个组或者other
   ⛅"ACL" 可以对 "r w x" 进行用户设置(允许谁和不允许谁)
   
 
 
 
   ⛅"ACL"只能是 "root" 来设置
   ⛅ 相关命令: getfacl(查看), setfacl(设置)

2|0一.ACL 的基本使用方式

  • 命令
getfacl查看权限
setfacl 设置权限
  • 选项
-m设定ACL的权限
-x 删除某一用户或组的ACL权限
-b 删除所有的ACL权限
-R 递归的设定ACL权限
d:(default) 继承,设定默认的ACL权限,在父目录下新建的文件都会继承此权限
mask: 决定用户的最高权限
  • 语法
修改属主的权限setfacl -m u: :[权限] [文件]
修改属组的权限 setfacl -m g: :[权限] [文件]
修改其他人权限 setfacl -m o: :[权限] [文件]
修改某一用户的权限 setfacl -m u:[用户名]:[权限] [文件]
修改具体某一个组的权限 setfacl -m g:[组名]:[权限] [文件]
继承 setfacl -m d:u:[用户名]:[权限] [父目录]
修改最大权限mask setfacl -m mask::[权限] [文件]

2|11.让咱们先设置好一个实验环境,让使用方式更易懂

       ⛅先创建一个目录和文件作为演示对象
             [root@shawn ~]# mkdir /cccc/
             [root@shawn ~]# touch /cccc/a.txt
             [root@shawn ~]# echo 123 > /cccc/a.txt
      ⛅创建三个用户和一个组
             [root@shawn ~]# useradd song1
             [root@shawn ~]# useradd song2
             [root@shawn ~]# useradd song3
             [root@shawn ~]# groupadd ggg1

2|21.getfacl : 查看权限

  ⛅使用"getfacl"命令查看ACL权限
             [root@shawn ~]# getfacl /cccc/a.txt
                getfacl /cccc/a.txt
                getfacl: Removing leading '/' from absolute path names
                      # file: cccc/a.txt
                      # owner: root
                      # group: root
                      user: :rwx
                      group: :r-x
                       other: :r-x

2|32.setfacl : 设置权限

注意: 当使用 setfacl 设置权限时就不要再使用 chmod设置了,会影响 mask

  • setfacl设置权限置空
    ⛅置空属主的权限 
               [root@shawn ~]# setfacl -m u::- !$ setfacl -m u::- /cccc/a.txt
    ⛅置空属组的权限 acl -m o::- !$ setfacl -m o::- /cccc/a.txt
    ⛅再次查看ACL权限,已经全部置空
                [root@shawn ~]# getfacl !$
                        getfacl /cccc/a.txt
                        getfacl: Removing leading '/' from absolute path names
                      # file: cccc/a.txt # owner: root
                      # group: root user::--- group::--- other::---
  • 需求: 用户 "song1" 只能对 "a.txt" 进行 "r" 操作
  ⛅对"song1"没有设置"ACL"权限时
                  [song1@shawn root]$ cat /cccc/a.txt
                          cat: /cccc/a.txt: 权限不够
                  [ song1@shawn root]$ echo 123 > /cccc/a.txt
                           bash: /cccc/a.txt: 权限不够
 
 
  ⛅使用"root"进行设置"r"权限
                 [root@shawn ~]# setfacl -m u:song1:r /cccc/a.txt
                 [root@shawn ~]# su song1
 
 
 
  ⛅切到"song1"可读但不可写
                 [song1@shawn root]$ cat /cccc/a.txt
                       123
                 [song1@shawn root]$ echo 333 > !$
                        echo 333 > /cccc/a.txt
                        bash: /cccc/a.txt: 权限不够
 
 
  • 用户 "song2" 只能对 "a.txt" 可以 "w" 操作
 
 
 ⛅对"song2"没有设置"ACL"权限时
                [song2@shawn root]$ cat /cccc/a.txt
                      cat: /cccc/a.txt: 权限不够
                [song2@shawn root]$ echo 123 > /cccc/a.txt
                       bash: /cccc/a.txt: 权限不够
⛅使用"root"进行设置"w"权限
                [root@shawn ~]# setfacl -m u:song2:w /cccc/a.txt
                [root@shawn ~]# su song2
⛅切到"song2"可写但不可读
                [song2@shawn root]$ echo 3333 > /cccc/a.txt
                [song2@shawn root]$ cat /cccc/a.txt
                cat: /cccc/a.txt: 权限不够
 ⛅咱们使用"root"查看是否写进去了
                [root@shawn ~]# cat /cccc/a.txt
                     3333
  • 组 "ggg1" 对 "a.txt" 具有 "rw" 操作

  • 用户 "song3" 为其他人,当其加入组 "ggg1" 后

"song3"作为其他人时没有任何权限
             [song3@shawn root]$ cat /cccc/a.txt
                  cat: /cccc/a.txt: 权限不够
 
 
             [song3@shawn root]$ echo 4444 > !$
                 echo 4444 > /cccc/a.txt
                 bash: /cccc/a.txt: 权限不够
 
 
⛅使用"root"将组"ggg1"设置"rw"权限
             [root@shawn ~]# setfacl -m g:ggg1:rw /cccc/a.txt
 
 
 
⛅将"song3"加入到组"ggg1"中
              [root@shawn ~]# gpasswd -a song3 ggg1
                 正在将用户“song3”加入到“ggg1”组中
             [root@shawn ~]# id song3
                 uid=1002(song3) gid=1002(song3) 组=1002(song3),1003(ggg1)
 
⛅再次使用"song3"对"a.txt"发现可读可写
            [song3@shawn root]$ echo 1234 > /cccc/a.txt
            [song3@shawn root]$ cat !$ cat /cccc/a.txt 1234
  • 经过以上步骤"getfacl"看看ACL权限
⛅再次查看"ACL"权限咱们可以发现多出了个"mask",??这是什么??
           [root@shawn ~]# getfacl /cccc/a.txt
                getfacl: Removing leading '/' from absolute path names
             # file: cccc/a.txt
             # owner: root
             # group: root
           user::---
           user:song1:r--
           user:song2:-w-
           group::---
           group:ggg1:rw-
           mask::rw-
           other::---

2|43.最大有效权限mask

 mask相当于一个权限筛子, 用户和组的权限受它的影响, 不包括文件所有者和 other

 mask最主要的作用就是用来决定用户和组的最高权限

  • mask权限进行按位与运算得到最终权限
  • 以 "r" 为例, 有权限 : 1 无 : 0
用户/组权限mask权限最终权限
1 1 1
1 0 0
0 1 0
0 0 0
  • 举例
    song1权限 : rwx r-- rw- -wx ....
    mask权限 :  rw- rw- -w- rwx ....
    最权限 :       rw- r- -w- -wx ....
  • 演示 : mask 为空效果
⛅设置"mask"权限为空
     [root@shawn ~]# setfacl -m mask::- /cccc/a.txt
 ⛅查看"ACL"权限
     [root@shawn ~]# getfacl !$
            getfacl /cccc/a.txt
            getfacl: Removing leading '/' from absolute path names
     # file: cccc/a.txt
     # owner: root
     # group: root
         user::---
         user:song1:r--         #effective:---
         user:song2:-w-        #effective:---
         group::---
      group:ggg1:rw-          #effective:---
        mask::---
        other::---
  • 分别使用三个用户来试试自己的权限
"song1"失败
   [root@shawn ~]# su song1
   [song1@shawn root]$ cat /cccc/a.txt
          cat: /cccc/a.txt: 权限不够
   [song1@shawn root]$ echo 222 >!$
            echo 222 >/cccc/a.txt
            bash: /cccc/a.txt: 权限不够
 
 
"song2"失败
   [root@shawn ~]# su song2
   [song2@shawn root]$ cat /cccc/a.txt
           cat: /cccc/a.txt: 权限不够
   [song2@shawn root]$ echo 444>/cccc/a.txt
           bash: /cccc/a.txt: 权限不够
 
 
"song2"失败
      [root@shawn ~]# su song3
      [song3@shawn root]$ cat /cccc/a.txt
               cat: /cccc/a.txt: 权限不够
      [song3@shawn root]$ echo 1234 > /cccc/a.txt
               bash: /cccc/a.txt: 权限不够
  • 小结
  1. mask会影响除了文件所有者和other之外的人
  2. mask权限决定了用户访问文件时的最高权限
  3. mask用于临时降低用户访问文件的权限

2|54.继承权限 :default

  • 想要对一个目录以及对这个目录以后创建的文件具有指定的权限, 就需要设置 default

  • 注意 : 对当前目录下已经存在的文件没有相应权限

  • -R是对当前已存在的文件及目录生效, 对后面创建的不生效

⛅咱们先创一个"/cccc/bbbb"
    [root@shawn ~]# mkdir /cccc/bbbb/
 
⛅分别对"song1"做递归权限,对"song2"做继承权限
     [root@shawn ~]# setfacl -R -m u:song1:rwx /cccc/
     [root@shawn ~]# setfacl -m d:u:song2:- /cccc/
 
 
⛅来看看当前已存在文件和目录的"ACL"权限
⛅可以发现这个父目录对"song1"权限生效,也对"song2"设置了继承
      [root@shawn ~]# getfacl /cccc/
             getfacl: Removing leading '/' from absolute path names
       # file: cccc/
       # owner: root
       # group: root
           user::rwx
           user:song1:rwx
           group::r-x
           mask::rwx
           other::r-x
        default:user::rwx
         default:user:song2:---
        default:group::r-x
         default:mask::r-x
         default:other::r-x
 
 
⛅来看"/cccc/bbbb",发现对已存在的文件递归设置生效,继承不生效
      [root@shawn ~]# getfacl /cccc/bbbb/
                 getfacl: Removing leading '/' from absolute path names
             # file: cccc/bbbb/
             # owner: root
             # group: root user::rwx
              user:song1:rwx
              group::r-x
              mask::rwx
              other::r-x
 
⛅我们再来创建新的文件
         [root@shawn ~]# mkdir /cccc/dddd
 
 
⛅发现对后创建的文件递归无效了,继承生效了(继承了"song2"对父目录的权限)
          [root@shawn ~]# getfacl /cccc/dddd getfacl: Removing leading '/' from absolute path names
                 # file: cccc/dddd
                 # owner: root
                 #  group: root
              user::rwx
              user:song2:---
                    group::r-x
                    mask::r-x
                    other::r-x
                    default:user::rwx
              default:user:song2:---
                     default:group::r-x
                     default:mask::r-x
                     default:other::r-x

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/articles/14443550.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(98)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示