linux | setfacl - - 细分文件权限


​chmod可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限

ACL可以针对单一用户,单一文件或目录来进行r,w,x的权限控制

setfacl [-bkndRLP] { -m | -M | -x | -X . . . } file . . .
-m --modify-acl 更改文件的访问控制列表
-M --modify-file=file 从文件读取访问控制列表条目更改
-x --remove=acl 根据文件中访问控制列表移除条目
-X --remove-file=file 从文件读取访问控制列表条目并删除
-b --remove-all 删除所有扩展访问控制列表的条目
-k --remove-default 移除默认访问控制列表
       --set=acl 设定替换当前的文件访问控制列表
       --set-file=file 从文件中读取访问控制列表条目设定
       --mask 重新计算有效权限掩码
-n --no-mask 不重新计算有效权限掩码
-d --default 应用默认访问控制列表的操作
-R --recursive 递归操作子目录
-L --logical 依照系统逻辑,跟随符号链接
-P --physical 依照自然逻辑,不跟随符号目录
       --restore=file 回复访问控制列表,和‘getfacl -R’ 作用相反
       --test  测试模式,并不真正修改访问控制列表属性
-v --version 显示版本并退出
-h --help  显示帮助信息

u:单个用户设置ACL权限

首先查看用户的默认acl权限以及chmod的属主属组以及其他用户的权限

acl权限是配合chmod权限一起使用的

-bash-4.2# mkdir makaka
-bash-4.2# chmod -R 755 makaka
-bash-4.2# ll
total 0 表示文件总共占用盘空间0块;一般一块表示512字节或1024字节.
drwxr-xr-x 2 root root 6 Jun 28 09:38 makaka


-bash-4.2# getfacl makaka
# file: makaka    ---文件名
# owner: root     ---属主用户
# group: root      ---属组
user::rwx            ---属主的acl权限
group::r-x           ---属组的权限
other::r-x            ---其他用户的权限

给test用户增加ACL权限,让他对makaka这个文件夹有可读可写可执行的权限

-bash-4.2# setfacl -m u:test:rwx makaka
-bash-4.2# getenforce makaka
Disabled
-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
user:test:rwx ---test用户的acl权限
group::r-x
mask::rwx ---mask权限
other::r-x

通过上面可以看到 多生成了两条信息

第一条 ser::testrwx  很明显可以看出是test用户的ACL权限

第二条 mask权限指的是用户或用户组能够拥有的最大ACL权限,用户,用户组拥有的最大权限 不能超过mask权限,超出的范围 无效处理

举个例子:

mask的权限是          r    -     x

test用户权限是         r    w    x

最终test权限是         r    -     x

mask权限也可以通过setfacl命令更改:

-bash-4.2# setfacl -m m:rx makaka
-bash-4.2# getenforce makaka
Disabled
-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::r-x ---mask权限更改为r-x
other::r-x

配置过ACL权限的目录 通过ll查看时,权限这部分会有一个小加号

-bash-4.2# ll
drwxrwxr-x+ 3 root root 20 Jun 28 10:58 makaka

下面测试下 test用户对makaka目录的操作 以及其他平级目录的操作

#切换到test用户创建文件夹
[test@k8s-master makaka]$ mkdir images
[test@k8s-master makaka]$ ls
images


[test@k8s-master home]$ ls
esuser java makaka test

[test@k8s-master home]$ cd java/
[test@k8s-master java]$ ls
  javav29.zip java.zip zjtq zjtq_20210618
[test@k8s-master java]$ mkdir test
mkdir: cannot create directory ‘test’: Permission denied

可以看到test用户可以查看java目录下的文件,但是不可以创建文件
因为这个用户的chmod权限是755 test拥有对这个目录 可读 可执行权限

g:用户组设置ACL权限

对用户组设置ACL权限 在用户组的用户都拥有对应的权限,可以将用户添加到一个组中,这样就不需要一个用户一个用户添加

-bash-4.2# setfacl -m g:test:rwx makaka

