setfacl 命令的常用用法

时间:2023-01-31 08:28:15
setfacl命令----可以用来细分linux下的文件权限。
chmod命令----可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。
换句话说,setfacl可以更精确的控制权限的分配。
比如:让某一个用户对某一个文件具有某种权限。

这种独立于传统的u,g,o的rwx权限之外的具体权限设置叫ACL(Access Control List)
ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助。
如,某一个文件,不让单一的某个用户访问。
setfacl命令可以识别以下的规则格式:
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效权限掩码
[d[efault]:] o[ther] [:perms] 其他的权限 
 
# getfacl /tengqing/ 
getfacl: Removing leading '/' from absolute path names
# file: tengqing/                      #文件名为:tengqing
# owner: root                          #文件拥有者是root
# group: root                          #文件属组是group
user::rwx                              #拥有者root的权限
user:tengqing:rwx                      #用户tengqing权限,通过命令:setfacl -m u:tengqing:rwx tengqing 来可以设定
group::r-x                             #属组root的权限
mask::rwx                              #掩码
other::r-x                             #其它人的权限
default:user::rwx                      #默认权限,当用户创建文件时,会使用这个权限应用到新创建的文件
default:user:tengqing:rwx              #用户tengqing的默认权限,通过命令:setfacl -m d:u:tengqing:rwx tengqing 来设定
default:group::r-x
default:mask::rwx
default:other::r
-x

 

# setfacl --version                        #本篇所使用的setfacl版本
setfacl 2.2.49 
# tune2fs -l /dev/sda3 | grep option       #查看文件系统是否支持acl权限控制
Default mount options:    acl  
开启acl支持有两种方法:
   1)、修改mount选项:
# mount -o remount,acl /dev/vda3 /mnt/acltest
# vim /etc/fstab                       #开机自动挂载
/dev/vda3 /mnt/acltest ext4 defaults,acl 0 0 2)

        2)、使用tune2fs修改文件系统信息:

  tune2fs开启acl后已是永久有效,无需再改fstab的mount选项:
# tune2fs -o acl /dev/vda3           #修改文件系统自身信息来设置acl选项
# tune2fs -o ^acl /dev/vda3          #取消acl选项

# setfacl -m u:joe:rx bobdir/        #给某个用户设置权限
# setfacl -m g:aclgp1:rx bobdir/ #给某个组设置权限
# setfacl -x g:aclgp1 bobdir/ #取消某项权限

 

对于组权限,setfacl设置的权限只对主组(即useradd -g或usermod -g的组)有效,对附加组(即useradd -G或usermod -aG的组)无效,即使文件的所有组已改为附加组。

setfacl和chmod设置的权限可以相互覆盖,当二者设置的权限不一致时,以使用getfacl看到的“#effective:”后的权限为准。