1. ACL权限简介
当一个特殊用户或者组(比如:spuser)的权限,不能属于Linux分配的三种身份(u:所有者 g:所属组 o:其他人)权限,同时,又必须给它分配一个不同于这三种权限的权限时,可以使用acl权限。
acl权限可以给一个特殊用户或者组单独分配权限。
2. 开启ACL权限
是否能够对一个文件设置acl权限,关键在于文件所在的分区是否开启(或者说支持)ACL权限。
一般来说,我们都是对根分区的某个文件来设置ACL权限。
可以先使用df命令,查看磁盘的分区情况:
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.6G 854M 7.3G 11% /
tmpfs 504M 0 504M 0% /dev/shm
/dev/sda1 190M 24M 157M 13% /boot
可以看到根分区的设备文件名是 /dev/sda3,然后使用 dumpe2fs 命令查看该分区是否开启了ACL权限。
dumpe2fs -h /dev/sda3
如果上述命令的显示结果中包含 “Default mount options: user_xattr acl”,就说明根分区开启了acl权限。只有分区开启了ACL权限,才可以设置ACL权限。
一般来说,Linux系统的分区都是默认开启了ACL权限的,当然,也不排除特殊情况。
万一某个分区没有开启ACL权限,可以参考下面的两种方法。
方法一:临时开启ACL权限
只会临时生效,系统一旦重启,ACL权限就会失效。
相关命令:
mount -o remount,acl /
重新挂载根分区,使其支持ACL权限
方法二:永久开启ACL权限
修改 /etc/fstab 文件,给相关的分区加上acl权限,然后,重新挂载文件系统或重启系统,使修改生效。
vi /etc/fstab
编辑该文件
将
UUID=cd0ef157-7993-488e-ab41-40114a0643d6 / ext4 defaults 1 1
该为
UUID=cd0ef157-7993-488e-ab41-40114a0643d6 / ext4 defaults,acl 1 1
保存退出
mount -o remount /
重新挂载根分区的文件系统,使修改生效
3. 查看和设定ACL权限
3.1 查看ACL权限
命令格式:getfacl 文件或文件夹名
[root@localhost tmp]# getfacl test
# file: test
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
3.2 设置ACL权限
命令格式:setfacl 选项 文件或文件夹名
选项:
-m:设定ACL权限
-x:删除指定用户或组的ACL权限
-b:删除所有的ACL权限
-d:设定默认的ACL权限
-k:删除默认的ACL权限
-R:递归设定ACL权限
常见用法:
setfacl -m u:spuser:rx /tmp/test
对于/tmp/test文件夹,将rx(读、执行)的权限单独分配给特殊用户spuser
再来查看/tmp/test文件夹的ACL权限,结果如下:
[root@localhost tmp]# getfacl test
# file: test
# owner: root
# group: root
user::rwx
user:spuser:r-x
group::r-x
mask::r-x
other::r-x
给用户组设定ACL权限,方法如下:
groupadd tgroup2
setfacl -m g:tgroup2:rx /tmp/test
对于/tmp/test文件夹,将rx(读、执行)的权限单独分配给特殊组tgroup2
4. 最大有效权限和删除ACL权限
4.1 最大有效权限
mask是用来指定最大有效权限的。如果给某个用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。
相与是指ACL权限和mask权限同时拥有某种权限(比如读权限)时,才真正拥有该权限。
也就是说,通过acl权限分配给某个用户或者组的权限,其真正有效的权限是它和mask“相与”的结果。
修改最大有效权限(mask)的命令如下:
setfacl -m m:rx 文件名
setfacl -m m:rwx /tmp/test
将/tmp/test文件夹的最大有效权限设置为rwx
4.2 删除ACL权限
setfacl -x u:spuser /tmp/test
对于/tmp/test文件夹,删除用户spuser的acl权限
setfacl -b /tmp/test
对于/tmp/test文件夹,删除其所有的acl权限
5. 递归ACL权限和默认ACL权限
5.1 递归ACL权限
递归ACL权限是指在给文件夹递归设定ACL权限时,所有已经存在的子文件和子文件夹也会拥有相同的ACL权限。
命令格式:
setfacl -m u:用户名:权限 -R 文件夹名
或
setfacl -m g:组名:权限 -R 文件夹名
常见用法:
setfacl -m u:spuser:rx -R /tmp/test
对于/tmp/test及其已经包含的子文件和子文件夹,将rx的权限单独分配给特殊用户spuser
注意:上面通过 -R 递归赋予的ACL权限,只能对test文件夹中已经存在的子文件和子文件夹有效。如果是之后新创建的子文件或者子文件夹,也需要分配acl权限的话,必须用到下面的默认acl权限。
5.2 默认ACL权限
默认ACL权限是指如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件和子文件夹都会自动继承父目录的ACL权限。
命令格式:setfacl -m d:u:用户名:权限 文件夹名
常见用法:
setfacl -m d:u:spuser:rx /tmp/test
对于/tmp/test及其将要包含的新的子文件和子文件夹,将rx的权限单独分配给特殊用户spuser。