赞
踩
如下图所示,假如一个目录已经给所有者,所属组和其他人分配了相应的权限,然后这个时候又有了一个用户st,他需要有读和执行的权限,不能有写权限,所以用户st放在所属组和其他人中都不合适,这个目录的三个身份就不够用了,ACL权限就是专门用来解决身份不足的情况
如果要使用ACL权限,前提是需要让文件所在的分区支持ACL权限
# 首先查看分区 [root@VM-8-7-centos ~]# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 929420 0 929420 0% /dev tmpfs 940996 24 940972 1% /dev/shm tmpfs 940996 660 940336 1% /run tmpfs 940996 0 940996 0% /sys/fs/cgroup /dev/vda1 61795096 15946480 43231952 27% / tmpfs 188200 0 188200 0% /run/user/0 overlay 61795096 15946480 43231952 27% /var/lib/docker/overlay2/0ca88d9cb9071520ac38390320ff79125b8c9d1bb917a7037a0df7dd0bd10097/merged # dumpe2fs 命令是查询指定分区详细文件系统信息的命令 # 选项:-h 仅显示超级块中信息,而不显示磁盘块组的详细信息 [root@VM-8-7-centos ~]# dumpe2fs -h /dev/vda1 dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: <none> Last mounted on: / Filesystem UUID: 4b499d76-769a-40a0-93dc-4a31a59add28 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr re... Filesystem flags: signed_directory_hash Default mount options: user_xattr acl # 默认挂载选项,支持acl,一般的情况下也就是都支持acl,只是大家需要了解一下 Filesystem state: clean Errors behavior: Continue ......
一般的情况下,在现在的linux系统中,根目录分区是默认开启acl的,我们只是需要了解一下这个步骤,但如果没有开启,就需要我们自己来开启了
# 临时开启分区ACL权限,通过命令实现,服务器重启就失效了
# 重新挂载根分区,并挂载加入acl权限
[root@VM-8-7-centos ~]# mount -o remount,acl /
# 永久开启分区ACL权限
# 修改/etc/fstab文件 ---------------------------------------------------就是在这里加入,acl
[root@VM-8-7-centos ~]# vim /etc/fstab
UUID=4b499d76-769a-40a0-93dc-4a31a59add28 / ext4 defaults,acl 1 1
# 然后挂载文件系统或重启系统,使修改生效
[root@VM-8-7-centos ~]# mount -o remount /
查看ACL权限
命令名称:getfacl
语法:getfacl 文件名/目录
[root@VM-8-7-centos tmp]# getfacl project/
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x # 附加用户的ACL权限
group::rwx
mask::rwx
other::---
设定ACL权限
命令名称:setfacl
语法:setfacl 选项 文件名
选项:
案例
现在创建一个目录,满足上图中的情况
[root@VM-8-7-centos tmp]# mkdir project
# 创建一个用户组,并创建两个用户
[root@VM-8-7-centos tmp]# groupadd tgroup
[root@VM-8-7-centos tmp]# useradd -G tgroup stu1
[root@VM-8-7-centos tmp]# useradd -G tgroup stu2
# 改变该目录的所有者所属组,并赋予相应的权限
[root@VM-8-7-centos tmp]# chown root:tgroup project/
[root@VM-8-7-centos tmp]# chmod 770 project/
[root@VM-8-7-centos tmp]# ll
total 4
drwxrwx--- 2 root tgroup 4096 Apr 10 09:48 project
基本环境创建好了后,创建st用户,并设定ACL权限
[root@VM-8-7-centos tmp]# useradd st # 给用户设定读和执行的权限 [root@VM-8-7-centos tmp]# setfacl -m u:st:rx project/ # 可以看到这里 第一个字段后面多了一个+号,就表示有ACL附加权限了 [root@VM-8-7-centos tmp]# ll total 4 drwxrwx---+ 2 root tgroup 4096 Apr 10 09:48 project # 查看附加权限 [root@VM-8-7-centos tmp]# getfacl project/ # file: project/ # owner: root # group: tgroup user::rwx user:st:r-x group::rwx mask::rwx other::---
u:st:rx,其中第一个字段u代表用户,如果是组的话就用g;第二个字段代表用户名或组名;第三个字段代表相应的读写执行权限
# 给用户组设定ACL权限
[root@VM-8-7-centos tmp]# groupadd tgroup2
# 主要就是将第一个字段u换成g
[root@VM-8-7-centos tmp]# setfacl -m g:tgroup2:rwx project/
[root@VM-8-7-centos tmp]# getfacl project/
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
最大有效权限
我们先看上面/tmp/project
目录现在的ACL权限
[root@VM-8-7-centos tmp]# getfacl project/
# file: project/
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:rwx
mask::rwx
other::---
其中user、group、other我们的知道,mask其实就是最大有效权限
mask是用来指定最大的有效权限的,如果我给用户赋予了ACL权限,是需要和mask的权限相与才能得到用户真正权限
# 修改最大有效权限 使用m:权限的格式
[root@VM-8-7-centos tmp]# setfacl -m m:rx 文件名
删除ACL权限
删除指定用户的权限
setfacl -x u:用户名 文件名或目录
删除指定用户组的ACL权限
setfacl -x g:组名 文件名或目录
删除文件所有的ACL权限
setfacl -b 文件名或目录
递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
其实就是普通的设定ACL权限的时候加一个-R
的选项,注意这里的-R
不能放在前面,只能放在这个位置
语法:setfacl -m u:用户名:权限 -R 目录名
默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
其实就是在u:用户名:权限
的前面加一个d:
语法:setfacl -m d:u:用户名:权限 目录名
也就是说,递归设置ACL权限的时候,只是所有子目录已经存在了的 目录和文件设定ACL权限,但是新创建的文件是没有ACL权限的。而默认ACL权限就是管新建的子文件的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。