1、设定 ACl 权限,常用两大命令,分别是 setfacl 和 getfacl 命令,前者用于给指定文件或目录设定 ACL 权限,后者用于查看是否配置成功。
getfacl 命令用于查看文件或目录当前设定的 ACL 权限信息,该命令的基本格式为:
[root@localhost ~]# getfacl 文件名
setfacl 命令可直接设定用户或群组对指定文件的访问权限。此命令的基本格式为:
[root@localhost ~]# setfacl 选项 文件名
罗列选项及功能
选项 功能 -m 参数 设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 "u:用户名:权限" 的格式,例如 setfacl -m u:st:rx /project
表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 "g:组名:权限" 格式,例如setfacl -m g:tgroup:rx /project
表示设定群组 tgroup 对 project 目录具有 rx 权限。-x 参数 删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project
表示删除 st 用户对 project 目录的 ACL 权限。-b 删除所有的 ACL 权限,例如 setfacl -b /project
表示删除有关 project 目录的所有 ACL 权限。-d 设定默认 ACL 权限,命令格式为 "setfacl -m d:u:用户名:权限 文件名"(如果是群组,则使用 d:g:群组名:权限),只对目录生效,指目录中新建立的文件拥有此默认权限,例如 setfacl -m d:u:st:rx /project
表示 st 用户对 project 目录中新建立的文件拥有 rx 权限。-R 递归设定 ACL 权限,指设定的 ACL 权限会对目录下的所有子文件生效,命令格式为 "setfacl -m u:用户名:权限 -R 文件名"(群组使用 g:群组名:权限),例如 setfacl -m u:st:rx -R /project
表示 st 用户对已存在于 project 目录中的子文件和子目录拥有 rx 权限。-k 删除默认 ACL 权限。
setfacl -m :给用户或群组添加ACL权限
举个例子:
- 老师使用 root 用户,并作为 /project 的所有者,对 project 目录拥有 rwx 权限;
- 新建 tgroup 群组,并作为 project 目录的所属组,包含本班所有的班级学员(假定只有 zhangsan 和 lisi),拥有对 project 的 rwx 权限;
- 将其他用户访问 project 目录的权限设定为 0(也就是 ---)。
- 对于试听学员 st 来说,我们对其设定 ACL 权限,令该用户对 project 拥有 rx 权限。
可以看到,通过设定 ACL 权限,我们可以单独给 st 用户分配 r-x 权限,而无需给 st 用户设定任何身份。
同样的道理,也可以给用户组设定 ACL 权限,
setfacl -d:设定默认 ACL 权限
既然已经对 project 目录设定了 ACL 权限,那么,如果在这个目录中新建一些子文件和子目录,这些文件是否会继承父目录的 ACL 权限呢?执行以下命令进行验证:
可以看到,这两个新建立的文件权限位后面并没有 "+",表示它们没有继承 ACL 权限。这说明,后建立的子文件或子目录,并不会继承父目录的 ACL 权限。
当然,我们可以手工给这两个文件分配 ACL 权限,但是如果在目录中再新建文件,都要手工指定,则显得过于麻烦。这时就需要用到默认 ACL 权限。
默认 ACL 权限的作用是,如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。需要注意的是,默认 ACL 权限只对目录生效。
例如,给 project 文件设定 st 用户访问 rx 的默认 ACL 权限,可执行如下指令:
原先的 abc 和 d1 还是没有 ACL 权限,因为默认 ACL 权限是针对新建立的文件生效的。
对目录设定的默认 ACL 权限,可直接使用 setfacl -k 命令删除。例如:
[root@localhost /]# setfacl -k project
setfacl -R:设定递归 ACL 权限
[root@localhost project]# setfacl -m u:st:rx -R project [root@localhost project]# ll 总用量 8 -rw-r-xr--+ 1 root root 01月19 05:20 abc -rw-rwx--+ 1 root root 01月19 05:33 bcd drwxr-xr-x+ 2 root root 4096 1月19 05:20 d1 drwxrwx---+ 2 root root 4096 1月19 05:33 d2 #abc和d1也拥有了ACL权限
注意,默认 ACL 权限指的是针对父目录中后续建立的文件和目录会继承父目录的 ACL 权限;递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录会继承父目录的 ACL 权限。
setfacl -x:删除指定的 ACL 权限
使用
setfacl -x
命令,可以删除指定的 ACL 权限,例如,删除前面建立的 st 用户对 project 目录的 ACL 权限,执行命令如下:[root@localhost /]# setfacl -x u:st project #删除指定用户和用户组的ACL权限 [root@localhost /]# getfacl project # file:project # owner: root # group: tgroup user::rwx group::rwx group:tgroup2:rwx mask::rwx other::--- #st用户的权限已被删除
setfacl -b:删除指定文件的所有 ACL 权限
此命令可删除所有与指定文件或目录相关的 ACL 权限。例如,现在我们删除一切与 project 目录相关的 ACL 权限,执行命令如下:
[root@localhost /]# setfacl -b project #会删除文件的所有ACL权限 [root@localhost /]# getfacl project #file: project #owner: root # group: tgroup user::rwx group::rwx other::--- #所有ACL权限已被删除