Linux学习笔记|一道题搞清楚目录与文件权限设置

注:本文参考《鸟哥的Linux私房菜》基础学习篇
情景模拟题:假设系统中有四个账号,分别是alex,alex1,arod,arod1,其中alex和alex1同属于alex用户组,arod和arod1属于arod用户组,alex和arod两个用户还共同支持名为project用户组。project用户组的用户拥有/project/process1/目录的开发权,该目录不允许project组外其他人进入查阅。则该目录的设置权限应该是什么?

首先建立四个用户,且满足alex和alex1同属于alex用户组,arod和arod1属于arod用户组,alex和arod两个用户属于project用户组。

[root@localhost ~]# groupadd project
[root@localhost ~]# groupadd projectalex
[root@localhost ~]# groupadd projectarod
[root@localhost ~]# useradd -g projectalex -G project alex
[root@localhost ~]# useradd -g projectarod -G project arod
[root@localhost ~]# useradd -G projectalex alex
[root@localhost ~]# useradd -G projectarod arod

查看各账号属性如下:
Linux学习笔记|一道题搞清楚目录与文件权限设置_第1张图片
在root下新建所需要的开发项目的目录/project/process1

[root@localhost ~]# mkdir -p /project/process

各层目录默认权限及所属用户组为:
这里写图片描述
该目录属于roo用户组,其他用户权限为r-x,四个用户都可以进入该目录并浏览目录内文件列表,但不能添加和修改目录内文件。
应将所属用户组改为project,并设置权限为project组外人员不能进入查阅,即用户组内权限为rwx,其他人为—
这里写图片描述
此时,/project/process目录project组外人员无任何权限。但是,存在一个问题,若alex用户在/project/process目录下新建文件newfile时,文件默认属于projectalex用户组,此时arod用户并无权限。因此上述设置只能满足alex1、arod1等组外人员不能进入目录。
同时,虽然alex1与alex同属于projectalex用户组,有权限查看alex新建的文件,但是由于没有权限进入process目录,因此不能对该文件进行任何操作。验证程序如下:
Linux学习笔记|一道题搞清楚目录与文件权限设置_第2张图片
如上图所示,newfile属于projectalex用户组,用户组权限是r–,但是alex1用户并没有权限进入该目录,也没有权限删除newfile文件,若/project/process目录的用户组权限是–x,newfile的用户组权限为—,则alex可以进入该目录并浏览目录下文件列表详情,不能打开newfile文件进行浏览,但是可以删除newfile文件。

Linux学习笔记|一道题搞清楚目录与文件权限设置_第3张图片
将newfile用户组权限改为rwx,由于默认newfile属于projectalex用户组,因此arod用户并无权限打开newfile文件。但是arod可以删除newfile文件:
这里写图片描述

由上面的结果,可知,对于alex新建的newfile文件,虽然alex1属于newfile的用户组,但是由于alex1没有目录权限,因此无法对newfile进行操作。arod不属于newfile用户组,因此无权限打开newfile文件,但是由于arod属于目录/project/process的用户组,因此具有对目录的rwx权限,因此可以浏览目录下的文件详情列表,也可以删除newfile文件。

此时,仍然不能满足题设要求。有两种方法,第一种是将newfile的用户组进行修改,改为project即可。
Linux学习笔记|一道题搞清楚目录与文件权限设置_第4张图片
此方法存在的问题是每次新建都需要更改所属用户组。
第二种方法是在root下对目录/project/process加入SGID权限。由于目录/project/process属于project用户组,设置SGID权限后,目录/project/process下新建文件的所属组将变为目录的所属组,即所有新建文件所属组都为projet。其他用户必须有r-x权限才能获得SGID权限,因此只有project组内成员才能在目录下新建文件并修改文件,且可以互相修改对方新建的文件。
Linux学习笔记|一道题搞清楚目录与文件权限设置_第5张图片
设置SGID权限后,目录/project/process下新建文件所属组为project,普通用户umask为002,则newfile2权限为-rw-rw-r–,满足题设所有要求。
Linux学习笔记|一道题搞清楚目录与文件权限设置_第6张图片

你可能感兴趣的:(Linux)