linux权限管理之ACL权限管理

在Linux中,ACL(Access Control Lists)是一种权限控制机制,用于在文件和目录级别上设置访问控制。它提供了一种更灵活和精细的权限管理方式,可以针对不同的用户、用户组或特定的文件进行访问权限的配置。

ACL权限允许以下类型的访问控制:

  1. 用户权限(User):针对特定用户设置读取、写入和执行权限。
  2. 组权限(Group):针对用户组设置读取、写入和执行权限。
  3. 其他用户权限(Others):针对其他所有用户设置读取、写入和执行权限。
  4. 默认权限(Default):针对目录中的新文件和子目录设置默认权限。

ACL权限可以与传统的文件权限一起使用,并且可以以叠加的方式应用。这意味着在设置ACL权限时,传统文件权限仍然适用,并且可以在ACL权限的基础上添加或覆盖特定的访问控制。

要使用ACL权限,您需要在文件系统上启用支持ACL的功能。大多数现代Linux发行版都默认启用ACL支持。您可以通过使用setfacl命令来设置和查看ACL权限,以及使用getfacl命令来获取文件的ACL信息。

让我们来做一道题

设置tester组的用户在/opt/acl/a目录下拥有rwx(或者r-x)权限,且任意目录下新增目录能够继承父目录的权限 ,如何做?

目录结构如下

/opt/acl/a
├── b1
│   ├── c1
│   │   ├── d1
│   │   ├── d2
│   │   └── f3.txt
│   ├── c2
│   └── f1.txt
└── b2
    ├── c3
    ├── c4
    └── f2.txt

setfacl参数介绍

选项含义
-m 参数设定 ACL 权限。如果是给予用户 ACL 权限,参数则使用 “u:用户名:权限” 的格式,例如 setfacl -m u:st:rx /project 表示设定 st 用户对 project 目录具有 rx 权限;如果是给予组 ACL 权限,参数则使用 “g:组名:权限” 格式,例如 setfacl -m g:tgroup:rx /project 表示设定群组 tgroup 对 project 目录具有 rx 权限。
-x 参数删除指定用户(参数使用 u:用户名)或群组(参数使用 g:群组名)的 ACL 权限,例如 setfacl -x u:st /project 表示删除 st 用户对 project 目录的 ACL 权限。
-b,–remove-all删除所有扩展的 acl 规则,基本的acl规则(所有者,群组,其他)将被保留。
-k,–remove-default删除缺省的 acl 规则。如果没有缺省规则,将不提示。
-n,–no-mask不要重新计算有效权限。setfacl 默认会重新计算 ACL mask,除非 mask 被明确的制定。
–mask重新计算有效权限,即使 ACL mask 被明确指定。
-d,–default设定默认的 acl 规则。
–restore=file从文件恢复备份的 acl 规则(这些文件可由 getfacl -R 产生)。通过这种机制可以恢复整个目录树的 acl 规则。此参数不能和除 --test 以外的任何参数一同执行。
--test测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。注意test如果和-m搭配使用时,不应该放在-m 和 ACL之间,例如:setfacl -m --test g:gorupname:rwx是错的,正确的是setfacl --test -m g:groupname:rwx 或者 setfacl -m g:groupname rwx --test)
-R,–recursive递归的对所有文件及目录进行操作
-L,–logical跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
-P,–physical跳过所有符号链接,包括符号链接文件。
标识命令行参数结束,其后的所有参数都将被认为是文件名。
-如果文件名是 -,则 setfacl 将从标准输入读取文件名。

查看目录是否开启ACL权限

CentOS 6.x 系统中,ACL 权限默认处于开启状态,无需手工开启。但如果你的操作系统不是 CentOS 6.x,可以通过如下方式查看ACL权限是否开启:

sudo dumpe2fs -h 目录所在的分区如/dev/sda1 | grep Default

…省略部分输出…
Default mount options: user_xattr acl
…省略部分输出…

如果没有挂载,执行下面的命令

sudo mount -o remount,acl /

 但使用此命令只是临时生效,要想永久生效,需要修改 /etc/fstab 文件,修改方法如下:

sudo vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 /ext4 defaults,acl 1 1

然后重新挂载

sudo mount -o remount /

设置系统权限为770

sudo chmod -R 770 需要更改权限的目录

递归的设置a目录下所有目录(不包含文件)的组权限

递归设置目录的组默认权限

默认 ACL 权限的作用是,如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。

 需要注意的是: 

  • 默认 ACL 权限只对目录生效
  • 默认权限主要是对user和group有效,对other无效。如果给other设置默认权限,即使当前目录设置成功了(如设置other rwx权限),在当前目录下创建的新目录也不会继承默认权限(新目录的other只有rx,没有w去拿先)

思路:找到a目录下所有的目录,每找到一个目录就设置该目录的默认权限。 

先执行测试

sudo find 需要更改权限的目录 -type d -exec setfacl --test -m d:g:组名:权限如rwx {}  \; | less

确认无误后执行 

sudo find 需要更改权限的目录 -type d -exec setfacl -m d:g:组名:权限如rwx {}  \;

递归设置目录的组权限

设置某个目录权限,在该目录下就具有某权限

先执行测试

 sudo find 需要修改的目录 -type d -exec setfacl --test -m g:组名:权限如rwx  {}  \;

确认无误后执行

 sudo find 需要修改的目录 -type d -exec setfacl  -m g:组名:权限如rwx  {}  \;

 注意一点

  • {}代表的是查找到的目录,{}和\和;一个都不能少,且{}和\之间需要有空格,\和;之间不能有空格,否则报错
  • 当前登录用户只能管理属主是自己的目录。这一点和windows有很大不同,windows只要是目录中拥有了完全权限,那么就可以管理其他用户在当前目录下的权限了。linux中,远端访问(win+r)方式无法管理属主非登录用户的目录,如果是xshell的方式,需要加上sudo(账户需要有sudo权限)
  • ACL权限优先级小于系统原生权限,如果系统设置了组rx没有设置w权限,那么ACL设置组的w权限不会生效(未验证)

查看设置后的样式,其中所有目录都增加了组tester的权限rwx,同时也增加了组tester的默认权限rwx

递归删除目录的所有默认权限

先执行测试

sudo find 需要修改的目录 -type d -exec setfacl --test -k {} \;|less

确认无误后执行

sudo find 需要修改的目录 -type d -exec setfacl -k {} \;

递归的删除目录的所有ACL权限

 先执行测试

sudo find 需要修改的目录 -type d -exec setfacl --test -b {} \;|less

确认无误后执行

sudo find 需要修改的目录 -type d -exec setfacl -b {} \;

递归的删除某个组的默认权限

 先执行测试

sudo find 需要修改的目录 -type d -exec setfacl --test -x d:g:groupname {} \; | less

确认无误后执行

sudo find 需要修改的目录 -type d -exec setfacl -x d:g:groupname {} \;

递归的删除某个组的ACL权限

  先执行测试

sudo find 需要修改的目录 -type d -exec setfacl --test -x g:groupname {} \; | less

确认无误后执行

sudo find 需要修改的目录 -type d -exec setfacl -x g:groupname {} \;

mask权限

在设置facl权限前后,我们会发现,除了我们自己设置的权限外,还有一个mask

mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。

mask 权限可以使用 setfacl 命令手动更改,比如,更改目录 mask 权限值为 r-x,可执行如下命令:

setfacl -m m:rx 需要设置权限的目录

其他相关内容:

linux权限管理之SetUID&SetGID_Rocket MAN的博客-CSDN博客

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值