ACL权限管理的作用及其意义

普通权限用途

在 Linux下,对一个文件(或者资源)可以进行操作的对象被分为三类: file owner(文件的拥有者),group(组,注意不一定是文件拥有者所在的组), other (其他)而对于每一类别又分别定义了read, write and execute(rwx)权限。即可读权限,可写权限以及执行权限。在这里我们用一个例子来看一下普通权限的作用。

现在假设存在一个文件test.txt,该文件的owner位和group位有rwx权限,而other位无任何权限。现在有一个用户lishyang想对其拥有可读权限,那么我们可以怎么做呢?(假设用户lishuyang不是该文件的owner,也不属与该文件的所属组admin),我觉得可行的方法有三种:

  • 将test.txt文件的other位权限设置为r_x,那么可以满足我们的需求

chmod  o+rx  test.txt

  • 将用户lishuyang添加至文件的所有组admin,然后可以使用group的权限达到目的

groupmems -g admin -a lishuyang

  • 通过suid权限使用户lishuyang暂时拥有fileowner权限,以达到目的

chmod u+s test.txt

通过上面的用法来看,设置普通权限就必须使得一个普通用户与文件的所属人,所属组建立联系。

ACL权限用途及优势

我们还以上述的test.txt文件举例,当我们按照上述的方式给用户lishuyang设置权限后,我们的确完成了要求,可是这中间却存在几个问题:
1.当我们通过放开other位权限来赋予lishuyang权限的同时,其它不属于test.txt所属组,不是test.txt所属人的用户也同样可以通过other位来访问文件,这样文件便共享了出来,显然是不可以的。
2.当我们把lishuyang添加至admin组内时,虽然避免了上一个问题,但是lishuyang却拥有了存在于admin内的其他文件的权限,lishuyang的权限得到了放大,同样是不可取的。
3.设定suid权限是一个解决方案,但当文件数量很多,我们需要对每个文件都临时获取权限时,这个方法也会显得不灵活了。
那么我们该如何既能避免上面这些问题,还能满足我们的需求呢?
这个时候就需要acl权限出马了。什么是ACL权限呢? 其实很简单,同样是为了满足需求给用户设置权限,普通权限的设置需要联系上文件的owner和group,但是acl权限的设置不需要关注用户和文件的关系,也就是说,ACL权限可以给特定的用户,特定的组设置权限,不受文件所属人和所属组的影响。现在我们给test.txt设置acl权限

ACL权限管理的作用及其意义

这个时候lishuyang就只获得了对文件test.txt的rx权限,成功避免了以上的问题。同样的我们还可以对test.txt给一个无关组设置权限,假设一个组为test组,则:

ACL权限管理的作用及其意义

ACL权限用途详解:

1.开启acl的方式 (因为CentOS6之前的版本,操作系统安装时所创建的文件系统默认未开启acl,而操作安装之后使用mkfs格式化的文件系统默认未开启acl,需要手工开启,方法如下:
tune2fs -o acl  /dev/sda5
mount -o acl  /dev/sda5  /app

2.设置ACL

给指定用户设置acl权限
setfacl  -m  u:user:rwx  filename

给指定的组设置权限

setfacl -m g:group:rwx filename

(注:避免使用系统组;避免使某个用户的多个组都设置不同的acl权限)

3.设置默认权限
设置默认权限,是针对目录而言的,当我们给目录设置了默认权限之后,那么目录中的文件以及未来所要创建的文件的权限都已经被设置了acl权限,默认即继承。

给指定目录设置默认用户权限和组权限

setfacl -Rm u:user:rwx testdir/

setfacl -Rm g:group:rwx testdir/

4.查看文件的acl权限

getfacl  tesdir/

5.删除acl权限

逐一删除acl权限

setfacl -x  u:user testdir/

setfacl -x  g:group testdir/

删除默认权限

setfacl  -k  testdir/

删除所有权限,清空acl结构

setfacl  -b testdir/

权限的阀值

权限的阀值,就是权限的上限,我们将其称做mask值
当mask值为rwx时,文件的任何权限的上限都是rwx,而当我们的mask值有范围时,那么就算我们的权限超过mask的值,那么我们只能拥有mask范围内的权限。比如:

ACL权限管理的作用及其意义

上图为例,当我们的权限超过mask值时,其右侧出现#effective:,这表示虽然权限超出,但是其有效权限只有mask所包含的权限。
mask值的设置

setfacl -m m:mask: filedir/

设置的mask值不难发现,其实是放在了group位上,所以在设置mask值时,同样可以通过修改group位的权限达到修改mask值的目的

chmod g=rwx testdir/

acl扩展属性 打包工具不支持存储
以备份文件为例,当我们不小心毁坏或删除掉含有acl权限的文件,然后通过备份文件恢复原文件时,我们将不会得到文件的acl权限,这个时候需要我们手动恢复acl权限,模拟过程如下:
1.备份带有acl权限的文件至tar
getfacl * >/root/acl.bak

2.利用tar备份文件

tar cvf file.out

3.模拟文件损坏

rm  -rf  *

4.恢复文件

tar  xvf file.out

5.恢复acl

setfacl --restore /root/acl.bak

权限对于Linux整体的学习是一个基础而又不可或缺的内容,不仅仅是acl权限,rwx,suid,sgid,sticky都是我们需要掌握的内容。

相关推荐