20 权限管理之高级权限 ACL

806次阅读
没有评论

共计 5147 个字符,预计需要花费 13 分钟才能阅读完成。

引入

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

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

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

  • 这时咱们就可以使用到文件的访问控制列表 ACL(Access Control Lit)
⛅"u g o" 只能设置一个用户, 一个组或者 other
⛅"ACL" 可以对 "r w x" 进行用户设置(允许谁和不允许谁)
⛅"ACL" 只能是 "root" 来设置
⛅相关命令: getfacl(查看), setfacl(设置)

一.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::[权限] [文件]

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

⛅先创建一个目录和文件作为演示对象
[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

1.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.setfacl : 设置权限

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

  • setfacl设置权限置空
⛅置空属主的权限
[root@shawn ~]# setfacl -m u::- !$
setfacl -m u::- /cccc/a.txt

⛅置空属组的权限
[root@shawn ~]# setfacl -m g::- !$
setfacl -m g::- /cccc/a.txt

⛅置空其他人的权限
[root@shawn ~]# setfacl -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" 进行设置 "r" 权限
[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::---

3. 最大有效权限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: 权限不够
  • 小结

  • mask会影响除了文件所有者和 other 之外的人

  • mask权限决定了用户访问文件时的最高权限
  • mask用于临时降低用户访问文件的权限

4. 继承权限 :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
正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计5147字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)