ACL机制涉及两条命令:setfacl 、getfacl
ACL来源
owner,group,othre搭配的三种权限rwx中,没办法针对单一用户或者某个组。
ACL可以针对单一用户、单一文件或者目录进行rwx权限设置。
用mount命令查看根目录挂载的分区好,再用dumpe2fs命令查看该分区的superblock内容确定是否支持acl,一般都支持的了。
jammgit@jammg:~$ sudo dumpe2fs -h /dev/sda12 | grep acl dumpe2fs 1.42.12 (29-Aug-2014) Default mount options: user_xattr acl
也可以直接修改/etc/fstab文件,加上acl。
如果系统没加上acl支持,可以:
#mount -o remount,acl /
setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名 -m 设置后续的acl参数给指定目标文件 -x 删除,和m选项相反 -b 删除所有acl参数 -k 删除默认的acl参数 -R 递归设置(针对子目录) -d 设置默认acl参数,只对目录有效
setfacl 、getfacl格式:
setfacl u:[用户列表]:[rwx] 目标 //针对用户。用户列表为空时是指文件持有者 setfacl g:[用户组列表]:[rwx] 目标 // 针对用户组 setfacl -m m:[rwx] 目标 // 设置文件mask getfacl 目标
例子
jammgit@jammg:/tmp$ setfacl -m u:jammgit_1:rwx testacl jammgit@jammg:/tmp$ ls -la | grep testacl -rw-rwxr--+ 1 jammgit jammgit 0 3月 30 18:40 testacl
jammgit@jammg:/tmp$ getfacl testacl # file: testacl # owner: jammgit # group: jammgit user::rw- // 用户权限 user:jammgit_1:rwx // acl机制针对jammgit_1设置的权限,优先级比ls查看到的大。 group::rw- // 用户组权限 mask::rwx // 屏蔽 other::r-- //其它权限
例如,如果设置mask为r:
jammgit@jammg:/tmp$ setfacl -m m:r testacl jammgit@jammg:/tmp$ getfacl testacl # file: testacl # owner: jammgit # group: jammgit user::rw- user:jammgit_1:rwx #effective:r-- group::rw- #effective:r-- mask::r-- other::r--
此时,虽然设置了jammgit_1为rwx,但实际是只有r;另外,用户组也收到影响。