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