一、命令简介
getfacl命令来自于英文词组”get file access control list“的缩写,其功能是用于显示文件或目录的ACL策略。对指定的文件或目录进行精准的权限控制,FACL是不二之选。对于每个文件,getfacl显示文件名、所有者、组和访问控制列表(ACL)。如果目录具有默认ACL,则获取facl还显示默认ACL。非目录不能具有默认ACL。
setfacl,顾名思义,设置文件或者目录访问控制列表,即ACL规则。这一般是用于对文件或者目录执行扩展授权,比如文件属于用户user1,但是希望给user2也添加授权,让user2也可以对文件进行操作,我们就可以通过setfacl命令实现。
二、getfacl使用示例
1、查看getfacl版本
[root@s142 ~]# getfacl -v
getfacl 2.2.51
2、获取getfacl命令帮助
[root@s142 ~]# getfacl --help
getfacl 2.2.51 – get file access control lists
Usage: getfacl [-aceEsRLPtpndvh] file …
…
3、查看文件所有权限
[root@s142 home]# getfacl -a /home
getfacl: Removing leading ‘/’ from absolute path names
# file: home
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
4、查看目录默认权限
看到如下,说明目录没有设置默认权限。
[root@s142 home]# getfacl -d /home/abc
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abc
# owner: root
# group: root
5、按照物理路径查询
看到如下,abd是软链接,使用-P参数按照物理路径查询无输出,使用-L参数查询输出abd及下面文件的权限ACL规则。
6、按照逻辑路径查询
7、不显示注释头
[root@s142 home]# getfacl -c /home
getfacl: Removing leading ‘/’ from absolute path names
user::rwx
group::r-x
other::r-x
8、显示路径包含根/
[root@s142 home]# getfacl -p /home
# file: /home
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
9、显示用户和用户组ID
10、表格格式输出权限ACL
三、setfacl使用示例
1、查看命令版本
[root@s142 home]# setfacl -v
setfacl 2.2.51
2、获取命令帮助
[root@s142 home]# setfacl --help
setfacl 2.2.51 – set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X … } file …
…
3、修改文件ACL
使用setfacl -m u:username:perms files设置权限,u:username:perms是针对用户授权,也可以使用g:groupname:perms对用户组授权,还可以使用m::perms的方式对所有用户和组进行授权,使用o::perms对其它用户组进行授权。
[root@s142 home]# setfacl -m u:wuhs:rwx /home/abd/abc
[root@s142 home]# getfacl -a /home/abd/abc
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abd/abc
# owner: root
# group: root
user::rw-
user:wuhs:rwx
group::r–
mask::rwx
other::r–
4、从ACL移除条目
使用setfacl -x参数移除指定的ACL条目,一次只可以移除一条。
[root@s142 home]# setfacl -x u:wuhs /home/abd/abc
[root@s142 home]# getfacl /home/abd/abc
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abd/abc
# owner: root
# group: root
user::rw-
group::r–
mask::r–
other::r–
5、拷贝文件权限到另外一个文件
我们可以setfacl结合getfacl命令使用,将文件A的权限拷贝到文件B的ACL规则中去,使用set-file=-的方式完成ACL权限拷贝。
[root@s142 home]# setfacl -m u:wuhs:6 /home/abc/abc
[root@s142 home]# getfacl /home/abc/abc | setfacl --set-file=- /home/abc/abd
getfacl: Removing leading ‘/’ from absolute path names
[root@s142 home]# getfacl /home/abc/abd
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abc/abd
# owner: root
# group: root
user::rw-
user:wuhs:rw-
group::r–
mask::rw-
other::r–
6、设置默认ACL规则
使用-d和-m参数一起使用完成默认ACL的设置,还可以结合-R参数,这样目录下的所有子目录权限也与设置目录权限一致。
[root@s142 home]# setfacl -d -R -m u::7 /home/abc
[root@s142 home]# setfacl -d -R -m g::5 /home/abc
[root@s142 home]# setfacl -d -R -m o::4 /home/abc
[root@s142 home]# getfacl /home/abc
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abc
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r–
7、清除默认ACL规则
[root@s142 home]# setfacl -k /home/abc
[root@s142 home]# getfacl /home/abc
getfacl: Removing leading ‘/’ from absolute path names
# file: home/abc
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
8、清除所有扩展ACL规则
使用-b参数是清除所有的扩展ACL规则,创建文件属主关联的基本规则是不会清除的。
[root@s142 home]# setfacl -b /home/abc
9、通过文件完成ACL授权
可以使用-M参数指定授权ACL文件,一次完成多条目授权规则授权,我们也可以同时对多个文件或者目录授权。
四、参数说明
1、使用语法
用法:
$ getfacl [参数] file …
$ setfacl --restore=file 或者 setfacl [参数] file …
2、getfacl参数说明
参数 | 参数说明 |
---|---|
-a, --access | 仅显示文件的ACL |
-d, --default | 仅显示文件的ACL |
-c, --omit-header | 不显示注释标题 |
-e, --all-effective | 显示所有的有效权限 |
-E, --no-effective | 显示没有的有效权限 |
-s, --skip-base | 跳过文件,只具有基本条目(实际测试使用此参数后,输出为空) |
-R, --recursive | 递归查询 |
-L, --logical | 按照逻辑路径,包括软链接 |
-P, --physical | 按照物理路径,不包括软链接 |
-t, --tabular | 使用表格输出格式 |
-n, --numeric | 显示用户的UID和组群的GID |
-p, --absolute-names | 保留路径中开始的根"/" |
-v, --version | 显示版本信息 |
-h, --help | 获取命令帮助信息 |
3、setfacl参数说明
参数 | 参数说明 |
---|---|
-m, --modify=acl | 更改文件的访问控制列表 |
-M, --modify-file=file | 从文件读取访问控制列表条目更改 |
-x, --remove=acl | 从文件访问控制列表移除条目 |
-X, --remove-file=file | 从文件读取访问控制列表条目并删除 |
-b, --remove-all | 删除所有扩展访问控制列表条目 |
-k, --remove-default | 移除默认访问控制列表 |
–set=acl | 设定替换当前的文件访问控制列表 |
–set-file=file | 从文件中读取访问控制列表条目设定 |
–mask | 重新计算有效权限掩码 |
-n, --no-mask | 不重新计算有效权限掩码 |
-d, --default | 应用到默认访问控制列表的操作 |
-R, --recursive | 递归操作子目录 |
-L, --logical | 按照逻辑路径,包括软链接 |
-P, --physical | 按照物理路径,不包括软链接 |
–restore=file | 恢复访问控制列表 |
–test | 测试模式,并不真正修改访问控制列表属性 |
-v, --version | 查看版本信息 |
-h, --help | 显示帮助信息 |