现在描述一个场景:
讲授linux的jack老师创建了一个文件夹 Directory, Hanson和Bill属于助教组,jack和助教组一起向文件夹Directory里添加、删除资料。文件夹的所属主jack(owner)、助教组(group)需要拥有权限rwx,其他人(others)对Directory则没有任何权限,整个文件夹的权限设为770。可现在来了一个其他班的老师Tom,他想查看Directory里有什么好资料,好和他的学生分享,Tom对Directory的权限只能是r-x,他只拥有进入(x)、查看(r)文件的权限。
皮皮:把Tom老师放到助教组肯定不行的,这样他会有删除Directory中的文件的权利?
钢丝:现在我新建一个组,将权限设为r-x,让Directory属于这个组,然后把Tom加入这个组。可这样不是和助教组冲突了吗,linux中的文件的所属组只能有一个!
猪儿:把其他人(others)的权限改为r-x(5).这样Tom不就可以只能查看、不能删除文件了吗?可是这样的话,所有的人都可以查看这个文件了,宝贵的资料落入恶毒的黑客分子怎么办?
阿傻:可不可以将文件夹的所属用户改为Tom,权限设为r-x……
阿傻话还没说完,就被旁边的大胖当头就一下,“你傻啊,所属用户改为了Tom,那我们的老师jack怎么办?这样整个文件夹的权限就是570,你有见过owner的权限还比group权限小吗?”
……
同学们思也不得其解。
那现在ACL(Access Control List)来了,它就是来解决这个问题的。
查看分区ACL权限是否开启, dumpe2fs 命令是查询指定分区详细文件系统信息的命令,-h 参数表示仅显示超级块中信息,而不是显示磁盘块组的详细信息。
df -h 查看分区情况
dumpe2fs -h /dev/sda12
如图:
mount -o remount,acl / 重新挂载根分区,并挂载加入acl权限
若要永久修改,则可以修改/etc/fstab这个文件,他是系统开机自动挂载的文件,使用命令mount -o remount重新挂载文件系统或是重启系统,使修改失效。
根据上面的情景在我的ubuntu里模拟上面的情况:
创建用户和组:
修改Directory文件夹所属主和权限:
getfacle 文件名 查看acl权限
设定ACL权限的命令setfacl [选项] 文件名
选项:
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认的ACL权限
-R 递归设定ACL权限
1、给用户设定acl权限
setfacl -m u:jack:rx Directory
2、给组分配acl权限
setfacl -m g:testgroup:rx Directory
3、递归ACL权限:
setfacl -m u:用户名:权限 -R 目录名(递归是父目录在设定ACL权限时,所有的子文件和目录也会拥有相同的 ACL权限)
4、默认ACL权限:
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
setfacl -m d:u:用户名:权限 -R(可选) 目录名
5、删除ACL权限:setfacl -x u:用户名 文件名 删除指定用户的ACL权限
setfacl -x g:组名 文件名 删除指定用户组的ACL权限
setfacl -b 文件名 删除所有的ACL权限
通过ACL,赋予Tom老师r-x权限:
看到上面图片的mask::rwx没有,mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask权限“相与”才能得到用户的真正权限,如图:
(来自兄弟连的视频教学ppt)
设定最大有效权限:setfacl -m m:rx /Directory,看图片的演示:
修改后的最大有效权限是mask::r-x,注意#effective:r-x,表示现在Director所属组的实际权限不是rwx了,而是r-x,它是和mask::r-x中的r-x,rwx和r-x相与之后的结果r-x。文件的属主的权限不依赖于mask,但组(group)和Tom用户的权限是和mask表示的权限相与之后的结果,这就是所谓的最大有效权限。