赞
踩
在Linux中,ACL(Access Control Lists)是一种权限控制机制,用于在文件和目录级别上设置访问控制。它提供了一种更灵活和精细的权限管理方式,可以针对不同的用户、用户组或特定的文件进行访问权限的配置。
ACL权限允许以下类型的访问控制:
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
选项 | 含义 |
---|---|
-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 将从标准输入读取文件名。 |
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 /
sudo chmod -R 770 需要更改权限的目录
默认 ACL 权限的作用是,如果给父目录设定了默认 ACL 权限,那么父目录中所有新建的子文件都会继承父目录的 ACL 权限。
需要注意的是:
思路:找到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 {} \;
先执行测试
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 {} \;
先执行测试
sudo find 需要修改的目录 -type d -exec setfacl --test -x g:groupname {} \; | less
确认无误后执行
sudo find 需要修改的目录 -type d -exec setfacl -x g:groupname {} \;
在设置facl权限前后,我们会发现,除了我们自己设置的权限外,还有一个mask
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。
mask 权限可以使用 setfacl 命令手动更改,比如,更改目录 mask 权限值为 r-x,可执行如下命令:
setfacl -m m:rx 需要设置权限的目录
其他相关内容:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。