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
未完待续.....