facl文件访问控制
Linux文件ACL访问控制策略
facl 针对某个用户单独设置权限,权限设置精度更高
ls查看文件
查看文件权限会多出+号,意思是有facl权限
getfacl查看文件facl权限
用getfacl查看文件发现user1有了r权限
设置facl权限
为用户添加facl权限
#-m是赋予权限,u:是给用户赋予权限,r是只读权限
setfacl -m u:user1:r afile
# 给用户zhangsan添加rwx权限
setfacl -m u:zhangsan:rwx file
为用户组添加权限
查看文件权限会多出+号,意思是有facl权限
权限收回是 -x参数
# 给用户组dev添加只读权限
setfacl -m g:dev:r-- file
# 赋予group1组只读权限
## -m是赋予权限,g:是给用户组赋予权限,r是只读权限
setfacl -m g:group1:r afile
删除facl权限
# 删除指定用户的权限
setfacl -x u:zhangsan file
# 删除指定用户组的权限
setfacl -x g:dev file
清空facl权限
# 清空文件的facl权限
setfacl -b file
查看facl权限
# 查看文件的facl权限
getfacl afile
facl权限匹配规则
facl权限是从上到下匹配的,一旦匹配到就停止匹配
# 创建用户zhangsan
useradd zhangsan
# 给文件设置用户zhangsan的权限为---
setfacl -m u:zhangsan:--- file
# 给文件设置用户组zhangsan的权限为rw-
setfacl -m g:zhangsan:rw- file
# 查看facl权限
[zhangsan@localhost ~]$ getfacl file
# file: file
# owner: zhangsan
# group: zhangsan
user::rw-
user:zhangsan:---
group::rw-
group:zhangsan:rw-
mask::rw-
other::r--
# 使用zhangsan用户cat file
[zhangsan@localhost ~]$ cat file
cat: file: 权限不够
mask(最大权限)
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。
# 为/project设置mask(最大权限)为可读可执行(不可写)
[root@localhost ~]# setfacl -m m:rx /project
# 设定mask权限为r-x,使用"m:权限"格式
[root@localhost ~]# getfacl /project
#file:project
#owner:root
#group:tgroup
user::rwx
group::rwx
mask::r-x <--mask权限变为r-x
other::---
实验
# 先创建一个目录facltest
mkdir facltest
# 将权限设置为000
chmod 000 facltest
# 针对zhangsan用户设置rwx权限
setfacl -Rm u:zhangsan:rwx facltest
# facltest目录会产生rwx权限
## 注意.变成了+
[root@localhost ~]# ls -ld facltest/
d---rwx---+ 2 root root 6 8月 15 18:44 facltest/
## 这时候除了root和zhangsan用户,都无法访问facltest目录了
# 查看facltest目录的facl权限
[root@localhost ~]# getfacl facltest/
# file: facltest/
# owner: root
# group: root
user::---
user:zhangsan:rwx
group::---
mask::rwx
other::---
Linux文件ACL访问控制策略
参考链接: linux-访问控制列表.html
ACL的出现,则是为了扩展Linux的文件权限控制,以实现更为复杂的权限控制需求。其可以针对任意的用户和用户组进行权限分配(只有root用户可以定义ACL),以及默认权限分配。
查看文件是否有ACL策略
## 如果左侧的权限栏中有 + 号,就是ACL权限
[root@localhost ~]# ll new.sh
-rwxrwxr-x+ 1 root root 1500 8月 14 18:18 new.sh
设置ACL策略(setacl)
修改或设置ACL策略setfacl -m
# 修改或设置ACL策略
setfacl -m
给指定用户单独加ACL策略setfacl -m u:
setfacl -m u:user1:rwx new.sh
<br/>
给指定组单独加ACL策略setfacl -m g:
setfacl -m g:user1:rwx new.sh
mask:定义除其他人和所有者外的最大权限setfacl -m m::
除其他人和所有者外—指的就是用户组
mask权限和属组权限冲突时,以mask权限为准
# 设置mask权限
[root@localhost ~]# setfacl -m m::r new.sh
# 查看new.sh的acl策略
## 虽然group依然鱻是的r-x,但实际上只有r权限了
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
group::r-x #effective:r--
mask::r--
other::r-x
递归授权-R
-R 递归授权,对目录下已存在的目录或文件设置acl策略,但新的文件不设置ACL策略
## setfacl -Rm u:用户名:权限 目录名
setfacl -Rm u:user1:rwx dir1
## 进入dir
cd dir1
## 查看文件权限
[root@localhost dir1]# ls -la
总用量 4
drwxrwxr-x+ 2 root root 137 9月 5 22:05 .
dr-xr-x---. 9 root root 4096 9月 5 22:04 ..
-rw-rwxr--+ 1 root root 0 9月 5 22:05 test1
-rw-rwxr--+ 1 root root 0 9月 5 22:05 test10
## 查看目录下文件的ACL策略
[root@localhost dir1]# getfacl *
# file: test1
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
mask::rwx
other::r--
# file: test10
# owner: root
# group: root
user::rw-
user:user1:rwx
group::r--
mask::rwx
other::r--
删除ACL策略setacl -x
setacl -x
删除指定用户的ACL策略setfacl -x u:
# 删除user1在new.sh文件中的ACL策略
setfacl -x u:user1 new.sh
## 查看该文件删除策略后的ACL策略
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
group::r-x
group:user1:rwx
mask::rwx
other::r-x
删除指定组的ACL策略setfacl -x g:
# 删除user1组在new.sh文件中的ACL策略
setfacl -x g:user1 new.sh
## 查看该文件删除策略后的ACL策略
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
删除mask的ACL策略setfacl -x m:
# 删除mask的ACL策略
setfacl -x m: new.sh
## 查看该文件删除策略后的ACL策略
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
删除文件所有ACL策略setfacl -b
# 删除文件的所有ACL策略
setfacl -b new.sh
## 查看该文件删除策略后的ACL策略
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
默认ACL策略setacl -d
-d 只针对目录,该目录下新建的目录和文件都会继承ACL策略,老的文件不会改变现有的ACL策略,与-R递归授权正好相反。
# 创建一个新目录dir2
[root@localhost ~]# mkdir dir2
[root@localhost ~]# cd dir2
# 在新目录中创建一个老文件test1
[root@localhost dir2]# touch test1
[root@localhost dir2]# cd ..
# 为dir2目录设置默认ACL策略
[root@localhost ~]# setfacl -dm u:user1:rwx dir2
# 设置ACL策略后再创建一个新文件
[root@localhost ~]# touch dir2/test2
# 对比查看新文件和老文件的ACL策略
## 只有新文件有ACL策略,老文件没有
[root@localhost ~]# getfacl dir2/*
# file: dir2/test1
# owner: root
# group: root
user::rw-
group::r--
other::r--
# file: dir2/test2
# owner: root
# group: root
user::rw-
user:user1:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
查看文件的ACL策略getfacl
[root@localhost ~]# getfacl new.sh
# file: new.sh
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
group:user1:rwx
mask::rwx # mask是除了拥有者及其他人(other)以外的人拥有的权限
other::r-x