我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主、属?以及其它人)搭配三种权限(可读、可写以及可执行),并且搭配三种特殊权限(SUID,sgiD,SBIT),来实现对系统的安全保护。但是,随着业务和需求的发展和扩大,仅有的这种模式已经不能满足当前复杂环境下的权限控制需求。
比如,当前有一个/data目录,现在需要A?成员能够可写,B?成员仅读,C?成员可读可写可执行,此时怎么办呢?
对于以上的需求,仅仅依托现有的传统权限管理模式,是无法实现的。为了解决该类型的问题,Linux 开发出了一套新的文件系统权限管理方法,叫做 文件访问控制列表 ACL(Access Control Lists)。通过使用 ACL,可以完美解决如上类型的需求问题。
那么下来来看,什么是访问控制列表?
什么是ACL
ACL 是 Access Control List 的缩写,主要目的是针对在传统的三种身份和三种权限之外,提供更加细化的局部权限设定。官方手册来讲,它主要针对用户、用户组、以及掩码方面控制权限。
简单去理解就是,ACL 可以针对单个用户、单个用户组来进行权限细化的控制。
而在windows系统上,没有这个ACL,ACL是类Unix(Unix-like)操作系统权限的额外支持项目,因此要使用ACL必须要有文件系统的支持才行。主要包括ReiserFS,EXT2/EXT3/ext4,JFS,XFS等文件系统。
需要注意的是,由于ACL是必须依托文件系统的,因此并不是每个文件系统都支持ACL。比如我们 win 平台的 NTFS 文件系统,fat32 文件系统是不支持ACL的。在Linux平台上,常见的支持ACL的文件爱你系统有如下几类,如EXT2/EXT3/ext4,XFS等等。
那么,如何查看你的系统是否支持 ACL 呢?
我们可以通过如下操作来查看:
以上两条命令任选一个即可!
如果在输出的信息,默认挂载选项中有acl这个标识,就代表你的文件系统是支持的。
假设,你的文件系统不支持或者支持但是并没有显示这个acl标识怎么办呢?针对此种情况,我们可以通过使用tune2fs来为他添加,或者mount去添加都可以。
ACL相关命令详解
介绍完了 ACL 是什么,也说了如何使文件系统支持 ACL 的功能,下面就来说说如何操作。
ACL的相关的操作主要有 3 个命令,分别是 getface、setfacl和chacl,常用的主要是getfacl 和 setfacl。
getfacl 一般都是直接在后面跟你所要查看的文件或者目录的路径,因此掌握如何查看即可。操作如下:
setfacl 是使用最多的,基本 ACL 方面的操作都是它,因此它的选项也是蛮多的。首先来setfacl的使用语法:
ACL 参数主要由3部分组成,组成结构如下:
实例练习
下面来看几个实例,来理解学习 ACL 的操作:
现在在/mnt目录,有文件test和目录dir,它们的权限都是600,属主和属?都是root。
现在要求完成如下要求:
1、为文件 test 增加 acl 权限,使 sunsky 用户可以可读可写
2、为文件 test 增加 acl 权限,使 sun ?的所有用户都能读该文件
3、为目录 dir 增加 acl 权限,使 sun ?的所有用户都能够对该目录可读可写可执行
4、删除文件 test 上,关于 sun ?的 acl 权限
5、删除目录 dir 的所有 ACL 权限
6、为目录 dir 增加默认ACL权限,使 dir 目录下新创建的文件或目录,都默认拥有 sunsky 用户可读可写可执行
在第六题中,我们发现,在user:sunsky:rwx后面多了一个 #effective:rw-,这是为什么呢?我们在切换到sunsky用户下,看看它是否有执行该文件的权限!
很明显,尽管我们使用setfacl给了sunsky对dir目录下默认新生成的文件可读可写可执行的权限,但是依旧是没有执行权限的。这是为什么呢?
我们发现多了输出#effective:rw-,它是由于什么出来的呢?
effective生效的为rw,他是受我们输出中的mask影响的。但是我们发现,我们并没有设置过mask啊,为啥他默认变成rw了。这里我就来介绍一下mask!
mask 的作用是为了用来限制除了属主和其他人以外的所有用户或组的权限,mask 权限为这些用户他们可能拥有的最高权限。
如果遇到设置的用户权限与 mask 权限冲突,则用户的权限为
# effective 权限
那么,一旦一个文件被设置了 ACL,其文件原属组部分的权限将变为 MASK 权限,而并非原来的属组权限。如果其文件原先属?权限为空,那么当你设置了mask权限之后,你的属?权限也相应改变为其mask对应的权限。
下面,我们就继续进行第六题的实验!
奇怪了,为什么我已经更改了mask为rwx了,并且effective也不再出现了,为何现在sunsky依旧拿不到执行权限呢?
我们现在去看下/mnt/dir/sunsky文件的ACL权限吧。
通过查看我们发现,/mnt/dir/sunsky文件中,对于 sunsky的acl权限设置竟然还是 # effective:rw- ,这是为什么呢?
原来,我们刚才修改 /mnt/dir 的 mask 仅仅只针对/mnt/dir目录下新生成的文件有效,并且由于文件在创建时,受到传统权限的 umask 值的影响,已经拥有了属?的权限,所以就使得 ACL 的mask设置失效。因此,此时我们通过使用上面提到的-R 递归选项,将/mnt/dir目录下的所有文件重新修改一次 ACL 的mask权限,就能解决该问题!
以上就是 setfacl 的日常管理的所有操作了!相信只要大家将以上的操作掌握,以后只要用到ACL的地方就不会窘迫了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。