Linux学习记录18——用户的基本组、扩展组和文件的所有者、所属组之间的关系

news2025/1/19 8:11:10

一.学习的内容

        经过前两次的学习,我对文件的所有者和所属组的概念不是很清晰。即什么才是文件的所有者?什么才是文件的所属组?它俩和用户的基本组、扩展组有联系吗?文件的所有者、所属组和其他用户都对文件有相应的rwx权限,我认为其中最难理解的点就在于所属组对文件的操作权限,即什么样的用户才算是和文件同属于一个组?

        通过查找资料,我发现了以下结论:

        在 Unix/Linux 系统中,文件的权限分为三组:所有者、所属组和其他用户。

        所有者:文件的所有者是创建该文件的用户或者最后修改该文件的用户。所有者对文件具有最高的权限控制。

        所属组:文件的所属组是一个用户组,通常由系统管理员或文件的所有者指定。所属组可以包含多个用户,这些用户共享对文件的访问权限,但不具备所有者的特权。

        其他用户:除了文件的所有者和所属组之外的所有用户属于 "其他用户" 组。这些用户在文件的权限控制中被视为普通用户,其权限受到文件的 "其他用户" 权限位的控制。

        用户的基本组和扩展组:

        每个用户在创建时都会被分配一个基本组,这是用户的主要组
        用户可以属于一个或多个扩展组。所有的扩展组都列在用户的密码文件(/etc/passwd)中。

        文件的所有者和所属组:

        文件有一个所有者和一个所属组。所有者通常是创建文件的用户,但是所有者可以使用chown命令更改。
        所属组通常设置为文件创建者的基本组,但是可以使用chown和chgrp命令进行更改。

        通过上面的资料,最开始的几个问题只剩最后一个还回答不了。接下来我将通过几个实例,来解决最后一个问题。

实例1:

        如下图所示:红色字体代表用户组,黑色字体代表用户、文件、文件属性。从图中可以看出,我想创建三个用户lxw1、2、3,此时它们会自动创建自己的基本用户组 lxw1、2、3,除此之外,我还让他们都具有相同的扩展组 ronny(之前的学习中创建过) 。最后,我测试,对于用户lxw1的家目录文件 /home/lxw1 (属性如图中所示),另外两个用户lxw2、3是否有权访问?毕竟这三个用户有相同的扩展组 ronny。

图1   实例1的原理图

        下面我们就在虚拟机内构建上述的原理图。首先使用 useradd 命令创建lxw1、2、3 这三个用户,并使用 id 命令查看是否创建成功,如图2所示:

图2  创建三个用户并检查是否创建成功

        接着,使用 usermod -G 命令将 ronny 组作为上述三个用户的扩展组,之后使用 id 命令查看是否正确。

图3  将三个用户扩展组变成ronny

        然后,查看 lxw1用户的家目录文件的属性信息,使用  ls -ld 命令。

图4   查看 /home/lxw1 的属性

        至此,所有准备工作已经就绪。接下来,我们测试在这种条件下,用户lxw2、3是否有权限访问 /home/lxw1(权限为700)。

        在root 权限下,使用 “su - 用户名” 命令切换到 lxw2 用户,然后使用 cd、ls、touch命令发现输出的结果都是访问被拒绝。

图5  lxw2 用户访问 /home/lxw1 文件

         同样的,exit 命令退出lxw2 用户,返回到 root用户下,再使用相同的命令,发现 lxw3 用户也无法访问 /home/lxw1 文件。

图6  lxw3用户访问该文件

        其实,这个实例并不能说明: lxw2、3用户无法访问 /home/lxw1 文件,是因为它们三者不在同一个组内。因为还有一个因素会影响访问情况,那就是 /home/lxw1 文件的权限问题(700),在这种权限下,即使用户lxw2、3和文件都在一个组内,用户也是无法访问该文件的。而只能说明:lxw2、3用户不是该文件的所有者。于是就有了下面的实例2。

实例2:

        实例2的原理图相较于1,只进行了文件权限上的改动,即 /home/lxw1 的权限由 700 变成 770。原理图如下所示:

