linux的ACL权限是给一个文件或者目录添加指定的用户或者组,然后给其对应的权限。
一、权限的开启
CentOS7当中,无论是操作系统安装时还是之后手工创建的文件系统(xfs、ext4)均会默认开启ACL功能。
CentOS6及之前的版本,仅操作系统安装时创建的文件系统才会默认开启ACL,手工创建的文件系统,需要手工开启ACL功能。
临时开启方法:1、挂载时指定开启acl,即mount -o acl 文件系统名 挂载点
或者重新挂载 mount -o remount,acl 文件系统名/挂载点
2、修改信息 tune2fs -o acl 文件系统名
永久开启方法:编辑/etc/fstab,在该条目对应的defaults后面加上 ,acl
重启或者重新挂载可生效
二、ACL权限判断的顺序
先判断是否是文件的OWNER,如果是,则执行OWNER的权限后结束,如果不是OWNER,则判断是否是ACL的USER,如果是则执行USER权限后结束,如果不是ACL的USER, 则判断是否属于GROUP或ACL GROUP,如果是,则取最大权限(即该权限与mask权限相与)。如果不属于任何GROUP,则执行OTHER。
顺序:所有人->所有组->其他人
三、设置ACL
setfacl -m u:liubei:rx f1 给用户liubei设置ACL权限,使其对f1具有rx权限
setfacl -m g:shuguo:rwx f1 给shuguo组设置ACL权限,使其组中的用户对f1具有rwx权限
getfacl 文件/目录 显示权限信息
getfacl -R 目录 递归显示目录及其文件信息
setfacl -m mask:rwx f1 相当于 chmod g=rwx f1 修改MASK值
一旦设置了ACL权限后,原有的文件GROUP权限不可再更改,使用chmod即修改ACL MASK
ACL MASK随着新的ACL设置会被重置,重置的标准是让该文件上的所有ACL及文件原GROUP上的权限都有效。
mask只影响除所有者和other之外的人和组。
setfacl -Rm u:zhangfei:rwx acltest/ 递归设置
setfacl -x u:liubei f1 单独去除一条ACL权限
setfacl -b f1 去除该文件上ACL属性。
在/app目录下创建一个名为d1的目录,要求其owner,group均为root,权限设置为755。要求guanyu用户对该目录及所有用户在其下创建的新文件新目录均有rwx权限
答:chown root:root d1 ; chmod 755 d1 ;
对该目录有rwx权限需要setfacl -m u:guanyu:rwx d1
对其下创建的文件有rwx权限需要setfacl -m d:u:guanyu:rwx d1
setfacl -m d:u:guanyu:rwx d1 d表示设置ACL默认权限,仅影响新创建的文件及目录,不影响当前。
setfacl -x d:sunquan d1 删除一条默认权限
setfacl -k d1 删除全部默认权限
setfacl -b d1 删除全部ACL属性
getfacl -R /tmp/dir1 > acl.txt 将目录下的所有文件的ACL属性备份到文件
setfacl -R -b /tmp/dir1 清除目录下所有文件的ACL属性
setfacl -R --set-file=acl.txt /tmp/dir1 通过文件还原ACL属性的方法1
setfacl --restore acl.txt 通过文件还原ACL属性的方法2
1、在/testdir/dir里创建的新文件自动属于g1组,组
g2的成员如:alice能对这些新文件有读写权限,组g3
的成员如:tom只能对新文件有读权限,其它用户(不
属于g1,g2,g3)不能访问这个文件夹。
[[email protected] ~]# mkdir -p /testdir/dir
[[email protected] ~]# groupadd g1
[[email protected] ~]# groupadd g2
[[email protected] ~]# groupadd g3
[[email protected] ~]# useradd -G g2 alice
[[email protected] ~]# useradd -G g3 tom
[[email protected] ~]# ls -ld /testdir/dir/
drwxr-xr-x. 2 root root 6 Jul 26 15:06 /testdir/dir/
[[email protected] ~]# chgrp g1 /testdir/dir/
[[email protected] ~]# chmod g+s /testdir/dir/
[[email protected] ~]# ls -ld /testdir/dir/
drwxr-sr-x. 2 root g1 6 Jul 26 15:06 /testdir/dir/
[[email protected] ~]# chmod o=- /testdir/dir/
[[email protected] ~]# ls -ld /testdir/dir/
drwxr-s---. 2 root g1 6 Jul 26 15:06 /testdir/dir/
[[email protected] ~]# setfacl -m g:g2:rx,g:g3:rx /testdir/dir/
[[email protected] ~]# setfacl -m d:g:g2:rw,d:g:g3:r /testdir/dir/