Linux笔记16-权限管理[ACL权限]
◆ ACL如何开启
◇ 查看当前系统分区情况:使用 df -h
◇ 查看分区ACL权限是否开启
[[email protected] ~]# dumpe2fs -h /dev/sda3
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
上面的截图说明已经开启了ACL。
如果没开启,使用下面两种方法可以开启。
(1)临时开启分区ACL权限
[[email protected] ~]# mount -o remount,acl / (#重新挂载根分区,并挂载加入acl权限 )
(2)永久开启分区ACL权限
[[email protected] ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1 (#加入acl)
[[email protected] ~]# mount -o remount / (#重新挂载文件系统或重启动系统,使修改生效)
对于(2),一定要小心操作,因为这个是系统启动时要检测的挂载文件,一旦改错了,系统将会崩溃。所以,如果已经开启了ACL,就不要操作这个文件了!
◆ 查看与设定ACL权限
◇ 设定ACL权限的命令
[[email protected] ~]# setfacl 选项 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限。
-k 删除默认ACL权限
-R 递归设定ACL权限。
案例演示:
### 创建三个用户
[[email protected] ~]# useradd zhangsan
[[email protected] ~]# useradd lisi
[[email protected] ~]# useradd st
### 创建一个用户组,同时加入刚才创建的用户到这个用户组
[[email protected] ~]# groupadd tgroup
### 根目录下创建一个目录 project
[[email protected] ~]# mkdir /project
### 更改这个目录的所有者为root,所属组为tgroup,同时设定权限为770
[[email protected] ~]# chown root:tgroup /project/
[[email protected] ~]# chmod 770 /project/
### 现在有第四个用户 tser 需要r-x 权限(就是最开始那张图),这时权限就不够用了。
#给用户ster赋予r-x权限,使用“u:用户名:权限”格式
[[email protected] ~]# setfacl -m u:st:rx /project/
◇ 查看ACL命令
[[email protected] ~]# getfacl 文件名
测试一下,tser这个用户的r-x权限。切换到这个用户,执行下面的操作:
◇ 给用户组设定ACL权限
[[email protected] /]# groupadd tgroup2
[[email protected] /]# setfacl -m g:tgroup2:rwx project/ (#为组tgroup2分配ACl权限。使用“g:组名:权限”格式 )
◆ 最大有效权限与删除ACL权限
◇ [最大有效权限mask]
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。
(可以查看上面那个截图的倒数第二行...)
一般情况下,mask权限给出的是最大权限 rwx,所以这种情况下,ACL权限和mask权限“相与”的结果就是ACL权限。
◇ 修改最大有效权限
[[email protected] /]# setfacl -m m:rx 文件名
#设定mask权限为r-x。使用“m:权限”格式
这样一来,即使tgroup2组 拥有rwx权限,但实际上只有r-x权限。
设置mask权限,不影响所有者的权限,但会影响所属组和ACL权限。
◇ 删除ACL权限
[[email protected] /]# setfacl -x g:组名 文件名
#删除指定用户组的ACL权限
[[email protected] /]# setfacl -x u:用户名 文件名
#删除指定用户的ACL权限
[案例略]
[[email protected] /]# setfacl -b 文件名
#会删除文件的所有的ACL权限(即清空)
◆ 默认ACL权限和递归ACL权限
◇ 递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
setfacl -m u:用户名:权限 -R 文件名
案例演示:在/project 下面创建两个文件,然后给这个目录设置ACL权限
由此可见,给目录设置了ACL权限,但是目录里的文件并没有ACL权限。
下面,演示递归ACL权限:
但是,有个问题。我现在在这个目录下创建一个新文件,就没有遵守ACL权限。
为了解决这个问题,请看下面的默认ACL权限。
◇ 默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
setfacl -m d:u:用户名:权限 文件名
注意:这里的 -R 递归可以保留,表示这个目录下面的所有子目录和文件都拥有默认的ACL权限;
结果表示,新创建的文件 www 已经拥有 ACL 权限,但是之前的xyz 文件还是没有。那是因为:
* 默认ACL权限的设置仅针对新文件,已经有的文件还得需要递归ACL权限。注意这两个的结合使用。
递归权限和默认权限的总结:
① 都只能针对目录
② 递归权限 -R 针对 现有的目录
③ 默认权限 d: 针对将来的目录
【END】