Linux权限管理:ACL权限

Linux特殊权限:ACL权限

第一部分:ACL权限简介

该权限是在所有者,所属组,其他人之外,再为另一个用户或者用户组单独设置访问该文件的权限。这里的文件也指目录。注意,一个文件可以设置多个ACL权限。

1.1 查看是否开启ACL权限


df

dumpe2fs -h /dev/sda6

Default mount options:    user_xattr acl

如果没有开启ACL权限,那么可以临时手动开启

mount -o remount,acl /

如果想永久生效,那么就要修改配置文件,是

/etc/fstab

但是怎么改跟教程不太一样,我也不知道了。

1.2 设定ACL权限:setfacl 选项 文件名

选项:

  • -m 设定ACL权限,给用户设定ACL权限格式: u:用户名:权限,给用户组设定: g:用户组:权限
  • -x 删除指定的ACL权限
  • -b 删除所有的ACL权限
  • -d 设定默认ACL权限
  • -k 删除默认ACL权限
  • -R 递归设定ACL权限

1.3 实例

先讲解一下需求便于理解,你创建了一个movie目录,在这个目录下放了一些资源,你本来打算这么分配权限:

  • 你自己:所有者:rwd
  • 你的朋友:所属组:rwd
  • 其他人:其他人:—

这个时候你的邻居,老王也想查看这个目录下的内容,可是你想分配给老王的权限是r-x,这个时候原本Linux的设置就不够用了,因为你无法把老王归属到任何一个权限中去,他既不属于文件的所有者,也不能属于所属组,更不能是其他人,所以要为老王单独赋予一个ACL权限,具体操作看下面:


mkdir movie

groupadd friends


useradd lw

chgrp friends movie

chmod 770 movie

setfacl -m u:lw:rx movie

ll


getfacl movie

1.4 查看ACL权限:getfacl 文件名

1.5 最大有效权限:mask

设置最大权限命令:setfacl -m m:r/w/x 文件名

在上面的实例中我们为lw设置了r-x权限,实际上这个权限是要与这个mask的设置相与才是lw对于movie的实际有效权限,如:

ACL      : r - x
mask     : r w x
effective: r - x

计算方法是: r/w/x 逻辑”与”运算 - 等于 -,r/w/x 逻辑”与”运算 r/w/x 等于 r/w/x。

这里我们尝试修改mask的值,再来看lw的实际有效权限

setfacl -m m:rx movie


下面我们再查看一下

getfacl movie/

1.6 删除ACL权限:setfacl -x u/g:用户名/组名 文件名

1.7 删除一个文件所有ACL权限:setfacl -b 文件名

1.8 递归ACL权限:setfacl -m u/g:用户名/组名:权限 -R 目录名

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

结合上面的老王的例子来说,我们为老王创建了关于movie目录的权限,可是针对movie目录内部的文件,老王还是没有权限的,我们只是允许老王查看里面的内容,可是却没有赋予老王查看目录内具体的文件内容的权限,这样老王是不会满意的,可是如果里面有成百上千的文件,那么我们需要把每一个文件都添加上一个老王的ACL权限,那么也是不可能的,所以这里就使用递归创建ACL权限。

setfacl -m u:lw:rx -R movie

cd movie/
touch for_lw.avi

getfacl for_lw.avi


注意,这里有一个危险的地方,前面我们讲过,文件在创建时是没有x权限的,可是刚才我们为了lw能进入该目录,所以我们给了lw对目录movie的x权限,在递归创建ACL权限后,目录下文件的权限就被修改成rx。

如:


touch for_everyone.avi


cd ..
setfacl -m u:lw:rx -R movie/

ll

在未执行递归创建ACL权限之前:

  • rw- r– r–

执行递归创建之后:

  • rw- r-x r– +

这时就为文件创建了可执行权限,这就叫权限溢出


接着再思考一种情况,在运行完 setfacl -m u:lw:rx -R movie/ 后,我再在里面新建文件,比如 for_myself.avi 文件,那么这个文件是否也会有针对lw的ACL权限呢?答案是没有的,那么我为了lw,每一次再其中新添加一个文件都要执行一遍setfacl,那不是很麻烦吗?所以为了新建的文件也有ACL权限,就要用到下面的知识。

1.9 默认ACL权限:setfacl -m d:u/g:用户名/组名:权限 目录名

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


setfacl -m d:u:lw:rx movie/

touch movie/lw.avi

getfacl movie/lw.avi

你可能感兴趣的:(linux)