图7   实例2原理图

        前面创建、构造结构的过程完全可以参考实例1,在这就不赘述。我直接用 “chmod -R 770 文件名” 命令来修改 /home/lxw1 文件的权限,使其变为 770。

图8  改变文件的权限

        之后,再检查一遍三个用户的组,确保要和原理图对应上。

图9  id命令查看用户信息

        完成上面的操作后,开始测试用户lxw2、3这次是否能访问 /home/lxw1 文件。

        这些命令和实例1相同,所以也不再解释,直接看其输出:

图10  使用lxw2 用户身份访问该文件
图11  使用lxw3用户身份访问该文件

        通过上面的输出结果可以发现,即便在 /home/lxw1 文件的权限为770 的条件下,用户lxw2、3 依旧无法访问该文件,这也就表明了,此时三者也并不在同一个用户组内。也就是说,文件(/home/lxw1) 的所属组(lxw1),并不会并不会因为它的所有者(lxw1)属于某个扩展组(ronny),而也去属于某个扩展组(ronny)。

实例3:

        把实例2中 /home/lxw1 文件权限由770改为777,再次测试 lxw2、3 用户是否能进行访问。

图12  实例3原理图

        操作步骤和实例2类似,就不在此赘述,直接看运行截图

图13  修改文件权限
图14 用户lxw2 对文件进行rwx操作
图15  用户lxw3 对文件进行rwx操作

        由上面三幅图可以发现,用户lxw2、3 实现了对文件/home/lxw1 的 rwx。由实例2可知:用户lxw2、3既不是 /home/lxw1 的所有者,也不是该文件的所属组成员,那么用户lxw2、3是如何对该文件进行访问的呢?那是因为,该文件的权限改成了777,即这两个用户通过其他人的身份对该文件进行rwx。

实例4:

        由上面三个实例发现,用户lxw2、3要想访问 /home/lxw1 文件只能借助其他用户的身份,那么,如何才能让,这两个用户以所属组内成员的身份去访问 /home/lxw1 文件呢?如下面的原理图所示:

图16 实例4的原理图

        注意上图和前三个实例的不同点:/home/lxw1 文件的所有者没变,而改变了其所属组,访问权限为700。这样做的目的是为了检验,此时,/home/lxw1 文件、lxw2用户、lxw3用户是否在同一个组内。

        如下图所示:分别使用 “ chomod -R 700  /home/lxw1” 和 “ chown -R lxw1:ronny /home/lxw1” 命令,将/home/lxw1 文件的权限和所属组进行更改。

图17  更改文件的所属组和权限

         使用 ls 命令查看 /home/lxw1 文件的属性信息,确认权限和所属组是我们想要的。

图18  查看/home/lxw1文件信息

         在使用 id 命令确认三个用户的信息。

图19  确认用户信息

        由图18、19可知,原理图上的关系已经实现。接下来开始测试,lxw2、3用户是否能访问该文件。

        下面两幅图是,lxw2、3用户对/home/lxw1 文件进行 rwx 的输出结果,可以看到都是不能访问的。

图20  lxw2对/home/lxw1的rwx
图21  lxw3对/home/lxw1的rwx

        其实,这个结果并不让人意外,因为 /home/lxw1 文件的权限为 700,且lxw2、3用户显然不是该文件的所有者,自然也就不能对其进行访问,和实例1类似。

实例5:

        实例5就是把实例4中 /home/lxw1 文件的权限由700——>770。原理图如下所示:

图22 实例5的原理图

         使用chmod 命令修改 /home/lxw1 文件的权限。

图23  修改权限

        接着,就可以测试能否使用lxw2、3的用户身份对该文件进行访问。

图24  lxw2用户访问/home/lxw1文件
图25  lxw3用户访问/home/lxw1文件

        由上面两幅图可以发现,用户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 文件

图26  将文件权限由770改为670

        如上图所示,其他条件都和实例5相同,就改变文件所有者的权限。然后,测试用户lxw1 能对/home/lxw1 文件 进行rwx中的那些操作。

        当文件权限为 670时,lxw1 用户都无法进入 /home/lxw1 目录内,同时 ls命令、touch命令也都受到影响。基本可以认为 rwx 操作都会被拒绝。

