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权限
[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权限要与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权限。
[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 test2