前言
ACL权限 Access Control List
适用于当一个用户不满足所有者owner
, 所属组group
, 其他人other
的情况。
比如一个家庭账本权限为-rwxrwx---
, 所有者owner
是我, 所属组group
是直系亲属, 其他人other
是陌生人。
现在三姑六婆想阅读这个家庭账本, 要求权限为r--
, 不满足拥有者(我), 所属组(直系亲属), 其他人(陌生人), 这时候就是使用ACL权限的时候。
开启ACL权限
执行以下shell
脚本, 查看是否已经开启了ACL
权限。
1 2 3 4 5 6 7 8 9
| #!/bin/bash [[ $UID != "0" ]] && echo "you must be root" && exit 1;
filesystem=$(mount | grep " / " | cut -d " " -f 5)
if [[ ${filesystem} == "ext3" ]];then /sbin/dumpe2fs -h /dev/sda2 | grep "acl" [[ $? == "0" ]] && echo "enabled acl" || echo "disabled acl" fi
|
一般默认开启, 如果没有开启, 进行以下配置即可
1 2 3 4 5
| [ahao@localhost ~]$ mount -o remount,acl /
[root@localhost ~] LABEL=/ / ext3 defaults,acl 1 1
|
查看和设置文件ACL权限
设置ACL权限用setfacl -m [u|g]:[用户名|组名]:权限 文件名
命令。
查看ACL权限用getfacl 文件名
选项 |
说明 |
使用 |
m |
设置ACL权限 |
setfacl -m [u|g]:[用户名|组名]:权限 文件名 |
x |
删除指定ACL权限 |
setfacl -x [u|g]:[用户名|组名] 文件名 |
b |
删除全部ACL权限 |
setfacl -b 文件名 |
d |
设定默认ACL权限(子文件继承目录ACL权限) |
setfacl -m d:[u|g]:[用户名|组名]:权限 文件名 |
k |
删除默认ACL权限(子文件继承目录ACL权限) |
setfacl -m |
R |
递归设置ACL权限(容易给文件x权限) |
setfacl -m [u|g]:[用户名|组名]:权限 -R 目录名 |
这是一个例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| [root@localhost ~] [root@localhost ~] [root@localhost ~] 总用量 0 drwxrwx---. 2 root root 6 11月 4 22:32 dir
[ahao@localhost ~]$ cd dir -bash: cd: dir: 权限不够
[root@localhost ~] [ahao@localhost ~]$ ll 总用量 0 drwxrwx---+ 2 root root 6 11月 4 22:32 dir
[ahao@localhost ~]$ cd dir [ahao@localhost dir]$
[ahao@localhost dir]$ getfacl ~ahao/dir/ getfacl: Removing leading '/' from absolute path names
user::rwx user:ahao:r-x group::rwx mask::rwx other::---
|
mask掩码
上面的例子在使用getfacl dir
之后, 可以看到有一项是mask
。
这个和默认权限umask
差不多, 也是一个权限掩码, 表示所能赋予的权限最大值。
这里的mask
和ACL权限
进行&与
运算, 得到的才是真正的ACL权限
。
用人话讲, 就是
你考一百分是因为实力只有一百分
我考一百分是因为总分只有一百分
mask
限制了权限的最高值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| [root@localhost ~] [root@localhost ~] getfacl: Removing leading '/' from absolute path names
user::rwx group::r-x mask::r-x other::---
[root@localhost ~] [root@localhost ~] getfacl: Removing leading '/' from absolute path names
user::rwx user:ahao:rwx group::r-x mask::rwx other::---
[root@localhost ~] [root@localhost ~] getfacl: Removing leading '/' from absolute path names
user::rwx user:ahao:rwx group::r-x mask::r-x other::---
|
mask
会限制 ACL
权限的最大值。
- 赋予
ACL
权限大于 mask
的时候, 会将 mask
撑大。