前言:

    当一个用户需要读写一个文件时,其文件的属主和属组都没有相应的权限,如果给other读写权限的话,这样所有的用户都有了读写权限,此时风险比较大,不安全。这时就需要一个附加权限了。

    facl(文件访问控制列表):附加原有权限模型之上另一层权限控制机构,保存至文件扩展属性信息中;

1、getfacl命令

    #显示文件访问控制列表

[root@vms002 www]# whatis getfacl
getfacl (1)          - get file access control lists

    命令语法:

getfacl [-aceEsRLPtpndvh] file ...

    例:

[root@vms002 www]# ls
rhel.txt
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

说明:带#号的是系统默认权限,下面的才是ACL控制权限

[root@vms002 www]# getfacl --omit rhel.txt 
user::rw-
group::r--
mask::r--
other::r--

2、setfacl命令

    1)功能:设置文件访问控制列表

[root@vms002 www]# whatis setfacl
setfacl (1)          - set file access control lists

    2)命令语法

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

    3)常用选项

选项

含义

-m

修改文件的当前访问控制权限

-m   u:username:perms file  \\设置用户的facl权限(文件)

-m g:groupname:perms   file  \\设置组的facl权限(文件)

-m m::Perms   file  \\设定mask

-m d:u:username:Perms   dir  \\d给目录设置facl默认权限(目录)

-m   d:g:groupname:Perms dir  \\d给目录设置facl默认权限(目录)

-x

取消facl权限

-x u:username   file  \\取消用户的facl权限(文件)

-x g:groupname   file  \\取消组的facl权限(文件)

-x   d:u:username dir  \\取消目录的用户的facl默认权限(目录)

-x   d:g:groupname dir  \\取消目录的组的facl默认权限(目录)

-R

递归

-b

删除全部的facl权限

-k

删除默认的facl权限

-d

设置默认facl权限

3、实战演示

    1)给rhel.txt文件设置facl读写权限以及取消facl权限
[root@vms002 www]# ls
rhel.txt
#查看rhel.txt的facl权限
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
#设置用户jerry对rhel.txt文件拥有facl的读写权限
[root@vms002 www]# setfacl -m u:jerry:rw- rhel.txt
#查看rhel.txt的facl权限,是否设置成功
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
user:jerry:rw-     #jerry用户已拥有读写权限
group::r--
mask::rw-
other::r--
#取消用户jerry对rhel.txt文件拥有facl的读写权限
[root@vms002 www]# setfacl -x u:jerry rhel.txt 
#查看rhel.txt的facl权限,是否取消成功
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--

    2)给www目录设置facl的默认rwx权限以及取消facl的默认权限

[root@vms002 www]# ls
rhel.txt  www
#查看www目录的facl默认权限
[root@vms002 www]# getfacl www/
# file: www/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
#设置jerry用户对www目录拥有facl的默认rwx权限
[root@vms002 www]# setfacl -m d:u:jerry:rwx www/
#查看www目录的facl默认权限,是否设置facl权限成功
[root@vms002 www]# getfacl www/
# file: www/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:jerry:rwx     #jerry用户已拥有facl的rwx默认权限
default:group::r-x
default:mask::rwx
default:other::r-x
#取消jerry用户对www目录的facl默认权限
[root@vms002 www]# setfacl -x d:u:jerry www/
#查看www目录的facl默认权限,是否取消facl默认权限成功
[root@vms002 www]# getfacl www/
# file: www/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:mask::r-x
default:other::r-x

提示:这个d的意思是说default,不管谁在www目录里创建的文件/目录,对jerry用户都有一个默认的facl权限rwx,这里强调的是www目录里新创建的,不包含父目录本身和旧文件。

    3)设置rhel.txt文件的mask临时权限

[root@vms002 www]# ls
rhel.txt  www
#查看rhel.txt文件的mask的值
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
#设置rhel.txt文件的mask临时权限为读写权限
[root@vms002 www]# setfacl -m m::rw- rhel.txt 
#查看rhel.txt文件的mask的值,是否设置成功
[root@vms002 www]# getfacl rhel.txt 
# file: rhel.txt
# owner: root
# group: root
user::rw-
group::r--
mask::rw-    #mask值已设置(临时权限)
other::r--

提示:mask为临时权限,如果mask的权限设置为---,则o生效;如果mask的权限非---,则mask权限生效。

4、总结

    1)getfacl命令:查看文件/目录的访问控制列表权限;

    2)setfacl命令:设置文件/目录的访问控制列表权限;

    3)setfacl选项:-m设置facl权限,-x取消facl权限;

    4)d为默认的facl权限,生效于目录中新创建的文件;

    5)m为临时权限。