首页 > 技术文章 > ACL权限以及Linux对权限的判断顺序

ChiRou 2020-11-01 12:34 原文

ACL权限

ACL权限是对UGO权限的扩展。基本UGO权限将文件的作用目标分为三类,其中O这一类包含的用户太笼统,如果我们想单独设置某个用户或某个组对文件的某种权限,则可使用ACL(Access Control List)。

ACL可以针对单一用户、单一组、单一文件或目录来进行r、w、x的权限控制。

CentOS 7默认支持ACL,Centos6及以前系统可能需要手动开启。

获取文件的权限信息:

getfacl命令

会显示基本权限信息以及ACL权限。

[chirou@duorou ~ ]$ getfacl demo/
# file: demo/		# 文件名
# owner: chirou		# 属主
# group: chirou		# 属组
user::rwx			# 属主权限
group::rwx			# 属组权限
other::r-x			# 其他人权限
user:libai:rwx		# 针对李白用户所设定的权限

设置ACL权限

setfacl命令

  • -m:设置权限
  • -R:递归设置
  • -x:删除单个权限
  • -b:删除所有ACL权限
注:对用户和组设置ACL权限时,用户和组必须事先存在。
# 修改属主的权限
setfacl -m u::权限 /PATH/File

# 修改属组的权限
setfacl -m g::权限 /PATH/File

# 修改其他人的权限
setfacl -m o::权限 /PATH/File

# 修改具体某一个用户的权限
setfacl -m u:用户名:权限 /PATH/File

# 修改具体某一个组的权限
setfacl -m g:组名:权限 /PATH/File

# 删除某个组的权限
setfacl -x g:group /PATH/File

# 删除某个用户的权限
setfacl -x u:user /PATH/File

# 删除所有ACL权限
setfacl -b /PATH/File

# 递归设置目录内所有文件,注意-R选项要在设置的权限后面。
setfacl -m u:用户名:权限 -R /PATH/File

# 设置mask值
setfacl -m m:rwx /PATH/File
  • default:继承/默认,设定继承权限后,在该目录内创建文件,会继承目录的ACL权限。对已存在的文件没有影响。default只会对设置的权限有效,设置继承权限后再更改目录的权限不会对继承权限有影响。
# 设置某文件的继承权限,在原设置ACL权限前面加上d:即可
setfacl -m d:u:user:r /PATH/File

# 设置继承权限panghu用户对目录有读权限
[chirou@duorou ~ ]$ setfacl -m d:u:panghu:r demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:panghu:r--
default:group::rwx
default:mask::rwx
default:other::r-x

# 修改其他人的权限后,default权限不会变化
[chirou@duorou ~ ]$ setfacl -m o::rwx demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
group::rwx
other::rwx
default:user::rwx
default:user:panghu:r--
default:group::rwx
default:mask::rwx
default:other::r-x

# 新建的目录会继承权限。
[chirou@duorou ~ ]$ mkdir demo/d1/d2 ; getfacl demo/d1/d2
# file: demo/d1/d2
# owner: chirou
# group: chirou
user::rwx
user:panghu:r--
user:libai:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:panghu:r--
default:user:libai:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

# 删除某个继承权限
[chirou@duorou ~ ]$ setfacl -x d:u:panghu demo/
建议:为了方便管理文件权限,应将其他人的权限设置为空。
chmod o=- /PATH/File

mask值:

mask值能限制最大权限,除了属主和other不受影响,其他用户(包括属组、单独设置的某个组、单独设置的某个用户)都需要与mask值进行按位与运算之后得出的结果才是最后真正生效的值。

如果先设置mask值,再使用chmod修改权限或setfacl修改某个用户或组的权限,mask值也会发生改变。所以用了ACL设置权限后,不要用chmod改变权限,会影响已设置的ACL权限和mask值。

当设置了ACL之后,原来显示的属组权限,会变成mask权限。

注:一般而言不用更改mask权限,只要赋予mask最大权限(rwx),则给用户或群组设定的ACL权限本身就是有效的。

设置了ACL权限的文件会在基础权限后面显示一个加号。

ACL权限对root无效。
# 将root对demo目录的权限置空。
[chirou@duorou ~ ]$ setfacl -m u:root:- demo/

# root一样能进入目录并删除文件。
[root@duorou chirou ]# cd demo/
[root@duorou demo ]# getfacl .
# file: .
# owner: chirou
# group: chirou
user::rwx
user:root:---
group::rwx
mask::rwx
other::r-x

[root@duorou demo ]# ls
d1  d2  d3  f1  fff
[root@duorou demo ]# rm -rf fff

系统判断权限顺序

  • 1、首先判断用户是否是属主,如果是则以属主的权限为准,如果不是则往下判断。
  • 2、判断用户是否有ACL权限,如果有则以ACL权限effective为准,如果effective为空,则继续往下判断。
  • 3、判断用户是否属于属组,如果属于则以属组权限为准,如果不是则往下判断。
  • 4、用户既不是属主或属组成员,effective权限也为空,那么就会以other的权限为准。
[chirou@duorou ~ ]$ setfacl -m u:libai:r demo/
# 使用mask将libai用户的权限置空
[chirou@duorou ~ ]$ setfacl -m m:- demo/
[chirou@duorou ~ ]$ getfacl demo/
# file: demo/
# owner: chirou
# group: chirou
user::rwx
user:libai:r--			#effective:---
group::rw-			#effective:---
mask::---
other::rw-

# libai用户与ACL权限匹配为空,然后会再与other权限匹配,所以拥有对demo目录的读和写权限。
[chirou@duorou ~ ]$ sudo -u libai ls /home/chirou/demo
d1  f1
[chirou@duorou ~ ]$ rm -rf /home/chirou/demo/f1 

推荐阅读