文件权限 --- setfacl 和 getfacl。
acl:针对单一使用者,单一文件和目录来进行rwx的权限修改。
setfacl:配置单一使用者,对单一文件和目录的权限。
-m 配置 acl 参数。
-x 移除单项的 acl。
-b 移除所有 acl 的配置。
-R 递归配置 acl 参数。
setfacl 用法:
setfacl -m u:用户名:rwx 文件/目录。 针对特定的用户设置文件或者目录的 rwx 权限。
setfacl -m g:组名:rwx 文件或者目录。 针对特定的组设置文件或者目录的 rwx 权限。
setfacl -m m:rwx 修改 mask 值。 mask 定义权限的上限。 1、权限的合集(特定用户,特定组,所属组的并集) 2、如果 mask 中没有的权限,即使 setfacl 设定了,也不会有 setfal 设置的权限。
getfact 文件名:查看文件或目录的权限相关信息。
getfact 文件名:查看文件或目录的权限相关信息。
1、红色下划线:创建 test01.txt 文件。
2、黄色下划线:getfacl test01.txt,查看文件或目录的权限相关信息。
3、# file: test01.txt:文件名。
# owner: root:拥有者。
# group: root:所属组。
user::rw-:拥有者权限。
group::r--:所属组权限。
other::r--:其他人权限:

-m 配置 acl 参数:
1、setfacl -m u:用户名:rwx 文件名 / 目录。设置特定用户 rwx 权限。
2、红色下划线:setfacl -m u:user1:rwx test01.txt,单独设置 user1 用户对 test01.txt 文件拥有 rwx 权限。
3、黄色下划线:getfacl test01.txt。此时,多了一项特定用户的权限。user:user1:rwx 表明 user1 特定用户对 test01.txt 这个文件有 rwx的权限。

4、通过 ll 查看文件详情。可以观察到文件权限最后有一个 + 号。这个标识是管理员(root)对 test01.txt 这个文件运用了 acl 。

1、setfacl -m g:组名:rwx 文件或者目录。设置特定组 rwx 权限。
2、红色下划线:setfacl -m g:user1:rwx test01.txt,单独设置 user1 组对 test01.txt 文件拥有 rwx 权限。
3、黄色下划线:getfacl test01.txt。group:user1:rwx 表明 user1 特定组内成员对 test01.txt 这个文件有 rwx的权限。

-x 移除单项的 acl:
1、setfacl -x u:用户名 文件名。(移除指定用户对文件或目录的 acl)
2、红色下划线:通过 ll 查看 test01.txt 文件,权限后面有 + 号。知道这是设置了 acl 的文件。
3、黄色下划线:getfacl test01.txt 查看到 test01.txt 这个文件拥有特定用户(user1)和特定组(user1)。

4、蓝色下划线:setfacl -x u:user1 test01.txt。移除 test01.txt 文件特定用户 user1 的权限。
5、绿色下划线:getfacl test01.txt,再查看 test01.txt 的时候,特定用户 user1 已经被移除。只剩下特定组的权限。由于还有特定组的存在,所以 ll 查看 test01.txt 的时候,权限最后还是有一个 + 号存在。表明这个文件还有管理员(root)设置的 acl。

移除特定组也是一样。
1、红色下划线:test01.txt 现在有特定用户和特定组。
2、黄色下划线:setfacl -x g:user1 test01.txt。移除特定组,剩下一个特定用户的权限。

-b 移除所有 acl 的配置:
1、setfacl -b 文件名 / 目录名。(移除文件 / 目录的 acl)
2、红色下划线:管理者(root)设置了 acl 的 test01.txt 文件通过 ll 查看详细信息,权限最后会有 + 号。
3、黄色下划线:getfacl test01.txt,查看 test01.txt 文件有哪些特定用户 和 特定组。例中有特定用户 user1 和 特定组 user1。
4、蓝色下划线:setfacl -b test01.txt 移除 test01.txt 的所有特定权限。并通过 getfacl test01.txt 查看移除成功。
5、绿色下划线:移除了acl 特定权限的文件通过 ll 查看,文件权限会恢复原样,没有 + 号。