图27  文件权限为670时

         /home/lxw1 文件的权限改为570 时,lxw1 用户可以执行 x、r权限,而w 权限(touch)被拒绝。如下图所示:

图28  文件权限为 570时

          /home/lxw1 文件的权限改为370 时,lxw1 用户可以执行 x、w权限,而r 权限(ls 命令)被拒绝。如下图所示:

图29  文件权限为370时

        由上面三个权限670、570、370的表现可知,当一个用户既是文件的所有者,也和文件同属于一个组时,所有者权限和所属组权限并不是并集关系

        /home/lxw1 文件的权限改为700 时,lxw1 用户可以执行 rwx权限。如下图所示:

图30  文件权限为700时

        由这个图可知,当一个用户既是文件的所有者,也和文件同属于一个组时,所有者权限和所属组权限并不是交集关系。

        综上所述,当一个用户 lxw1 既是文件(/home/lxw1)的所有者,同时也和文件属于同一个组(ronny)时,那么该用户只能使用文件所有者的权限,去访问该文件。

实例7:

        前面6个实例都在使用 chmod、chown命令去修改文件属性(权限、所属组),那么如果直接修改用户(lxw1、2、3)的基本组、扩展组(usermod 命令),会对文件属性产生什么影响?

        当文件所有者和文件所属组不一致时,改变所有者的基本组,并不会对文件的所属组产生影响,如下图所示:

图31  文件所有者和所属组不一致

        当文件的所有者和所属组一致时,改变所有者的基本组,文件的所属组也会跟着改变。如下图所示:

图32  文件所有者和所属组一致时

二.本次学习遇到的问题

三、问题的答案及解决办法

总结:

        由上面的7个实例可以确定一个用户是否有权限访问一个文件:

        1、首先看,该用户是否为该文件的所有者。若是,则按照对应权限进行rwx;若不是,则进入第2步的判断。

        2、判断该用户是否和此文件具有相同的组。最简单的方法就是,观察 ls -ld 命令显示的文件所属组 与 id 命令显示用户的groups 参数,是否有交集。若有则用户和该文件属于同一组,那么该用户可以按照文件所属组的权限对该文件进行rwx;若没有交集,则进入最后一步

        3、若用户既不是文件的所有者,也不是文件所属组内的成员,那么该用户就按照文件的 其他用户权限 进行rwx。

        注意:当一个用户既是所有者,又是文件所属组内的成员时,用户对文件的权限,取得是所有者的权限。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1557332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双端队列的插入与删除操作的实现及其时间复杂度分析

双端队列(deque,全称为double-ended queue)是一种支持在两端插入和删除元素的数据结构。与栈和队列不同,双端队列提供了更加灵活的操作方式。在实现双端队列时,我们可以采用数组作为底层数据结构,以保证插入和删除操作的时间复杂度为O(1)。 一、双端队列的基本概念 双…

Vue3 + Vite + TS + Element-Plus + Pinia创建新项目(1)

1、cmd进入命令行后,输入npm create vite 2、使用vs code打开文件夹 3、在VS Code的终端里面输入命令:npm i 安装依赖 4、安装依赖库 npm i vue-router 路由安装 npm i pinia 全局状态管理 npm i axios 请求库 npm i element-p…

Matlab之提高交叉定位点的定位精度

通过测向交叉定位的方法,按理只需2根测向线即可得出定位点的位置。但由于误差的存在,求出的定位点位置存在一定的偏差。为了得到更加精确的定位点位置,需要对定位点进行冗余测量,从而得到多个定位点,然后通过定位点估计…

ssm007亚盛汽车配件销售业绩管理统+jsp

亚盛汽车配件销售业绩管理系统设计与实现 摘 要 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让亚盛汽车配件销售信息的管理模式进行升级,也为了更好的维护亚盛汽车配件销售信息&am…

【Linux系统】信号量实现同步和互斥

一.回顾 在这之前已经讲解了System V版本的信号量,主要内容为以下3点: 信号量本质是一把计数器申请信号量本质就是预订资源PV操作(申请和释放)是原子的 今天我们要学习的是POSIX版本的信号量,以上三点同样遵循 二.信号量VS互斥锁 1.联系&…

