Linux传统的权限访问方式3种,user、group、others,在实际应用中,会遇到不够用的情况。假设有一个小组,一个放小组成员资料文件的目录,小组中每个成员有访问和修改的权限,组长有对其最高权限,其他组任何人不能访问这个目录文件。权限分配就应该是:组长作为root用户,权限rwx;该组所有成员都入tgroup,使tgroup作为目录的属组,权限rwx;其他人权限为0.
某一天小组调来一个新成员np,他作为成员拥有rx权限;但是他的能力究竟怎样还不知,所以不能正式进入小组,不能赋予w权限,np拥有权限也就是r-x,但是身份是root还是加入tgroup,或者other,显然都不匹配,又不能去改变原有身份的权限,让原来设置权限目的改变。
以上提到的三种身份不够用了,不能对某个单独用户设定访问权限,这个时候ACL就该发挥作用了。
ACL(Access Control List)访问控制列表,它在Linux中的作用就是实现对单一用户设定访问文件的权限。在传统三种身份访问权限无法解决实际问题时,直接对上面np用户设定访问文件的r-x权限。
开启ACL权限
1.查看当前所安装的操作系统版本是否支持ACL控制
# grep -i acl /boot/config*
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CEPH_FS_POSIX_ACL=y
CONFIG_CIFS_ACL=y
目前基本所有文件系统都支持ACL权限功能,特别是CentOS 7默认创建分区并在写入文件系统时附加ACL属性。
2.检查所需程序包
处理ACL前,确保所需程序包已经安装。
# rpm -qa | grep acl
acl-2.2.51-15.el7.x86_64
nfs4-acl-tools-0.3.3-21.el7.x86_64
python2-ipaclient-4.6.8-5.el7.centos.11.noarch
libacl-2.2.51-15.el7.x86_64
正常显示版本号即安装好,如果没有,在确保网络通畅的情况下,执行:
yum install nfs-acl-tools ad lib-acl -y
ACL权限设置
主要是setfacl和 getfacl两个命令,setfacl用于给指定文件或目录设定ACL权限,getfacl用于查看是否配置成功。
getfacl:
getfacl filename
# getfacl booz
# file: booz
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
一般getfacl和setfacl搭配使用 。
setfacl:
setfacl option filename
option | 功能 |
-m | 设定ACL权限。若给用户设定ACL权限,参数使用“u:用户名:权限”的格式,如setfacl -m u:np:rx /project 表示设定np用户对project目录有rx权限;组ACL权限“setfacl -m g:tgroup:rx /prouject” |
-x | 删除指定用户(参数使用u:)或群组(参数使用g:)的ACL权限,如“setfacl -x u:np /project”表示删除np用户对project的ACL权限 |
-b | 删除所有ACL权限,如“setfacl -b /project”表示删除所有跟project有关的ACL权限 |
-d | 设定默认ACL权限,格式“setfacl -m d:u:username:权限 filename”"setfacl -m d:g:groupname:权限 filename",只对目录有效,指目录中新建文件拥有此默认权限 |
-R | 递归设定ACL权限,指设定的ACL权限会对目录下的所有子文件生效,格式“setfacl -m u:username:权限 -R filename”(群组使用g:groupname:权限)如“setfacl -m u:np:rx -R /project”表示np用户对已存在于project目录中的子文件和子目录有rx权限 |
-k | 删除默认ACL权限 |