NingG +

ACL入门

背景

文件系统上,文件权限管理的时候,通常有一个词语: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设定的权限主要有:

  1. 使用者(user):设置某个使用者(user)读、写、执行一个文件的权限;解释:此处的user,不是owner,而是其他的用户;
  2. 群组(group):设置某个群组(group)读、写、执行一个文件的权限;解释:此处的group不是指,文件对应的owning group的执行权限,而是除owning group之外的其他group,操作此文件的权限;
  3. 默认属性(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了,主要是两条命令:

这两个命令侧重于使用命令:man [COMMAND]来查看命令细节。两个命令相互配合使用,通常setfacl之后,跟着一个getfacl来查看设置是否成功。

几个场景和实例

简介

setfaclset 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

getfaclget 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

Top