ACL入门
2014-08-14
背景
文件系统上,文件权限管理的时候,通常有一个词语:ACL。ACL到底是什么?
是什么
(侧重于ACL能做什么事)
ACL(Access Control List
,访问控制列表),并不用于设定文件
/目录
的owner、group、others的read、write、execute(r
,w
,x
)权限,而是除此权限设置之外的更细节的权限设置。
特别说明:实际上,ACL也可以设置文件owner、group、others对应的r
/w
/e
权限,但我们通常使用chmod
命令来实现此功能,而倾向将ACL用于除此之外的权限设置。
ACL设定的权限主要有:
- 使用者(
user
):设置某个使用者(user
)读、写、执行一个文件的权限;解释:此处的user
,不是owner
,而是其他的用户; - 群组(
group
):设置某个群组(group
)读、写、执行一个文件的权限;解释:此处的group
不是指,文件对应的owning group
的执行权限,而是除owning group
之外的其他group
,操作此文件的权限; - 默认属性(
mask
):设定某一个目录
之下,新建文件
/目录
时,这些新建的文件
/目录
的默认权限;
(上面内容有待补充)
怎么用
ACL(访问控制列表
),是Unix-like操作系统权限的额外支持项目,需要文件系统(File System
)的支持。当前大部分文件系统都支持ACL,例如:EXT2/3
、JFS、XFS等。
是否支持ACL
使用命令dumpe2fs -h /dev/sda1
查看某一分区上文件系统是否支持ACL,例如:
[root@localhost devp]# dumpe2fs -h /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
...
Default mount options: user_xattr acl
...
注:dumpe2fs
含义:dump ext2/ext3/ext4 filesystem information.
是否启用ACL
文件系统支持ACL,即有能力开启ACL,但是文件系统需要开启ACL,通过如下方式来查询是否开启ACL:
# 直接参阅挂载参数
[root@localhost ~]# mount
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
备注:“是否支持ACL”和“是否启用ACL”这两部分,自己理解不能肯定,需要补充。
两个命令
filesystem启动ACL支持之后,就可以设定和查看ACL了,主要是两条命令:
getfacl
:查看文件的ACL;setfacl
:设置文件的ACL;
这两个命令侧重于使用命令:man [COMMAND]
来查看命令细节。两个命令相互配合使用,通常setfacl
之后,跟着一个getfacl
来查看设置是否成功。
几个场景和实例
简介####
setfacl
:set file access control list
,设置ACL。命令详情如下:
[superman@localhost /]$ setfacl --help
setfacl 2.2.49 -- `set file access control lists`
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl modify the current ACL(s) of file(s)
-M, --modify-file=file read ACL entries to modify from file
-x, --remove=acl remove entries from the ACL(s) of file(s)
-X, --remove-file=file read ACL entries to remove from file
-b, --remove-all remove all extended ACL entries
-k, --remove-default remove the default ACL
--set=acl set the ACL of file(s), replacing the current ACL
--set-file=file read ACL entries to set from file
--mask do recalculate the effective rights mask
-n, --no-mask don't recalculate the effective rights mask
-d, --default operations apply to the default ACL
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--restore=file restore ACLs (inverse of `getfacl -R')
--test test mode (ACLs are not modified)
-v, --version print version and exit
-h, --help this help text
getfacl
:get file access control lists
,查看ACL。命令详情如下:
[god@localhost /]$ getfacl -h
getfacl 2.2.49 -- get file access control lists
Usage: getfacl [-aceEsRLPtpndvh] file ...
-a, --access display the file access control list only
-d, --default display the default access control list only
-c, --omit-header do not display the comment header
-e, --all-effective print all effective rights
-E, --no-effective print no effective rights
-s, --skip-base skip files that only have the base entries
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
-t, --tabular use tabular output format
-n, --numeric print numeric user/group identifiers
-p, --absolute-names don't strip leading '/' in pathnames
-v, --version print version and exit
-h, --help this help text
场景1:设置user权限####
场景描述:让devp用户获取查看
/root
目录的权限。
设置user权限的命令如下:
setfacl -m u:devp:rx /root
查看结果:
// 查看目录详情(不是目录下内容列表)
// 查询结果中`dr-xr-x---+`,最后的`+`表示有ACL附加权限;
[god@localhost /]# ll -d root
dr-xr-x---+ 18 root root 4096 Aug 5 09:32 root
// 查看ACL详情
[god@localhost /]# getfacl root
# file: root
# owner: root
# group: root
user::r-x //`owner`的权限
user:devp:r-x //用户`devp`的权限(ACL设置的细节)
group::r-x //`owning group`的权限
mask::r-x //什么含义?(ACL设置的细节)
other::---
场景2:取消user权限####
场景描述:在场景1中设置了devp用户查看
/root
目录的权限,如何取消devp用户的这一权限呢?
取消user
权限的命令如下:
setfacl -x u:devp /root
查看结果:
// 查看ACL详情
[god@localhost /]# getfacl root
# file: root
# owner: root
# group: root
user::r-x //`owner`的权限
group::r-x //`owning group`的权限
mask::r-x
other::---
场景3:设置group权限####
场景描述:如何设置
devp
组拥有/root
目录的查看权限?
设置命令:
set -m g:devp:rx /root
查询结果:
(未完待续,各个典型场景)
什么原理
(参考:Hadoop技术内幕中HDFS的架构设计与实现原理)
HDFS中的ACL
Hadoop从2.4.0版本开始支持ACL(英文原版的出处),并且已经有人对此进行了测试:http://blog.csdn.net/j2eelamp/article/details/24594159
原文地址:https://ningg.top/linux-acl/