linux权限之ACL权限

学习目标:

  • 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 test2

你可能感兴趣的:(LINUX基础篇,linux,运维,系统安全)