统信 UOS V20 一键安装 Oracle 12CR2(220118)单机版

Oracle 一键安装脚本,演示 统信 UOS V20 一键安装 Oracle 12CR2(220118)单机版过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:…

【MySQL】事务是什么?事务的特性又是什么?

文章目录 ✍事务是什么?✍事务的特性(四个)✍事务并发时出现的问题✍事务的隔离性 ✍事务是什么? 事务是由一个或多个SQL语句构成的,在事务中,这些的SQL不可分割,是一个整体,整个事…

阿里云短信服务免费100条

阿里云短信服务免费100条申请入口 aliyunbaike.com/go/sms 最新阿里云短信优惠,2元可以购买200条短信,如下图: 阿里云短信服务免费100条 另外,阿里云短信服务免费100条是指买2000条短信可以赠送100条,买5000条赠300条&…

算法学习——LeetCode力扣图论篇1

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…

RPC(Remote Procedure Call)远程过程调用

定义 RPC(Remote Procedure Call)即远程过程调用,是一种计算机通信协议,它允许程序在不同的计算机之间进行通信和交互,就像本地调用一样。 为什么需要 RPC? 回到 RPC 的概念,RPC 允许一个程序…

Pytorch最全详细安装指南

一. 安装Anaconda 敬请期待。。。 二. 安装Pytorch 1 打开Anaconda prompt,创建pytorch环境 输入 conda create -n pytorch python3.7 运行结束,若出现proceed 输入y 运行结束,创建pytorch环境成功 2 安装pytorch 输入nvidia-smi 查…

Weblogic10.3.6补丁升级

由oracle官方发布的漏洞公告,对weblogic进行补丁升级。本文介绍的是weblogic安装的版本为10.3.6.0,如果你使用的是其他版本的请根据实际版本来选择下载 对于weblogic补丁升级,具体步骤如下: 1、首先需要下载weblogic补丁程序 2…

(day 24)JavaScript学习笔记(异常的处理)

概述 这是我的学习笔记,记录了JavaScript的学习过程。在写博客的时候我会尽量详尽的记录每个知识点。如果你完全没接触过JavaScript,那么这一系列的学习笔记可能会对你有所帮助。 今天学习异常的处理,主要是捕获异常、throw关键字主动抛异常…

【C++中的STL(未完成)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:…

SQLServer sys.default_constraints介绍

sys.default_constraints 是 SQL Server 的系统视图,它包含了数据库中所有默认约束的信息。默认约束是数据库对象(如表中的列)的约束,它为列定义了一个默认值,当在插入新行时没有为该列提供值时,将使用这个…

HarmonyOS实战开发-如何实现一个支持加减乘除混合运算的计算器。

介绍 本篇Codelab基于基础组件、容器组件,实现一个支持加减乘除混合运算的计算器。 说明: 由于数字都是双精度浮点数,在计算机中是二进制存储数据的,因此小数和非安全整数(超过整数的安全范围[-Math.pow(2, 53)&#…

【一】DDR3基础知识与IMG IP

【一】DDR3基础知识与IMG IP 一、DDR3的基本知识 1、DDR3全称为第三代双倍速率同步动态随机存储器 特点:掉电无法保存数据,需要周期性的刷新;时钟上升沿和下降沿都在传输数据;突发传输,突发长度burtst length一般为…

AcWing 1413. 矩形牛棚(每日一题)

原题链接:1413. 矩形牛棚 - AcWing题库 作为一个资本家,农夫约翰希望通过购买更多的奶牛来扩大他的牛奶业务。 因此,他需要找地方建立一个新的牛棚。 约翰购买了一大块土地,这个土地可以看作是一个 R 行(编号 1∼R&…

45.跳跃游戏||

// 定义一个名为Solution的类 class Solution {// 定义一个public方法jump,输入参数为一个整数数组nums,返回值类型为整数public int jump(int[] nums) {// 初始化跳跃次数结果变量为0int result 0;// 初始化当前覆盖的最远距离下标为0int end 0;// 初…

RVM安装ruby笔记

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…