setfacl维护文件访问权限

一.说明
我们都知道Linux中可以通过chmod来维护文件的权限,但是文件的权限设置很有局限性。比如:小张有辆车(小张是属主,可以rwx),小张的老婆,爸妈都可以r-x(小张的老婆,爸妈和小张是属于同一个group),其他人只有r--的权限。但是小张又不能不给老婆面子,车也要给老丈人有r-x的权限,通过chmod就没有办法实现了(此处就认定他的老丈人为other)。所以Linux中又有一个Access Control List来维护一些非常规权限。

二.setfacl语法说明
setfacl用于设置文件的扩展权限(This utility sets Access Control Lists (ACLs) of files and directories.),同样也可以设置基本权限(设置基本权限不及chmod方便)。主要语法及参数说明如下:
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl        修改文件当前的ACL(s),ACL中 必须包含权限,多个ACL可以以逗号(',')隔开;
-M, --modify-file=file  修改文件的ACL,ACL配置来源于配置文件或管道输入(每行最多一个ACL,#开头的整行为注释, 来源于标准输入的ACL用减号'-'表示);
-x, --remove=acl        删除文件的ACL记录,ACL条目仅不包含权限字段(必须包含uid/gid, 不能移除基本权限);
-X, --remove-file=file  删除文件的ACL,ACL配置来源于配置文件或管道输入(备注同-M)
-b, --remove-all        删除所有的 扩展ACL,基本的ACL条目(例如755)不会被移除
-k, --remove-default    删除默认的ACL
    --set=acl           按照acl指定的值完全重设ACL, 原配置会被覆盖;
    --set-file=file     从文件读取ACL并重新设置文件的ACL
    --mask              结合MASK重新计算实际生效的ACL( 仅针对owner和other以外的用户有效)
-n, --no-mask           不重新结合MASK值进行计算有效权限
-d, --default           操作默认ACL( 仅文件夹可用,普通文件不能没有默认ACLs)
-R, --recursive         递归修改所有子文件、文件夹的ACL
-L, --logical           logical walk, follow symbolic links(如果被查看对象时link则显示源文件的ACL)
-P, --physical          physical walk, do not follow symbolic links(如果被查看对象是link则不显示ACL)
    --restore=file      restore ACLs (inverse of `getfacl -R')
    --test              test mode (ACLs are not modified)
-v, --version           print version and exit
-h, --help              this help text
-- End of command line options. All remaining parameters are interpreted as file names, even if they start with a dash.

ACL条目设置方式(实际记录无需输入空格,perms字段可以是rwx的组合,也可以是一个数字):
[d[efault]:] [u[ser]:]uid [:perms]
指定特定用户(用户名和UID均可)的权限,如果uid空置则默认为文件属主
[d[efault]:] g[roup]:gid [:perms]
指定特定组(组名和GID均可)的权限,如果Gid空置则默认为文件属组
[d[efault]:] m[ask][:] [:perms]
有效权限的MASK
[d[efault]:] o[ther][:] [:perms]
other用户的权限
    
注意事项:
1).基础的ACL记录不能通过-x参数移除,即属主权限、属组权限,其他用户权限;
2).如果指定特定用户/组的ACL,则必须设置mask值,如果不设置将会把group的权限设置为UMASK;
3).设置默认ACL时owner,group,other三个基本ACL必须存在,如果不存在系统会自动添加;
4).为文件针对某个用户设置默认ACL时未设置mask,则会添加同默认ACL组的权限一直的MASK

三.getfacl语法说明
getfacl(get file access control lists),对于文件夹和文件,getfacl命令会显示出文件名,属主,属组,访问权限列表(ACLs)。对于文件夹还会显示default ACLs,普通文件是不能设置default ACLs的。getfacl输出内容及详细说明如下:
1:  # file: somedir/     -->文件名
2:  # owner: lisa        -->文件属主
3:  # group: staff       -->文件属组
x:  # flags:--t          -->特殊权限:suid,sgid,stick bit
4:  user::rwx            -->属主权限(外加属主权限,other权限一起统称为base permission,可以通过chmod修改也可以通过setfacl修改)
5:  user:joe:rwx               #effective:r-x         -->特定用户权限,受mask影响实际权限为r-x
6:  group::rwx                 #effective:r-x         -->属组权限,受umask影响实际为r-x
7:  group:cool:r-x       -->指定组权限
8:  mask:r-x             -->mask设置,影响除了ower和other外的所有用户/组的权限
9:  other:r-x
10:  default:user::rwx   -->直到14行为文件夹默认ACLs, 普通文件无此项
11:  default:user:joe:rwx       #effective:r-x
12:  default:group::r-x
13:  default:mask:r-x
14:  default:other:---
语法说明:
getfacl [-dRLPvh] file ...
--accesss:仅输出访问权限列表,不输出defaul ACLs;
-d:仅输出default ACLs;
--omit-header:不输出以#开始的行;
--skip-base:跳过仅包含base ACLs的文件;
-R:递归查看子文件/文件夹的ACLs;
--tabular:使用tabular格式显示:
--:参数结束符,后续所有的一破折号开头的值都不被看做参数;
-:如果文件名为破折号,则getfacl从标准输入读取文件名;

四.范例演示
1.sefacl修改chmod可修改的权限(个人认为还是chmod用起来更简单):
[root@node110 ~]# umask
0022
[root@node110 ~]# touch copy.sh
[root@node110 ~]# getfacl copy.sh
# file: copy.sh
# owner: root
# group: root
user::rw-
group::r--
other::r--


[root@node110 ~]# setfacl -m u::1,g::2,o::3 copy.sh-->( 等效于chmod 0123 copy.sh)
[root@node110 ~]# getfacl copy.sh 
# file: copy.sh
# owner: root
# group: root
user::--x
group::-w-
other::-wx

2.默认ACL设置:
[root@node110 ~]# getfacl van/
# file: van
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@node110 ~]# setfacl -m d:u:oracle:5 van/
[root@node110 ~]# getfacl van/
# file: van
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:oracle:r-x( 此记录为添加项,其他默认ACL为系统参照base ACL自动添加,mask参照默认group权限添加)
default:group::r-x
default:mask::r-x
default:other::r-x
[root@node110 ~]# setfacl -m d:u:oracle:7 copy.sh
setfacl: copy.sh: Only directories can have default ACLs( 普通文件无法添加默认ACL)

3.移除van文件夹的默认ACL及其他ACL(base ACLs除外):
[root@node110 ~]# getfacl van/
# file: van/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:oracle:r-x
default:group::r-x
default:mask::r-x
default:other::r-x

[root@node110 ~]# setfacl -k van/(仅移除default ACLs)
[root@node110 ~]# getfacl van/
# file: van/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

[root@node110 ~]# setfacl -m u:oracle:7 van/
[root@node110 ~]# setfacl -m d:u:oracle:7 van/
[root@node110 ~]# getfacl van/
# file: van/
# owner: root
# group: root
user::rwx
user:oracle:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:oracle:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

[root@node110 ~]# setfacl -b van/(移除base ACLs以外的所有ACLs)
[root@node110 ~]# getfacl van/
# file: van/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x






         
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值