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等。

使用命令dumpe2fs -h /dev/sda1查看某一分区上文件系统是否支持ACL,例如:

  1. [root@localhost devp]# dumpe2fs -h /dev/sda1
  2. dumpe2fs 1.41.12 (17-May-2010)
  3. ...
  4. Default mount options: user_xattr acl
  5. ...

注:dumpe2fs含义:dump ext2/ext3/ext4 filesystem information.

文件系统支持ACL,即有能力开启ACL,但是文件系统需要开启ACL,通过如下方式来查询是否开启ACL:

  1. # 直接参阅挂载参数
  2. [root@localhost ~]# mount
  3. proc on /proc type proc (rw)
  4. sysfs on /sys type sysfs (rw)
  5. tmpfs on /dev/shm type tmpfs (rw)
  6. /dev/sda1 on /boot type ext4 (rw)

备注:“是否支持ACL”和“是否启用ACL”这两部分,自己理解不能肯定,需要补充。

filesystem启动ACL支持之后,就可以设定和查看ACL了,主要是两条命令:

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

简介####

setfaclset file access control list,设置ACL。命令详情如下:

  1. [superman@localhost /]$ setfacl --help
  2. setfacl 2.2.49 -- `set file access control lists`
  3. Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
  4. -m, --modify=acl modify the current ACL(s) of file(s)
  5. -M, --modify-file=file read ACL entries to modify from file
  6. -x, --remove=acl remove entries from the ACL(s) of file(s)
  7. -X, --remove-file=file read ACL entries to remove from file
  8. -b, --remove-all remove all extended ACL entries
  9. -k, --remove-default remove the default ACL
  10. --set=acl set the ACL of file(s), replacing the current ACL
  11. --set-file=file read ACL entries to set from file
  12. --mask do recalculate the effective rights mask
  13. -n, --no-mask don't recalculate the effective rights mask
  14. -d, --default operations apply to the default ACL
  15. -R, --recursive recurse into subdirectories
  16. -L, --logical logical walk, follow symbolic links
  17. -P, --physical physical walk, do not follow symbolic links
  18. --restore=file restore ACLs (inverse of `getfacl -R')
  19. --test test mode (ACLs are not modified)
  20. -v, --version print version and exit
  21. -h, --help this help text

getfaclget file access control lists,查看ACL。命令详情如下:

  1. [god@localhost /]$ getfacl -h
  2. getfacl 2.2.49 -- get file access control lists
  3. Usage: getfacl [-aceEsRLPtpndvh] file ...
  4. -a, --access display the file access control list only
  5. -d, --default display the default access control list only
  6. -c, --omit-header do not display the comment header
  7. -e, --all-effective print all effective rights
  8. -E, --no-effective print no effective rights
  9. -s, --skip-base skip files that only have the base entries
  10. -R, --recursive recurse into subdirectories
  11. -L, --logical logical walk, follow symbolic links
  12. -P, --physical physical walk, do not follow symbolic links
  13. -t, --tabular use tabular output format
  14. -n, --numeric print numeric user/group identifiers
  15. -p, --absolute-names don't strip leading '/' in pathnames
  16. -v, --version print version and exit
  17. -h, --help this help text

场景1:设置user权限####

场景描述:让devp用户获取查看/root目录的权限。

设置user权限的命令如下:

  1. setfacl -m u:devp:rx /root

查看结果:

  1. // 查看目录详情(不是目录下内容列表)
  2. // 查询结果中`dr-xr-x---+`,最后的`+`表示有ACL附加权限;
  3. [god@localhost /]# ll -d root
  4. dr-xr-x---+ 18 root root 4096 Aug 5 09:32 root
  5. // 查看ACL详情
  6. [god@localhost /]# getfacl root
  7. # file: root
  8. # owner: root
  9. # group: root
  10. user::r-x //`owner`的权限
  11. user:devp:r-x //用户`devp`的权限(ACL设置的细节)
  12. group::r-x //`owning group`的权限
  13. mask::r-x //什么含义?(ACL设置的细节)
  14. other::---

场景2:取消user权限####

场景描述:在场景1中设置了devp用户查看/root目录的权限,如何取消devp用户的这一权限呢?

取消user权限的命令如下:

  1. setfacl -x u:devp /root

查看结果:

  1. // 查看ACL详情
  2. [god@localhost /]# getfacl root
  3. # file: root
  4. # owner: root
  5. # group: root
  6. user::r-x //`owner`的权限
  7. group::r-x //`owning group`的权限
  8. mask::r-x
  9. other::---

场景3:设置group权限####

场景描述:如何设置devp组拥有/root目录的查看权限?

设置命令:

  1. set -m g:devp:rx /root

查询结果:

(未完待续,各个典型场景)

(参考:Hadoop技术内幕中HDFS的架构设计与实现原理)

Hadoop从2.4.0版本开始支持ACL(英文原版的出处),并且已经有人对此进行了测试:http://blog.csdn.net/j2eelamp/article/details/24594159

原文地址:https://ningg.top/linux-acl/
微信公众号 ningg, 联系我

同类文章:

微信搜索: 公众号 ningg, 联系我, 交个朋友.

Top