文章最后更新时间:2022年09月13日已超过808天没有更新。
学习目标:
ACL权限的作用及设定
最大有效权限以及删除ACL权限
默认ACL权限和递归ACL权限
ACL权限的作用及设定
ACL权限的作用
环境需求:
有个财务部共享文件夹,要求设置以下权限,
财务总监(cwzj)的账户拥有 读写执行(rwx)权限
财务专员(cwzy)的账户拥有 只读执行(rx)权限
除此之外,其他人没有权限访问
有一天,你老板心血来潮,想要看财务报表,并且要求拥有所有权限
即是老板(boss)的账户拥有 读写执行(rwx)权限
行政总监也要看财务报表
行政总监(xzzj)的账户 只读执行(rx)权限
请问你怎么完成这个需求呢?
想了几天几夜之后,你会发现依靠 所有者、所属组、其他人 的基本权限,完全无法实现以上的需求
ACL权限就是解决你这个问题,也就是解决身份不足的问题。
新建个财务(cw)组,财务总监与财务专员默认在此组,然后新建各个账号测试:
groupadd cw useradd -g cw cwzj useradd -g cw cwzy useradd test useradd boss useradd xzzj mkdir /cw chown cwzj /cw/ chmod 750 /cw/ [root@192 ~]# ll -d /cw/ drwxr-x--- 2 cwzj root 6 May 15 03:14 /cw/
通过以上权限可以看出,只能设置所有者,所属组、其他人权限,但老板与行政总监的权限应该怎么设置呢?用什么身份访问呢?
ACL权限设置
ACL权限设置:将老板与行政总监的账号设置ACL权限
[root@192 ~]# setfacl -m u:boss:rwx /cw [root@192 ~]# setfacl -m u:xzzj:rx /cw [root@192 ~]# getfacl /cw //查看ACL权限 getfacl: Removing leading '/' from absolute path names # file: cw //文件名 # owner: cwzj //所有者 # group: root //所属组 user::rwx //所有者权限 user:boss:rwx //boss ACL权限 user:xzzj:r-x //xzzj ACL权限 group::r-x //所属组权限 mask::rwx //mask权限 other::--- //其他人权限
boss账户测试:
passwd boss [root@192 ~]# su - boss [boss@192 ~]$ cd /cw [boss@192 cw]$ echo 'I am boss !' > boss.txt [boss@192 cw]$ pwd /cw [boss@192 cw]$ ls boss.txt [boss@192 cw]$ cat boss.txt I am boss !
以上案例得知,boss拥有rwx权限,已达到想要的效果。
行政总监账号测试:
[root@192 ~]# su - xzzj [xzzj@192 ~]$ cd /cw/ [xzzj@192 cw]$ ls boss.txt [xzzj@192 cw]$ cat boss.txt I am boss ! [xzzj@192 cw]$ echo 'I am xzzj !' > xzzj.txt -bash: xzzj.txt: Permission denied
以上案例得知,xzzj拥有rx权限,并没有写入权限,已达到想要的效果。
其他账号设置:
[root@192 ~]# su - test [test@192 ~]$ cd /cw -bash: cd: /cw: Permission denied
以上案例得知,test用户没有任何权限。
财务总监账号设置:
[root@192 ~]# su - cwzj [cwzj@192 ~]$ cd /cw [cwzj@192 cw]$ echo 'I am cwzj !' > cwzj.txt [cwzj@192 cw]$ ls boss.txt cwzj.txt [cwzj@192 cw]$ cat cwzj.txt I am cwzj !
以上案例得知,cwzj拥有rwx权限,已达到想要的效果。
财务专员设置:
[root@192 ~]# su - cwzy [cwzy@192 ~]$ cd /cw/ -bash: cd: /cw/: Permission denied
直接被拒绝,原来所属组是root,得修改所属组
[cwzy@192 ~]$ su - root Password: Last login: Sun May 15 03:31:07 EDT 2022 on pts/0 [root@192 ~]# ll -d /cw drwxrwx---+ 2 cwzj root 38 May 15 03:29 /cw [root@192 ~]# chown :cw /cw/ [root@192 ~]# ll -d /cw/ drwxrwx---+ 2 cwzj cw 38 May 15 03:29 /cw/ [root@192 ~]# su - cwzy Last login: Sun May 15 03:31:14 EDT 2022 on pts/0 [cwzy@192 ~]$ cd /cw/ [cwzy@192 cw]$ touch test.txt touch: cannot touch ‘test.txt’: Permission denied [cwzy@192 cw]$ ls boss.txt cwzj.txt [cwzy@192 cw]$ cat boss.txt I am boss !
现在成功了,并且只有只读权限,已达到想要的效果。
最大有效权限以及删除ACL权限
最大有效权限
被赋予的ACL权限要与mask权限进行相 “与”
,才是最终的权限;也就是说ACL拥有写的权限,此时mask也拥有写的权限,最终权限就是拥有写的权限,反之则是没有写的权限。
[root@192 ~]# setfacl -m m:rx /cw [root@192 ~]# getfacl /cw/ getfacl: Removing leading '/' from absolute path names # file: cw/ # owner: cwzj # group: cw user::rwx user:boss:rwx#effective:r-x user:xzzj:r-x group::r-x mask::r-x other::---
此时mask权限是rx,那么boss权限真的拥有rwx权限吗?
[root@192 ~]# su - boss Last login: Sun May 15 03:23:50 EDT 2022 on pts/0 [boss@192 ~]$ cd /cw/ [boss@192 cw]$ touch boss02.txt touch: cannot touch ‘boss02.txt’: Permission denied [boss@192 cw]$ ll -d /cw/ drwxr-x---+ 2 cwzj cw 38 May 15 03:29 /cw/ [boss@192 cw]$ getfacl /cw/ getfacl: Removing leading '/' from absolute path names # file: cw/ # owner: cwzj # group: cw user::rwx user:boss:rwx#effective:r-x user:xzzj:r-x group::r-x mask::r-x other::---
以上案例得知,boss也丧失写入的权限了;因为mask权限rx原因,所以ACL最大有效权限只能是rx。
删除ACL权限
setfacl -x 指定用户名或者用户组 setfacl -b 删除所有ACL的权限 [cwzj@192 cw]$ setfacl -x u:boss /cw [cwzj@192 cw]$ getfacl /cw getfacl: Removing leading '/' from absolute path names # file: cw # owner: cwzj # group: cw user::rwx user:xzzj:r-x group::r-x mask::r-x other::--- [cwzj@192 cw]$ setfacl -b /cw [cwzj@192 cw]$ getfacl /cw/ getfacl: Removing leading '/' from absolute path names # file: cw/ # owner: cwzj # group: cw user::rwx group::r-x other::---
默认ACL权限和递归ACL权限
存在的问题:
主目录拥有ACL权限,但是里边的文件及子目录都没有ACL权限。
[root@192 ~]# setfacl -m u:boss:rwx /cw [root@192 ~]# ll /cw/ total 8 -rw-rw-r-- 1 boss boss 12 May 15 03:25 boss.txt drwxr-xr-x 2 cwzj cw 6 May 15 04:23 cwzj -rw-r--r-- 1 cwzj cw 12 May 15 03:30 cwzj.txt -rw-r--r-- 1 cwzj cw 0 May 15 04:11 test
设置ACL递归权限
[root@192 ~]# setfacl -m u:boss:rwx -R /cw/ [root@192 ~]# ll /cw/ total 8 -rw-rwxr--+ 1 boss boss 12 May 15 03:25 boss.txt drwxrwxr-x+ 2 cwzj cw 6 May 15 04:23 cwzj -rw-rwxr--+ 1 cwzj cw 12 May 15 03:30 cwzj.txt -rw-rwxr--+ 1 cwzj cw 0 May 15 04:11 test
设置新建的子文件都默认ACL权限
[root@192 ~]# setfacl -m d:u:boss:rwx -R /cw/ [root@192 ~]# mkdir /cw/test2 [root@192 ~]# touch /cw/123 [root@192 ~]# ll /cw/ total 8 -rw-rw----+ 1 root root 0 May 15 04:35 123 -rw-rwxr--+ 1 boss boss 12 May 15 03:25 boss.txt drwxrwxr-x+ 2 cwzj cw 6 May 15 04:23 cwzj -rw-rwxr--+ 1 cwzj cw 12 May 15 03:30 cwzj.txt -rw-rwxr--+ 1 cwzj cw 0 May 15 04:11 test drwxrwx---+ 2 root root 6 May 15 04:29 test