ACL:访问控制列表
对于传统文件来说传统权限设置太简单了,只有所有者(u),所属组(g),其他人(o)三个选项进行设置
在Centos7上默认情况下所有文件系统(xfs,ext)都有ACL功能
在Centos6上装好系统后的分区不具备ACL功能
tune2fs -l "设备名称"查看分区是否具备ACL功能
lsblk -f 查看分区列表以及文件系统
针对特定用户设置ACL权限:
setfacl -m u:[用户名]:[权限] "文件名"
当使用"ll"命令查看的文件前面带有"-rw-rw----+"字样的权限的时候,则说明该文件具备ACL权限,而本该为所属组的权限不再属于所属组的权限,实则是ACL中的mask权限
ACL的实行顺序:
先看ACL中的用户权限,用户属于什么权限最终就是什么权限
如果一个账号属于多个组,每个组设置了不同的权限,那么这个用户就拥有两个组的累加权限
setfacl -x "ACL规则中你要删除的权限,格式为u:fang" "目录或文件名" (删除单条ACL权限)
setfacl -x g:[组名]:- or 0 "文件名" 去除组ACL的权限
setfacl -m g:[组名]:[权限] "文件名" 对普通组设置的ACL权限
setfacl -m group::[权限] "文件名" 对文件所属组设置的ACL权限
getfacl "文件名" 查看文件的ACL权限
setfacl -m mask::[权限] "文件名" 设置mask权限
setfacl -m other::[权限] "文件名" 给文件设置其他用户所拥有的权限
setfacl --set u::rw,u:fang:rw,g::r,o::- file1 使用新的ACL覆盖之前的ACL规则,默认设置权限是追加
也同时支持给目录设置ACL权限"-R"则是递归将目录下的文件都调整为跟目录一样的ACL权限
ACL同时具有可备份的作用,如果将f1文件复制成f11文件默认是不会保留ACL规则的,如果想保留就加上"-p选项"会保留原始文件ACL权限
setfacl -R "想保存的所有ACL权限的文件或目录" > "保存输出的ACL权限的文件名"
恢复ACL权限:setfacl [-R] --set-file="保留所有acl权限的文件" "需要还原ACL的目录或文件名"
setfacl --restore "保留所有acl权限的文件" (文件内容中存在的是相对路径,所以要在指定路径)
setfacl -R -M(后面写存放有ACL的文件,文件中的语法"u:fang:rwx") "目录或文件夹"
setfacl -X "编辑好的ACL删除文件" "文件或目录"
setfacl -b "文件或目录名" 清空所有的ACL权限
setfacl -x "ACL规则中你要删除的权限,格式为u:fang" "目录或文件名" (删除单条ACL权限)
setfacl -R -m d:bash:rw www/ 使www目录文件以及下面的文件和新建的文件bash用户都拥有rw权限
setfacl -k "文件或目录" 删除文件或目录的默认ACL权限也就是"d"选项赋予的默认权限
setfacl "文件名" | setfacl --set-file=- "文件名" 参照第一个文件的ACL规则设置第二个文件的ACL规则
如果ACL中"自定义指定的用户,文件所属组,自定义指定的某个组"的权限高于umask权限的话,对应的前三类用户的右边会出现#effective:[权限]字样,则说明必须要去掉,因为umask权限是最高权限
一旦有了ACL权限,chmod设置,显示的组的权限则不是组的权限了,对应的则是ACL中mask的权限
ACL的权限生效优先级是按照匹配即停的规则
顺序为:所有者,自定义用户,所属组|自定义组,other(自定义用户与所属组与自定义组的权限不能超过umask的权限,超过即会去除)
对于文件来说,访问的人分为以下几类人:
1 文件所有者
2 自定义指定的某个用户
3 文件所属组
4 自定义指定的某个组
5 其他人
mask限制的是5类人的最大权限,其中三类人都被影响,除了文件所有者以及其他人,也起到了一个限高的作用
# file: f1
# owner: root
# group: root
user::rw- (标准普通的所有者权限)
user:fang:rw- (特定用户拥有的权限)
group::--- (对文件所属组的权限)
mask::rw- (映照的普通文件中显示的组的权限)
other::--- (标准普通的other的权限)
ACL权限练习题:
一 在/testdir/dir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其他用户(不属于g1,g2,g3)不能访问这个文件夹;
1 mkdir /testdir/dir -p
2 groupadd g1,groupadd g2,groupadd g3
3 useradd alice useradd tom
4 chgrp g1 /testdir/dir (更改目录所属组)
5 chmod g+s /testdir/dir (给指定目录赋予sgid权限,使目录下新创建的文件或文件夹属组为g2)
6 gpasswd -g g2 -a alice;setfacl -R -m d:g:g2:rw,d:g:g3:r dir
7 chmod o= dir
二 备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限;
1 getfacl -R /testdir/dir > /root/acl.txt
2 setfacl -R -b /testdir/dir
3 setfacl --restore /root/acl.txt 或者 setfacl -R --set-file=/root/acl.txt dir