mask 权限:
1、绿色下划线:mask 定义权限的上限 rwx。
2、mask权限的定义,它是(特定用户,特定组,所属组)的并集。也就是红色下划线特定用户 user、黄色下划线所属组 group 和 蓝色下划线特定组 group 所拥有的权限并集提取出来组成 mask 权限。如图例 红色下划线特定用户 user1 的权限是 rwx、黄色下划线所属组权限 r-- 和蓝色下划线特定组权限 rwx。它们三者的权限并集是 rwx。所以 mask 权限是 rwx。

如果 mask 中没有的权限,即使 setfacl 设定了,实际权限也不会有 setfacl 设置的权限。
1、红色下划线:test01.txt 的 mask 权限是 rwx。
2、黄色下划线:setfacl -m m:r test01.txt 设置 test01.txt 的 mask 值为 r--。
3、蓝色下划线:再次 getfacl test01.txt 查看,虽然特定用户和特定组通过 setfacl 设置了权限为 rwx。实际上它们的有效权限是 r--。

-R 递归配置 acl 参数:
1、首先创建测试目录和文件。创建路径如下。

2、setfacl -R -m u:user1:rwx /tmp/test/:针对 user1 用户递归创建 test 目录的 rwx 权限。加上 -R 选项后,user1 用户对于test 目录下的子目录,文件都是 rwx 的权限。
红色下划线:针对 user1 用户递归创建 test 目录的 rwx 权限。
黄色下划线:getfacl test/ 查看 test 目录的特定权限。从 file 可以看出路径是 test/,特定用户是 user1。

蓝色下划线:getfacl test / test01 查看 test01 目录的特定权限。从 file 可以看出路径是 test/test01/,特定用户是 user1。

绿色下划线:getfacl test / test01 / test01.txt 查看 test01.txt 文件的特定权限。从 file 可以看出路径是 test / test01 / test01.txt,特定用户是 user1。

另外,可以通过 ll 查看每层每级的详细信息。可以看出 test 目录下的每层每级的目录 和 文件权限最后都会有 + 号。setfacl -R -m 可以递归创建特定权限。

-x 移除单项最底层的 acl 对递归层级的关系:
1、红色下划线:setfacl -x u:user1 test/test01/test01.txt:移除最底层 text01.txt 文件的特定权限。
2、黄色下划线:test01.txt 文件的特定权限被移除。
3、蓝色下划线:test01.txt 文件的上一层目录 test01 仍然有特定权限。

-x 移除单项中间层的 acl 对递归层级的关系:
1、通过 getfacl 查看 test 目录以及递归的子目录和文件,它们都存在特定用户 user1 的 rwx 权限。

2、setfacl 移除中间层的 test01 目录的特定用户 user1。

3、通过 getfacl 查看 test 目录以及递归的子目录和文件,除了执行 setfacl -x 的 test01 目录移除了特定用户 user1之外,它的父母目录 test 目录 和 它的子文件 test.txt 文件仍有特定用户 user1。也就是说,setfacl -x 移除只针对单一文件或目录,不会对上层 或 下层构成影响。

-x 移除单项父级的 acl 对递归层级的关系:
1、同理,shefacl -x 移除了父目录的特殊用户,不影响子目录 / 子文件的特定用户权限。
红色下划线:setfacl -x u:user1 test/ :移除 test 目录的 user1 特定用户。
黄色下划线:test 目录的 user1 特定用户被移除。
蓝色下划线:test 的子目录,test01 的user1 特定用户还在。
绿色下划线:test 的子文件,test01.txt 的user1 特定用户还在。

-x 移除只针对当前文件 / 目录起效。不会对存在特定用户的父级 和 存在特定用户递归的目录 / 文件有影响。
-b 移除所有的 acl 对递归层级的关系:
1、首先,setfacl 添加 test 目录以及递归下的子目录 和 子文件的特定用户 user1。

2、test 目录移除了所有特定用户,所以 test 目录已经没有了特定用户。而,test 目录下的 test01目录 和 test01目录下的 test01.txt 文件仍存在特定用户user1。

setfacl -b 移除所有特定用户也是针对单一目录或文件,它不会影响子目录下的特定用户权限。
网友评论