Linux 访问控制列表(Access Control List)

在Linux中,目录或文件的权限是针对的所有者(owner),所属组(group),其他人(others)这3种类别来设置的。这种根据类别控制权限的方法无法精确控制每个用户的行为。为了解决这个问题,Linux引入了访问控制列表(Access Control Lists,简称 ACL),它可以进行精确的权限控制。

一、访问控制列表简介

访问控制列表的功能是由acl包实现的,其中包含了设置、修改、删除和查看ACL的工具。

ACL权限总共有2种:
1. access ACLs,可以设置在目录或文件上
2. default ACLs,仅可以设置在目录上
如果目录中的文件没有显式设置ACLs,那么则会继承目录的ACLs。

二、访问控制列表设置示例

ACL通过setfacl工具进行权限的设置、修改和删除。设置的类别有4种:
• 设置某个用户的ACL
• 设置某个组的ACL
• 设置其他人的ACL
• 设置ACL的掩码(权限上限)

设置完成后可以通过getfacl工具查看ACL的具体规则。

2.1 设置某个用户的ACL

这里用root用户在/tmp目录下新建一个file.txt,要求权限如下,所有者:rwx,所属组:rw,其他人:r

touch file.txt
chmod u=rwx,g=rwx,o=r file.txt
ls -l file.txt

在这里插入图片描述

现有一个用户userA,要求其没有任何权限。而此文件即使是others也有读的权限,即仅针对userA限制文件权限,此时只能通过ACL实现。使用setfacl命令为userA设置权限,其语法为:setfacl -m u:user:perms file

setfacl -m u:userA:--- file.txt 

在这里插入图片描述
命令的选项解释如下:

  • -m 代表修改/设置权限,常用的选项还有-x 删除ACL,-b清除所有ACL
  • u:userA:—,这是规则组合,u代表用户,userA是用户名,也可以用uid代替,—对应rwx权限,这里要求无任何权限,因此是—
  • file.txt 文件名

设置完成后可以使用getfacl file.txt来查看文件上的ACLs:

getfacls file.txt

在这里插入图片描述
红框处的userA:—代表userA对此文件没有任何权限

切换到userA测试一下

ls -l file.txt
cat file.txt

在这里插入图片描述
可以看到文件的所有者,所属组,其他人都有r的权限,但是userA却无法查看文件内容。同时文件权限的最后多了一个+号,这意味着文件设置了ACL。

2.2 设置组或其他人的的ACL

组的ACL设置和用户设置类似,只是影响范围由用户扩展到组,需要变化的部分只有规则组合,u:user:perms需要变为g:group:perms。其中g代表组,group为组名或gid,perms对应具体的rwx权限。例如:

setfacl -m g:root:rxw file.txt

设置其他人的ACL,只需要将规则组合部分变为o:perms,这里o代表others,perms代表具体的权限。

2.3 清除ACL

使用setfacl的-x选项可以清除指定ACL规则,其格式和设置的语法很像,只是没有了perms部分,例如清除userA在file.txt上的ACL:

setfacl -x u:userA file.txt
getfacl file.txt

在这里插入图片描述

通过getfacl可以看到ACL规则已经被清除

或者,使用-b选项清除指定文件或目录上所有的ACL规则:

setfacl -b file.txt

在这里插入图片描述

2.4 设置掩码

掩码可以看作ACL规则权限的上限设置,你设置所有的ACLs规则都会和掩码进行交集运算,只有在掩码范围内的权限才会生效。

首先我们将userA的属组修改为root

usermod -g root userA

在这里插入图片描述
我们设置ACLs属组的权限为rw:

setfacl -m g:root:rw file.txt
getfacl file.txt

在这里插入图片描述
注意此时root组的权限和mask都是rw-。

下面我们将mask修改为r,修改掩码的语法将规则部分修改为m:perms

setfacl -m m:r file.txt
getfacl file.txt

在这里插入图片描述
可以看到组的权限依然是rw,但是后面多了一行注释effective:r–,表示只有r生效,这是因为下面的mask被修改为r–,所以最高权限只能是r–。这个掩码规则会应用到所有的组和用户ACLs上(这里仅演示了组)。

2.5 设置默认ACL

设置默认的ACL规则,只需要将规则组合前面的字母替换为d,且只能应用在目录上,当在目录上设置ACL时,其下的文件都会继承,如果在文件上设置ACL,则会覆盖所属目录的ACL规则。对于目录,普通的目录权限一般就足够了,通常不会使用ACL控制。

新建一个目录acldir,默认其他人的权限设置为r-x:

mkdir acldir
setfacl -m d:o:r-x acldir

在这里插入图片描述
这里只是演示了设置方法,这里目录本身对于其他人的权限是other:—。即使设置default:other::r-x,依然是无法进入目录或查看内容的。这里列举的权限是从上到下依次生效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值