-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:test:rwx       ---test用户组拥有rwx权限
mask::rwx
other::r-x

关于目录的默认和递归权限

在上面 对makaka目录设置了ACL权限,可以通过ll 查看到 子级目录并没有继承父级目录二点权限

可以通过-d: 或-R  两个参数 让下级目录拥有父级的权限

在现实场景使用中 是配合使用的

-d: 的使用方式

 

#给目录设置acl权限
-bash-4.2# setfacl -m d:test:rwx makaka

-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
group:test:rwx
mask::rwx
other::r-x
---多了几条默认权限---
default:user::rwx
default:user:test:rwx
default:group::r-x
default:mask::rwx
default:other::r-x


查看下级目录的权限,可以看到权限边上没有+号
-bash-4.2# ll
total 0
drwxrwxr-x 2 test test 6 Jun 28 10:58 images
drwxr-xr-x 2 root root 6 Jun 28 14:02 test

对应的acl权限也没有增加
-bash-4.2# getfacl images/
# file: images/
# owner: test
# group: test
user::rwx
group::rwx
other::r-x

新创建一个目录

-bash-4.2# mkdir baibei
-bash-4.2# ll
total 0
drwxrwxr-x+ 2 root root 6 Jun 28 14:11 baibei
drwxrwxr-x 2 test test 6 Jun 28 10:58 images
drwxr-xr-x 2 root root 6 Jun 28 14:02 test
可以看到baibei目录权限右边有一个+号
查看baibei的acl权限
-bash-4.2# getfacl baibei
# file: baibei/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx 注意这里也有默认权限
default:user:test:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

注意 d: 的作用是增加默认权限 在执行这个命令之前创建的文件 并没有继承父目录的权限  可以通过-R 命令 递归来达到继承父级的权限

-bash-4.2# setfacl -R -m  u:test:rwx makaka
-bash-4.2# ll makaka/
total 0
drwxrwxr-x+ 3 root root 19 Jun 28 14:23 baibei
drwxrwxr-x+ 2 test test 6 Jun 28 10:58 images
drwxr-xr-x+ 2 root root 6 Jun 28 14:02 test


-bash-4.2# getfacl makaka/images
# file: makaka/images
# owner: test
# group: test
user::rwx
user:test:rwx
group::rwx
mask::rwx
other::r-x

继承了上级的权限,但是并没有默认权限,意味着在images创建下级文件,也没有test用户的acl权限

所以一般使用的时候 -R 和 d:配合使用

下级也就有默认权限,后期在images创建目录的时候 不需要再重新运行 -R 来添加权限 

-bash-4.2# setfacl -R -m d:u:test:rwx makaka
   
-bash-4.2# getfacl makaka/images/
# file: makaka/images/
# owner: test
# group: test
user::rwx
user:test:rwx
group::rwx
mask::rwx
other::r-x
这样下级也有默认权限
default:user::rwx
default:user:test:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

其他参数用法

移除文件指定用户的ACL权限

makaka这个文件 esuser拥有可读,可执行的权限

test对该文件拥有可读可写可执行权限

移除esuser用户对makaka文件的权限:

如下所示 esuser用户应有makaka的默认权限,所以删除的时候 也要加上d:

-ba-bash-4.2# setfacl -R -x d:u:esuser makaka
加上d:删除默认权限

-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:test:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

新创建的ceshi文件 没有默认权限 可以直接用过-x  u: 来清除用户的ACL权限
 

-bash-4.2# setfacl -m u:test:rwx ceshi

-bash-4.2# getfacl ceshi/
# file: ceshi/
# owner: root
# group: root
user::rwx
user:test:rwx
group::r-x
mask::rwx
other::r-x

-bash-4.2# setfacl -x u:test ceshi

-bash-4.2# getfacl ceshi/
# file: ceshi/
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x

移除指定文件扩展的ACL权限通过 -b参数 基本的属主属组其他人 的权限会保留

-bash-4.2# setfacl -b makaka

-bash-4.2# getfacl makaka
# file: makaka
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

未完待续.....

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值