ACL的权限分配

ACL是什么呢?

ACL(Access Control List),访问控制列表。

用一个例子来说明它有什么用:

假设我有一个项目文件夹,我和我的开发团队Kr对该目录均具备 rwx 的权限,因为我该文件夹下有源码等,所以不能对外开放,对其他用户的权限为0,即我的文件夹目录为 drwxrwx---;
但是有一天,我的一个很好的朋友poty想要看一下我的项目,然而我不好意思拒绝,这个时候通常有三种选择:

  1. 让其成为所有者(这个你们想想也不可能嘛)
  2. 让其成为项目组成员(因为她并没有参与项目,不好让她加进来的,万一不小心删掉了部分代码怎么办)
  3. 给其它人赋以 r-w 的权限(但是other用户太多了,万一我代码没发布就被竞争对手给copy了呢?) 

这个时候,以上三种方法都不靠谱。。。

然后,ACL的作用就来了,它可以针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助。

所以这个时候我们就可以给poty开个小灶,单独为她赋予一些权限。

ACL文件权限设置

ACL最常用的有一下两个命令:

getfacl: 获取文件或目录的ACL设置信息

Usage: getfacl [-aceEsRLPtpndvh] file ...
  -a,  --access           显示文件或目录的访问控制列表
  -d, --default           显示文件或目录默认的访问控制列表
  -c, --omit-header       不显示默认的访问控制列表
  -R, --recursive         递归到子目录

setfacl: 设置文件或目录的ACL设置信息

-m, --modify=acl:修改文件或目录的扩展ACL设置信息
-x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, --remove-all:删除所有的扩展的ACL设置信息
-k, --remove-default:删除缺省的acl设置信息
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
-d, --default:设置默认的ACL设置信息(只对目录有效)
-R, --recursive:操作递归到所有子目录和 文件

接下来进行实际操作演示:

首先先创建一个 project 目录:

root@kali:~# mkdir -m 770 project
root@kali:~# ls -ll
total 44
drwxr-xr-x 9 root root 4096 Aug 23 13:18 gems
drwxrwx--- 2 root root 4096 Sep 26 09:29 project

这个文件属于用户root,属于用户组root,other是没有权限的

接下来创建一个用户

root@kali:~# useradd Kr
root@kali:~# passwd Kr
//查看Kr和我当前用户属于哪个用户组
root@kali:~# groups Kr
Kr : Kr
root@kali:~# groups root
root : root

不是同一个用户组,相当于就是说现在 Kr 这个用木对于 project 这个目录是没有任何权限的。

root@kali:~# su Kr
$ ls
gems  project  redis  下载  公共  图片  文档  桌面  模板  视频  音乐
$ cd project/
sh: 2: cd: can't cd to project/

可以看到,不能打开 project 这个文件夹

然后开始设置ACL权限了

设置前的权限:

root@kali:~# getfacl project/
# file: project/
# owner: root
# group: root
user::rwx
group::rwx
other::---

然后给Kr设置ACL权限:

root@kali:~# setfacl -m u:Kr:rx project/
root@kali:~# ls -ll
total 44
drwxr-xr-x  9 root root 4096 Aug 23 13:18 gems
drwxrwx---+ 2 root root 4096 Sep 26 09:29 project

project权限后面有一个 + ,+ 就代表ACL权限

设置后的权限:

root@kali:~# getfacl project/
# file: project/
# owner: root
# group: root
user::rwx
user:Kr:r-x
group::rwx
mask::rwx
other::---

可以看到多增加了几行

user:Kr:r-x
mask::rwx
  • user:Sherry:r-x: 表示Sherry具备的ACL权限为 r-x
  • mask::rwx: 表示ACL的最大权限,用你分配给用户的权限与mask相与(类似于子网掩码)

再次切换到Kr用户

root@kali:~# su Kr
$ ls
gems  project  redis  下载  公共  图片  文档  桌面  模板  视频  音乐
$ cd project
$ ls
$

可以进入 project 目录了。

删除ACL权限:

setfacl -b <dir>
root@kali:~# setfacl -b project/
root@kali:~# ls -ll
total 44
drwxr-xr-x 9 root root 4096 Aug 23 13:18 gems
drwxrwx--- 2 root root 4096 Sep 26 09:29 project

删除增加的用户:

root@kali:~# userdel -r Kr

猜你喜欢

转载自blog.csdn.net/qq_39850969/article/details/82848320