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