lanyou00 2018-08-18
普通权限用途
在 Linux下,对一个文件(或者资源)可以进行操作的对象被分为三类: file owner(文件的拥有者),group(组,注意不一定是文件拥有者所在的组), other (其他)而对于每一类别又分别定义了read, write and execute(rwx)权限。即可读权限,可写权限以及执行权限。在这里我们用一个例子来看一下普通权限的作用。
现在假设存在一个文件test.txt,该文件的owner位和group位有rwx权限,而other位无任何权限。现在有一个用户lishyang想对其拥有可读权限,那么我们可以怎么做呢?(假设用户lishuyang不是该文件的owner,也不属与该文件的所属组admin),我觉得可行的方法有三种:
chmod o+rx test.txt
groupmems -g admin -a lishuyang
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权限
这个时候lishuyang就只获得了对文件test.txt的rx权限,成功避免了以上的问题。同样的我们还可以对test.txt给一个无关组设置权限,假设一个组为test组,则:
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范围内的权限。比如:
上图为例,当我们的权限超过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都是我们需要掌握的内容。