Linux(和其他Unix等POSIX兼容的操作系统)有一种被称为访问控制列表(ACL)的权限控制方法,它是一种权限分配之外的普遍范式。例如,默认情况下只有3个权限组:owner、group和other。而使用ACL,利用文件扩展属性保存额外的访问控制权限,就可以增加权限给其他用户或组别,而不单只是简单用"other"来统一处理其它情况。这样就可以指定允许的用户拥有权限而不再是让他们整个组都拥有权限[权限可以控制得更严格]。
ACL支持多种Linux文件系统,包括ext2, ext3, ext4, XFS, Btfrs等。
要想知道文件系统是否开启acl权限控制请使用如下命令:
$ tune2fs -l /dev/sda1 | grep option
得到了回应中形如下则表示已经开启。
Default mount options: acl
开启acl支持可以使用如下命令:
#方法一:修改/etc/fstab中mount选项
$ mount -o remount,acl /dev/sda3 /mnt/acldev
$ vim /etc/fstab
/dev/sda3 /mnt/acldev ext4 defaults,acl 0 0
#方法二:使用tune2fs修改文件系统信息
$ tune2fs -o acl /dev/sda3 开启文件系统的acl选项
$ tune2fs -o ^acl /dev/sda3 取消文件系统的acl选项
基础ACL通过两条命令管理:setfacl用于增加或者修改ACL,getfacl用于显示分配完的ACL。其中getfacl没有什么好说的,setfacl参数说明如下:
-m: 设定
u:UID:perm
g:GID:perm
d:u:UID:perm
d:g:GID:perm
-x:取消
u:UID
g:GID
-b:删除所有扩展的acl规则
-R:递归执行
-h:察看帮助,如果需要了解更多的命令行参数的话
针对某个用户设置权限请使用[用户名:manager]:
$ setfacl -m u:manager:rx /home/593668.com
或者给某个组设置权限[组名:manager]:
$ setfacl -m g:manager:rx /home/593668.com
取消某项权限[组名:manager,用户名:manager]:
# setfacl -x g:manager /home/593668.com
# setfacl -x u:manager /home/593668.com
注意事项
1)对于组权限,setfacl设置的权限只对主组(即useradd -g或usermod -g的组)有效,对附加组(即useradd -G或usermod -aG的组)无效,即使文件的所有组已改为附加组。
2)setfacl和chmod设置的权限可以相互覆盖,当二者设置的权限不一致时,以使用getfacl看到的“#effective:”后的权限为准。对一个目录设置了setfacl后,不要再对其chmod,否则chmod的权限将覆盖先前setfacl的权限。
3)用户访问文件权限应用次序如下:
owner --> group--> other
owner --> facl,user --> group --> facl,group --> other
评论