文件系统的特殊权限以及ACL的相关用法
【文件系统的特殊权限】
Linux系统下文件有三种权限,可读(Readable)、可写(writable)、可执行(excutable)
这是比较常见的三种权限,比较常见,这篇就暂且不提。事事都有例外,今天主要来提一提那些例外的事。
首先先看一下例子。我们知道一个文件权限就代表着它可以执行什么,例如下图,/etc/passwd 的权限:对于其他用户是只读的。
那么我们首先思考一下:这个文件对于其他用户来说,是只读,不可写,不可执行的。那么用户只能查看这个文件。我们知道这个文件是用来存放用户信息的。如果用户想要修改自己的密码是没有权限的,那么接下来我们切换一个用户来实验一下:
显示修改密码成功。为什么?不是只有只读权限吗?接下来我们看看/etc/passwd 文件在哪:
我们知道文件的三种权限为rwx,那么上述文件权限有一个s权限是什么意思?这就是文件系统的特殊权限。
【干货】
文件的特殊权限有三种:SUID、SGID、sticky
SUID:
即对文件所属人的权限进行操作。如上图,当它出现在文件拥有者权限位时,代表了任何拥有执行该文件权限的人,在执行过程中都临时拥有该文件所属人的权限。SUID只有对一个可执行的二进制文件才有意义,如果作用在一个普通文件或者脚本时是没有意义的。
如上图,在文件所属人为上有s权限,那么当wangcai用户对文件拥有执行权限操作时,将临时获得root的权限。所以wangcai用户可以对自己密码进行修改并修改成功。
用一张图可以很清晰的表示:
SGID:即对文件所属组的权限进行操作
① 当对一个可执行的二进制文件作用了SGID权限之后,任何拥有执行该文件权限的人,在执行的过程时都临时拥有该文件所属组的权限。这个与SUID的作用是一样的
② 还有一种特殊情况。当对一个目录作用了SGID权限之后,情况就不一样了。
先来做一个实验~
这时候如果想使dir 目录下新创建的文件所属组也为g1组怎么办?
由以上实验可以得出:当对一个目录作用了SGID权限之后,当用户对某一目录有wx的权限时,该用户在该目录下建立文件或目录时,这个文件或者目录都属于父目录所属的组。
Sticky位
也可称为粘滞位。它的表示方法与前两个不同。SUID 和SGID都使用s表示,而Sticky位用t表示。
它表示当对一个目录(必须作用在目录上)作用了sticky之后,该目录下的文件仅其所属人才能删除。而且它只作用于组用户,目录的所属人不受其影响。
例如:
做一个实验:
在一个公司里,张三、李四、王五属于一个项目小组(admin),在这个小组里他们的信息是共享的:
即:三个人之间可以相互查看修改对方创建的文件,但同时也可以删除对方的文件。如:
这种操作显然是不科学的。现在我们需要设置在同一目录里的文件只能由所属人删除,其他人不能删除,这就需要使用sticky:
那么如何来设置上面所说的三种权限呢?
① 数字模式
4 表示SUID
2 表示SGID
1 表示Sticky
表示方法:在原有普通文件权限之前加上相应的特殊权限。
eg: 上述例子里,用数字模式表示为:
chmod 1771 dir1
如果三个权限同时存在时,将各个权限的值相加,即7xxx 表示。
② 权限模式
SUID : chmod u+s filename
SGID : chmod g+s filename
Sticky: chmod o+t filename
【ACL(Access Control List)】访问控制列表
我们知道,文件权限将用户分为三种人:文件所属人,所属组的成员以及其他人。但是在现实生活中,这三个分类往往满足不了我们的需求。那么ACL就是为了实现更灵活的权限管理而生。
除了文件的所有者,所属组和其他人,我们可以对更多的用户设置不同的权限来应用于不同的情况。
1、ACL权限的开启
想要对不同用户设置更多的acl权限,首先要确保acl权限的开启。
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加,添加方法为:
tune2fs –o acl/dev/sdb1
mount –o acl/dev/sdb1 /mnt/test
2、ACL权限的应用
查看文件的ACL权限
getfacl filename/group
设置一个用户的ACL权限:
setfacl -m u:username:rwx file(directory) 【u】表示指定用户
设置一个组的ACL权限:
setfacl -m g:groupname:rwx file(directory) 【g】表示指定组
如:现有一个文件权限如下:
设置ACL权限,使用户tom 拥有对该目录读写的权利,该用户不属于其中三类任一类:
设置组:
以上设置命令只对当前已存在的文件或者目录设置了acl权限,如果想要对未来创建的文件或者目录都拥有acl权限,需要加上默认权限:
setfacl -m d:u:username:rwx file(directory)
setfacl –R -m 表示递归创建特殊权限
如果要删除用户的权限:
setfacl –x file(directory) 删除用户的权限
setfacl -Rb * 清空所有目录及文件的ACL权限
【顺序】
acl权限的生效顺序为:所有者 -> 自定义用户 -> 自定义组 -> 其他人
按生效顺序查找,一旦找到所对应的条件将不在向下查看。
【说明】
如果一个用户属于多个组,并且多个组都设置了acl权限,则该用户拥有组的累加权限。
PS:以上就是本编所总结的文件系统相关特殊权限,其中若有错误不足之处,希望路过的看官大神指正,小女子不胜感激~~~
再次笔芯~~~