一、ACL权限介绍在Linux下,用户对文件的操作权限有三种:r-read、w-write、x-executable。对于linux下的文件,用户身份分为所有者、组、其他三种。并且文件的所有者和所属组只能是一个。因此,在为文件分配用户权限时,只能为这三个身份分配读、写和执行权限。Linux主要用作服务器系统,用户众多。所以在实际使用场景中,这三个身份都不能很好的实现资源权限分配问题,所以才有了ACL权限。ACL权限是为了解决Linux下三种身份无法满足资源权限分配需求的问题。二、开启分区ACL权限1、查看分区ACL权限是否开启dumpe2fs-h[partition]dumpe2fs是查询指定分区详细文件系统信息的命令-h表示只查询superblock中的信息显示,不会显示磁盘块组的详细信息如果输出中的Defaultmountoptions项中有acl,则表示启用了分区ACL权限。如果没有开启分区ACL权限,需要手动开启。例子[root~]#dumpe2fs-h/dev/sda1|grep'默认安装选项'dumpe2fs1.42.9(2014年2月4日)默认安装选项:user_xattracl2。临时启用分区ACL权限重新挂载根分区,挂载时添加acl权限mount-oremount,acl/3.永久启用分区ACL权限编辑配置文件/etc/fstab,找到根分区磁盘的列,在第四列-abfb837f2e24/ext4defaults后添加aclUUID=64ecdf77-db7b-48a8-9066,acl11重新挂载文件系统或重启系统,修改生效mount-oremount/3.getfacl和setfacl命令1.getfacl查看ACL权限语法getfacl[filename]2.setfacl添加、删除ACL权限语法setfacl[option][filename]option-m:设置ACL权限,多个ACL规则之间用逗号(,)分隔-x:删除指定的ACL权限,多个ACL规则之间用逗号(,)分隔-b:删除所有ACL权限-d:设置默认ACL权限-k:删除默认ACL权限-R:递归设置ACL权限ACLrulessetfacl命令可以识别如下规则格式:[d:]u:[用户名]:[权限(rwx)]:指定用户的权限[d:]g:[组名]:[权限(rwx))]:指定用户组的权限[d:]m:[Permission(rwx)]:指定最大有效权限[d:]表示设置为默认权限4.设置ACL权限1.设置ACL权限user语法setfacl-mu:[username]:[authority(rwx)][filename]创建一个新目录res/权限设置为750[root/tmp/acl]#mkdirres[root/tmp/acl]#chmod750res/[root/tmp/acl]#lltotalusage0drwxr-x---2rootroot6June801:11res/为用户wang[root/tmp/acl]#setfacl-mu:wang:rxres/查看目录信息,可以看到权限栏末尾多了一个+[root/tmp/acl]#lltotalusage0drwxr-x---+2rootroot6June801:11res/查看目录res/的acl权限显示多了一行user:wang:r-x[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxuser:wang:r-xgroup::r-xmask::r-xother::---此时切换到wang用户,可以进入目录res/,可以查看目录下的文件,但是无法创建文件,说明用户wang对目录res/的权限为r-x[root~]#suwang[wang@10root]$cd/tmp/acl/[wang@10acl]$lltotalusage0drwxr-x---+2rootroot6June801:11res[wang@10acl]$cdres/[wang@10res]$ll总使用量0[wang@10res]$touchfiletouch:无法创建"file":Insufficientpermissions2.为用户组设置ACL权限语法setfacl-mg:[组名]:[权限(rwx)][文件名]application还是之前的res/目录[root/tmp/acl]#lltotalusage0drwxr-x---2rootroot6June801:11res/新建用户组phper,新建用户zhang,加入phper组[root/tmp/acl]#groupaddphper[root/tmp/acl]#useradd-gphperzhang[root/tmp/acl]#grepphper/etc/groupphper:x:1002:[root/tmp/acl]#grepzhang/etc/passwdzhang:x:1002:1002::/home/zhang:/bin/bash为用户组phper设置目录res/读写执行权限[root/tmp/acl]#setfacl-mg:phper:rwxres/查看目录res/的acl权限,可以看到多了一行group:phper:rwx[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxuser:wang:r-xgroup::r-xgroup:phper:rwxmask::rwxother::---此时切换到用户zhang,可以进入目录res/,可以创建文件,可以查看目录下的文件,并说明用户zhang对目录res/的控制权限为rwx[root/tmp/acl]#suzhang[zhang@10acl]$lltotalusage0drwxrwx---+2rootroot6June801:11res[zhang@10acl]$cdres/[zhang@10res]$touchphper.log[zhang@10res]$ll总使用量0-rw-r--r--1zhangphper0June802:27phper.log五、删除ACL权限1、删除指定用户的ACL权限语法setfacl-xu:[用户名][文件名]申请删除用户wang对目录res/的ACL权限[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxuser:wang:r-xgroup::r-xgroup:phper:rwxmask::rwxother::---[root/tmp/acl]#setfacl-xu:wangres/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::---2。删除指定用户组的ACL权限语法setfacl-xg:[组名][文件名]适用于删除用户组phper对目录res/[root/tmp/acl]#getfaclres/#file:res/#所有者:root#组:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::---[root/tmp/acl]#setfacl-xg:phperres/[root/tmp/acl]#getfaclres/#文件:res/#所有者:root#组:rootuser::rwxgroup::r-xmask::r-xother::---3。删除文件的所有ACL权限语法setfacl-b[filename]应用wang用户和phper用户组加回res/[root/tmp/acl]目录的ACL权限#setfacl-mu:wang:r-xres/[root/tmp/acl]#setfacl-mg:phper:rwxres/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxuser:wang:r-xgroup::r-xgroup:phper:rwxmask::rwxother::---删除所有文件ACL权限[root/tmp/acl]#setfacl-bres/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xother::---6.ACL的最大有效权限:maskmask用于指定最大有效权限。如果给用户ACL权限,需要和mask的权限“结合”,结果就是用户实际获得的权限。1.查看最大有效权限maskgetfacl[file]文件中必须设置ACL权限才能有mask项实例[root/tmp/acl]#setfacl-mg:phper:rwxres/[root/tmp/acl]#getfaclres/#文件:res/#所有者:root#组:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::---2。修改最大有效权限掩码setfacl-mm:[permission(rwx)][[文件名]例子修改最大有效权限掩码为r-x[root/tmp/acl]#setfacl-mm:rxres/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwx#effective:r-xmask::r-xother::---切换到用户zhang此时可以进入目录res/,可以查看目录下的文件,但是不能创建文件,说明用户zhang有权限r-x[zhang@10acl]$lltotalusageondirectoryres/0drwxr-x---+2rootroot6June805:19res[zhang@10acl]$getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwx#effective:r-xmask::r-xother::---[zhang@10acl]$cdres/[zhang@10res]$ll总使用量0[zhang@10res]$touchfiletouch:无法创建“文件”:权限不足稍后进行更改。如果先修改mark的值,再设置用户和组的ACL权限,系统会自动重新设置mark的值。[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwx#effective:r-xmask::r-xother::---[root/tmp/acl]#setfacl-mu:wang:rwxres/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxuser:wang:rwxgroup::r-xgroup:phper:rwxmask::rwxother::---7.递归ACL权限在设置父目录的ACL权限时,对所有子文件和目录设置相同的ACL权限。递归权限只能授予目录,不能授予文件。setfacl-mu:[用户名]:[权限(rwx)]-R[文件名]实例创建一个目录res/,然后在res/目录下创建两个文件dir/和file,都没有设置ACL权限[root/tmp/acl]#lltotalusage0drwxr-xr-x3rootroot28June806:04res/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xother::r-x[root/tmp/acl]#cdres[root/tmp/acl/res]#lltotalusage0drwxr-xr-x2rootroot6June806:02dir/-rw-r--r--1rootroot0Jun806:02file[root/tmp/acl/res]#getfacldir/#file:dir/#owner:root#group:rootuser::rwxgroup::r-xother::r-x[root/tmp/acl/res]#getfaclfile#file:file#owner:root#group:rootuser::rw-group::r--other::r--recursiveSetACL权限,并为res/及其下的所有文件和目录设置ACL权限[root/tmp/acl]#setfacl-mg:phper:rwx-Rres/[root/tmp/acl]#lltotalusage0drwxrwxr-x+3rootroot27Jun806:06res/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::r-x[root/tmp/acl]#cdres/[root/tmp/acl/res]#lltotalusage0drwxrwxr-x+2rootroot6June806:02dir/-rw-rwxr--+1rootroot0Jun806:02file*[root/tmp/acl/res]#getfacldir/#file:dir/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::r-x[root/tmp/acl/res]#getfaclfile#file:file#owner:root#group:rootuser::rw-group::r--group:phper:rwxmask::rwxother::r--8。默认ACL权限如果为目录设置了默认ACL权限,则该目录下新建的所有文件和目录都将继承父目录的ACL权限。默认权限只能给目录,不能给文件。即使默认的ACL权限设置了执行权限,目录下新建的文件也不会有执行权限!setfacl-md:u:[用户名]:[权限(rwx)][文件名]实例创建目录res/,并在res/目录下创建文件file,不设置ACL权限[root/tmp/acl]#mkdirres[root/tmp/acl]#touchres/file[root/tmp/acl]#lltotalusage0drwxr-xr-x2rootroot17June806:18res/[root/tmp/acl]#llres/totalusage0-rw-r--r--1rootroot0Jun806:18file[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xother::r-x[root/tmp/acl]#getfaclres/file#file:res/file#owner:root#group:rootuser::rw-group::r--other::r--设置res/目录的默认ACL权限[root/tmp/acl]#setfacl-md:g:phper:rwxres/[root/tmp/acl]#lltotalusage0drwxr-xr-x+2rootroot17Jun806:18res/[root/tmp/acl]#getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:group::r-xdefault:group:phper:rwxdefault:mask::rwxdefault:other::r-x值得注意的是,res/目录本身及其下已有的文件没有ACL权限切换所属phper组的用户zhang可以看到zhang只有其他用户应该有的权限,不能在res/目录下创建文件,也不能修改res/file文件[zhang@10acl]$ll总使用量0drwxr-xr-x+3rootroot27June806:26res[zhang@10acl]$getfaclres/#file:res/#owner:root#group:rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:group::r-xdefault:group:phper:rwxdefault:mask::rwxdefault:other::r-x[zhang@10acl]$cdres/[zhang@10res]$lltotalusage4-rw-r--r--1rootroot0June806:18file[zhang@10res]$getfaclfile#file:file#owner:root#group:rootuser::rw-group::r--other::r--[zhang@10res]$touchfile2touch:Unabletocreate"file2":Insufficientpermissions[zhang@10res]$date>filebash:file:Insufficientpermissionsinres的目录dir/是在/目录下创建的,自动拥有父目录设置的默认ACL权限[root/tmp/acl/res]#mkdirdir[root/tmp/acl/res]#getfacldir/#file:dir/#owner:root#group:rootuser::rwxgroup::r-xgroup:phper:rwxmask::rwxother::r-xdefault:user::rwxdefault:group::r-xdefault:group:phper:rwxdefault:mask::rwxdefault:other::r-x在res/目录下创建文件file_new,自动拥有父目录设置的默认ACL权限,执行权限除外[root/tmp/acl/res]#touchfile_new[root/tmp/acl/res]#getfaclfile_new#file:file_new#owner:root#group:rootuser::rw-group::r-x#effective:r--group:phper:rwx#effective:rw-mask::rw-other::r--无论如何,不??可能自动创建一个新的文件有执行权限!即使默认的ACL权限设置了执行权限,目录下新建的文件也不会有执行权限!