Linux中ACL(访问控制列表)权限设置
1、ACL的功能是应对复杂用户环境的权限问题。
系统是否支持ACL是与文件系统有关的,在CentOS7之前的系统版本中用户自己手动创建的分区默认是不支持ACL的,而在装系统的时候已存在的分区是支持的。
setfacl: 设置文件或目录的ACL设置信息
命令:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
参数:
-m, --modify=acl:修改文件或目录的扩展ACL设置信息
-x, --remove=acl:从文件或目录删除一个扩展的ACL设置信息
-b, --remove-all:删除所有的扩展的ACL设置信息
-k, --remove-default:删除缺省的acl设置信息
-n, --no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定
-d, --default:设置默认的ACL设置信息(只对目录有效)
-R, --recursive:操作递归到所有子目录和 文件
1、设置用户权限:
setfacl -m u:用户名:权限 文件
2、设置组权限:
setfacl -m g:组名称:权限 文件
3、设置最大有效权限:
setfacl -m m:权限 文件
说明:
acl权限中有个"mask"的选项,它就是ACL权限的最大权限,现在是rwx,当你设置某个用户或组的ACL权限时,要跟mask的权限“相与”之后产生的权限才是该用户的最终权限,也就是加入mask的最大权限是rx,但是你给st用户设置的是rwx权限,此时st用户它的权限只有rx的权限,因为与最大权限“相与”得出的结果就是rx
4.删除权限
删除用户权限:
setfacl -x u:用户名 文件名
删除组权限:
setfacl -x g:组名称 文件名
删除整个权限:
setfacl -b 文件名
5.设置默认权限和递归权限
递归权限:
setfacl -m u:用户名:权限 -R 文件
说明:
递归只对该目录下面现有的子文件或目录有用,对于该目录下面新添加的子文件或目录没用
默认权限:
setfacl -m d:u:用户名:权限 文件
说明:
默认权限只对该目录下面新建的文件或目录有效,对已经存在的子文件无效
试验:
准备环境:
[[email protected] temp]# useradd student1
[[email protected] temp]# useradd student2
[[email protected] temp]# useradd visitor1
[[email protected] temp]# passwd student1
[[email protected] temp]# passwd student2
[[email protected] temp]# passwd visitor1
[[email protected] temp]# groupadd student_group
[[email protected] temp]# groupadd other_student
[[email protected] temp]# mkdir project
[[email protected] temp]# chown root:student_group project/
[[email protected] temp]# chmod 770 project/
[[email protected] temp]# gpasswd -a student1 student_group
[[email protected] temp]# gpasswd -a student2 student_group
student1有权限:
[[email protected] ~]$ cd /xiaol/temp/project/
[[email protected] project]$ touch a.txt
visitor1没有权限
[[email protected] ~]$ cd /xiaol/temp/project/
-bash: cd: /xiaol/temp/project/: 权限不够
给visitor1设置权限:
[[email protected] temp]# setfacl -m u:visitor1:rx project/
查看权限:
[[email protected] temp]# getfacl project/
# file: project/
# owner: root
# group: student_group
user::rwx
user:visitor1:r-x
group::rwx
mask::rwx
other::---
visitor1有权限了
[[email protected] ~]$ cd /xiaol/temp/project/
[[email protected] project]$
给other_student组设置权限:
[[email protected] temp]# setfacl -m g:other_student:rx project/
查看权限:
[[email protected] temp]# getfacl project/
# file: project/
# owner: root
# group: student_group
user::rwx
user:visitor1:r-x
group::rwx
group:other_student:r-x
mask::rwx
other::---
设置最大权限:
[[email protected] temp]# setfacl -m m:rx project/
查看权限
[[email protected] temp]# getfacl project/
# file: project/
# owner: root
# group: student_group
user::rwx
user:visitor1:r-x
group::rwx #effective:r-x
group:other_student:r-x
mask::r-x
other::---
删除权限:
删除visitor1权限
[[email protected] temp]# setfacl -x u:visitor1 project/
删除other_student权限
[[email protected] temp]# setfacl -x g:other_student project/
查看权限:
[[email protected] temp]# getfacl project/
# file: project/
# owner: root
# group: student_group
user::rwx
group::rwx
mask::rwx
other::---
设置递归权限
[[email protected] temp]# setfacl -m u:visitor1:rx -R project/
进入project查看内部文件权限
[[email protected] project]$ getfacl a.txt
# file: a.txt
# owner: student1
# group: student1
user::rw-
user:visitor1:r-x
group::rw-
mask::rwx
other::r--
新建文件并查看权限
[[email protected] project]# touch b.txt
[[email protected] project]# getfacl b.txt
# file: b.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
设置默认权限
[[email protected] temp]# setfacl -m d:u:visitor1:rx project/
新建文件并查看权限
[[email protected] project]# touch c.txt
[[email protected] project]# getfacl c.txt
# file: c.txt
# owner: root
# group: root
user::rw-
user:visitor1:r-x #effective:r--
group::rwx #effective:rw-
mask::rw-
other::---