Linux笔记16-权限管理[ACL权限]

 

Linux笔记16-权限管理[ACL权限]

 

 

◆ ACL如何开启

◇ 查看当前系统分区情况:使用 df -h

Linux笔记16-权限管理[ACL权限]

◇ 查看分区ACL权限是否开启

[[email protected] ~]# dumpe2fs -h /dev/sda3

#dumpe2fs命令是查询指定分区详细文件系统信息的命令

选项:-h 仅显示超级块中信息,而不显示磁盘块组的详细信息

Linux笔记16-权限管理[ACL权限]

上面的截图说明已经开启了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)

Linux笔记16-权限管理[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

Linux笔记16-权限管理[ACL权限]

### 创建一个用户组,同时加入刚才创建的用户到这个用户组

[[email protected] ~]# groupadd tgroup

Linux笔记16-权限管理[ACL权限]

### 根目录下创建一个目录 project

[[email protected] ~]# mkdir /project

Linux笔记16-权限管理[ACL权限]

### 更改这个目录的所有者为root,所属组为tgroup,同时设定权限为770

[[email protected] ~]# chown root:tgroup /project/

[[email protected] ~]# chmod 770 /project/

Linux笔记16-权限管理[ACL权限]

### 现在有第四个用户 tser 需要r-x 权限(就是最开始那张图),这时权限就不够用了。

Linux笔记16-权限管理[ACL权限]

#给用户ster赋予r-x权限,使用“u:用户名:权限”格式

[[email protected] ~]# setfacl -m u:st:rx /project/

Linux笔记16-权限管理[ACL权限]

◇ 查看ACL命令

[[email protected] ~]# getfacl 文件名

Linux笔记16-权限管理[ACL权限]

测试一下,tser这个用户的r-x权限。切换到这个用户,执行下面的操作:

Linux笔记16-权限管理[ACL权限]

 

◇ 给用户组设定ACL权限

[[email protected] /]# groupadd tgroup2

[[email protected] /]# setfacl -m g:tgroup2:rwx project/ (#为组tgroup2分配ACl权限。使用“g:组名:权限”格式 )

Linux笔记16-权限管理[ACL权限]

◆ 最大有效权限与删除ACL权限

◇ [最大有效权限mask]

mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。

Linux笔记16-权限管理[ACL权限]

(可以查看上面那个截图的倒数第二行...)

一般情况下,mask权限给出的是最大权限 rwx,所以这种情况下,ACL权限和mask权限“相与”的结果就是ACL权限。

 

◇ 修改最大有效权限

[[email protected] /]# setfacl -m m:rx 文件名

#设定mask权限为r-x。使用“m:权限”格式

Linux笔记16-权限管理[ACL权限]

这样一来,即使tgroup2组 拥有rwx权限,但实际上只有r-x权限。

设置mask权限,不影响所有者的权限,但会影响所属组和ACL权限。

 

◇ 删除ACL权限

[[email protected] /]# setfacl -x g:组名 文件名

#删除指定用户组的ACL权限

Linux笔记16-权限管理[ACL权限]

[[email protected] /]# setfacl -x u:用户名 文件名

#删除指定用户的ACL权限

[案例略]

[[email protected] /]# setfacl -b 文件名

#会删除文件的所有的ACL权限(即清空)

Linux笔记16-权限管理[ACL权限]

◆ 默认ACL权限和递归ACL权限

◇ 递归ACL权限

 递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。

 setfacl -m u:用户名:权限 -R 文件名

案例演示:在/project 下面创建两个文件,然后给这个目录设置ACL权限

Linux笔记16-权限管理[ACL权限]

由此可见,给目录设置了ACL权限,但是目录里的文件并没有ACL权限。

下面,演示递归ACL权限:

Linux笔记16-权限管理[ACL权限]

但是,有个问题。我现在在这个目录下创建一个新文件,就没有遵守ACL权限。

Linux笔记16-权限管理[ACL权限]

为了解决这个问题,请看下面的默认ACL权限。

 

◇ 默认ACL权限

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

setfacl -m d:u:用户名:权限 文件名

Linux笔记16-权限管理[ACL权限]

注意:这里的 -R 递归可以保留,表示这个目录下面的所有子目录和文件都拥有默认的ACL权限;

结果表示,新创建的文件 www 已经拥有 ACL 权限,但是之前的xyz 文件还是没有。那是因为:

* 默认ACL权限的设置仅针对新文件,已经有的文件还得需要递归ACL权限。注意这两个的结合使用。

 

递归权限和默认权限的总结:

① 都只能针对目录

② 递归权限 -R 针对 现有的目录

③ 默认权限 d: 针对将来的目录

 

【END】