一.学习的内容
经过前两次的学习,我对文件的所有者和所属组的概念不是很清晰。即什么才是文件的所有者?什么才是文件的所属组?它俩和用户的基本组、扩展组有联系吗?文件的所有者、所属组和其他用户都对文件有相应的rwx权限,我认为其中最难理解的点就在于所属组对文件的操作权限,即什么样的用户才算是和文件同属于一个组?
通过查找资料,我发现了以下结论:
在 Unix/Linux 系统中,文件的权限分为三组:所有者、所属组和其他用户。
所有者:文件的所有者是创建该文件的用户或者最后修改该文件的用户。所有者对文件具有最高的权限控制。
所属组:文件的所属组是一个用户组,通常由系统管理员或文件的所有者指定。所属组可以包含多个用户,这些用户共享对文件的访问权限,但不具备所有者的特权。
其他用户:除了文件的所有者和所属组之外的所有用户属于 "其他用户" 组。这些用户在文件的权限控制中被视为普通用户,其权限受到文件的 "其他用户" 权限位的控制。
用户的基本组和扩展组:
每个用户在创建时都会被分配一个基本组,这是用户的主要组
用户可以属于一个或多个扩展组。所有的扩展组都列在用户的密码文件(/etc/passwd)中。
文件的所有者和所属组:
文件有一个所有者和一个所属组。所有者通常是创建文件的用户,但是所有者可以使用chown命令更改。
所属组通常设置为文件创建者的基本组,但是可以使用chown和chgrp命令进行更改。
通过上面的资料,最开始的几个问题只剩最后一个还回答不了。接下来我将通过几个实例,来解决最后一个问题。
实例1:
如下图所示:红色字体代表用户组,黑色字体代表用户、文件、文件属性。从图中可以看出,我想创建三个用户lxw1、2、3,此时它们会自动创建自己的基本用户组 lxw1、2、3,除此之外,我还让他们都具有相同的扩展组 ronny(之前的学习中创建过) 。最后,我测试,对于用户lxw1的家目录文件 /home/lxw1 (属性如图中所示),另外两个用户lxw2、3是否有权访问?毕竟这三个用户有相同的扩展组 ronny。
下面我们就在虚拟机内构建上述的原理图。首先使用 useradd 命令创建lxw1、2、3 这三个用户,并使用 id 命令查看是否创建成功,如图2所示:
接着,使用 usermod -G 命令将 ronny 组作为上述三个用户的扩展组,之后使用 id 命令查看是否正确。
然后,查看 lxw1用户的家目录文件的属性信息,使用 ls -ld 命令。
至此,所有准备工作已经就绪。接下来,我们测试在这种条件下,用户lxw2、3是否有权限访问 /home/lxw1(权限为700)。
在root 权限下,使用 “su - 用户名” 命令切换到 lxw2 用户,然后使用 cd、ls、touch命令发现输出的结果都是访问被拒绝。
同样的,exit 命令退出lxw2 用户,返回到 root用户下,再使用相同的命令,发现 lxw3 用户也无法访问 /home/lxw1 文件。
其实,这个实例并不能说明: lxw2、3用户无法访问 /home/lxw1 文件,是因为它们三者不在同一个组内。因为还有一个因素会影响访问情况,那就是 /home/lxw1 文件的权限问题(700),在这种权限下,即使用户lxw2、3和文件都在一个组内,用户也是无法访问该文件的。而只能说明:lxw2、3用户不是该文件的所有者。于是就有了下面的实例2。
实例2:
实例2的原理图相较于1,只进行了文件权限上的改动,即 /home/lxw1 的权限由 700 变成 770。原理图如下所示:
前面创建、构造结构的过程完全可以参考实例1,在这就不赘述。我直接用 “chmod -R 770 文件名” 命令来修改 /home/lxw1 文件的权限,使其变为 770。
之后,再检查一遍三个用户的组,确保要和原理图对应上。
完成上面的操作后,开始测试用户lxw2、3这次是否能访问 /home/lxw1 文件。
这些命令和实例1相同,所以也不再解释,直接看其输出:
通过上面的输出结果可以发现,即便在 /home/lxw1 文件的权限为770 的条件下,用户lxw2、3 依旧无法访问该文件,这也就表明了,此时三者也并不在同一个用户组内。也就是说,文件(/home/lxw1) 的所属组(lxw1),并不会并不会因为它的所有者(lxw1)属于某个扩展组(ronny),而也去属于某个扩展组(ronny)。
实例3:
把实例2中 /home/lxw1 文件权限由770改为777,再次测试 lxw2、3 用户是否能进行访问。
操作步骤和实例2类似,就不在此赘述,直接看运行截图
由上面三幅图可以发现,用户lxw2、3 实现了对文件/home/lxw1 的 rwx。由实例2可知:用户lxw2、3既不是 /home/lxw1 的所有者,也不是该文件的所属组成员,那么用户lxw2、3是如何对该文件进行访问的呢?那是因为,该文件的权限改成了777,即这两个用户通过其他人的身份对该文件进行rwx。
实例4:
由上面三个实例发现,用户lxw2、3要想访问 /home/lxw1 文件只能借助其他用户的身份,那么,如何才能让,这两个用户以所属组内成员的身份去访问 /home/lxw1 文件呢?如下面的原理图所示:
注意上图和前三个实例的不同点:/home/lxw1 文件的所有者没变,而改变了其所属组,访问权限为700。这样做的目的是为了检验,此时,/home/lxw1 文件、lxw2用户、lxw3用户是否在同一个组内。
如下图所示:分别使用 “ chomod -R 700 /home/lxw1” 和 “ chown -R lxw1:ronny /home/lxw1” 命令,将/home/lxw1 文件的权限和所属组进行更改。
使用 ls 命令查看 /home/lxw1 文件的属性信息,确认权限和所属组是我们想要的。
在使用 id 命令确认三个用户的信息。
由图18、19可知,原理图上的关系已经实现。接下来开始测试,lxw2、3用户是否能访问该文件。
下面两幅图是,lxw2、3用户对/home/lxw1 文件进行 rwx 的输出结果,可以看到都是不能访问的。
其实,这个结果并不让人意外,因为 /home/lxw1 文件的权限为 700,且lxw2、3用户显然不是该文件的所有者,自然也就不能对其进行访问,和实例1类似。
实例5:
实例5就是把实例4中 /home/lxw1 文件的权限由700——>770。原理图如下所示:
使用chmod 命令修改 /home/lxw1 文件的权限。
接着,就可以测试能否使用lxw2、3的用户身份对该文件进行访问。
由上面两幅图可以发现,用户lxw2、3可以对 /home/lxw1 (770)文件进行访问。结合实例4和此时文件的权限(770)可知,此时用户lxw2、lxw3和 /home/lxw1 属于同一个组(ronny)。
实例6:
实例5的结果说明了,用户lxw2、lxw3和/home/lxw1 文件在同一个组内(ronny)。那lxw1 用户呢?此时,它既是 /home/lxw1 文件的所有者,也跟 /home/lxw1 文件在同一个组内。那lxw1 用户对 /home/lxw1 文件的操作权限用的是所有者的?还是所属组的?(RHEL8中)
将实例4中 /home/lxw1 文件的权限由770——>670,然后测试 lxw1 用户能否正常访问 /home/lxw1 文件
如上图所示,其他条件都和实例5相同,就改变文件所有者的权限。然后,测试用户lxw1 能对/home/lxw1 文件 进行rwx中的那些操作。
当文件权限为 670时,lxw1 用户都无法进入 /home/lxw1 目录内,同时 ls命令、touch命令也都受到影响。基本可以认为 rwx 操作都会被拒绝。
/home/lxw1 文件的权限改为570 时,lxw1 用户可以执行 x、r权限,而w 权限(touch)被拒绝。如下图所示:
/home/lxw1 文件的权限改为370 时,lxw1 用户可以执行 x、w权限,而r 权限(ls 命令)被拒绝。如下图所示:
由上面三个权限670、570、370的表现可知,当一个用户既是文件的所有者,也和文件同属于一个组时,所有者权限和所属组权限并不是并集关系。
/home/lxw1 文件的权限改为700 时,lxw1 用户可以执行 rwx权限。如下图所示:
由这个图可知,当一个用户既是文件的所有者,也和文件同属于一个组时,所有者权限和所属组权限并不是交集关系。
综上所述,当一个用户 lxw1 既是文件(/home/lxw1)的所有者,同时也和文件属于同一个组(ronny)时,那么该用户只能使用文件所有者的权限,去访问该文件。
实例7:
前面6个实例都在使用 chmod、chown命令去修改文件属性(权限、所属组),那么如果直接修改用户(lxw1、2、3)的基本组、扩展组(usermod 命令),会对文件属性产生什么影响?
当文件所有者和文件所属组不一致时,改变所有者的基本组,并不会对文件的所属组产生影响,如下图所示:
当文件的所有者和所属组一致时,改变所有者的基本组,文件的所属组也会跟着改变。如下图所示:
二.本次学习遇到的问题
三、问题的答案及解决办法
总结:
由上面的7个实例可以确定一个用户是否有权限访问一个文件:
1、首先看,该用户是否为该文件的所有者。若是,则按照对应权限进行rwx;若不是,则进入第2步的判断。
2、判断该用户是否和此文件具有相同的组。最简单的方法就是,观察 ls -ld 命令显示的文件所属组 与 id 命令显示用户的groups 参数,是否有交集。若有则用户和该文件属于同一组,那么该用户可以按照文件所属组的权限对该文件进行rwx;若没有交集,则进入最后一步
3、若用户既不是文件的所有者,也不是文件所属组内的成员,那么该用户就按照文件的 其他用户权限 进行rwx。
注意:当一个用户既是所有者,又是文件所属组内的成员时,用户对文件的权限,取得是所有者的权限。