UID、EUID、GID和EGID

UID、EUID、GID和EGID

Linux中id真是太多了进程有pid,然后用户还有UID这种,真是有点绕。

在Linux当中一个进程(程序)拥有四个ID:真实用户UID、有效用户EUID、真实组GID和有效组EGID

这里以真实用户UID和有效用户EUID为例,真实组GID和有效组EGID道理是相同的。

EUID存在的目的是方便资源访问:它使得运行程序的用户拥有该程序的有效用户的权限(太过官方这种说法感觉)。EUID确定进程对某些资源和文件的访问权限。在大多数情况下,进程的UIDEUID是一样的,但是对于一些程序如supasswd这种set-user-id程序,它们有可能是不相同的。对于set-user-id程序而言,程序的EUID会变成程序的所有者UID,也就是说程序执行时,是以程序的所有者身份进行运行的。

passwd为例。passwd允许用户修改自己的登录密码,这个程序的所有者rootpasswd权限中有s,表明这是一个set-user-id程序。passwd命令需要修改/etc/shadow文件,对于/etc/shadow文件,普通用户是不可写(只有读权限)的,那么用户怎么能够通过passwd修改自己的密码呢,set-user-id程序的标志s就起到了作用,它在程序运行时将EUID会变成程序的所有者UID,那么程序有效的用户就会变成程序的所有者,在这里是root用户,理所当然的可以进行/etc/shadow文件的修改。

image-20220819104851240

再比如su程序允许任何用户都可以使用它来修改自己的账户信息,但修改账户时程序不得不访问文件/etc/passwd文件,而访问该文件是需要root权限的。那么以普通用户身份启动的su程序如何能访问/etc/passwd文件呢?

image-20220819130924743

su程序的所有者是root,并且它被设置了set-user-id标志。和上面passwd一样,set-user-id标志表示任何普通用户运行su程序时,其有效用户就是该程序的所有者root

获取和设置真实用户UID、有效用户EUID、真实组GID和有效组EGID的函数如下

#include <unistd.h>
#include <sys/types.h>uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
gid_t getegid(void);
int setuid(uid_t uid);
int seteuid(uid_t euid);
int setgid(gid_t gid);
int setegid(gid_t egid);

为了测试上面所说,我们先创建一个普通用户bugcat,目前已经有普通用户ubuntu

可以看到bugcat的uid是1002

image-20220819140826977

我们写下读取程序uideuid的代码如下:

#include <unistd.h>
#include <stdio.h>int main()
{uid_t uid = getuid();uid_t euid = geteuid();printf( "userid is %d, effective userid is: %d\n", uid, euid );return 0;
}

将其编译一下,然后查看查看文件属性,再运行程序,可以看到uideuid输出相同,表示真实用户有效用户都是ubuntu

image-20220819141010532

接着再将程序的所有者改为root,再加上s权限,再运行程序,可以看到uideuid输出不相同,表示真实用户ubuntu有效用户root(符合set-user-id程序特点)

image-20220819141209028

然后将程序的所有者改为bugcat(s权限不知道为啥自动取消了),再加上s权限,再运行程序,可以看到uideuid输出不相同,表示真实用户ubuntu有效用户bugcat

image-20220819141405860

最后我们去掉s权限,运行程序,可以看到uideuid输出相同,表示真实用户有效用户都是ubuntu,也从反面说明s权限的作用。

image-20220819142209993

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

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

相关文章

用户和用户组-UID和GID

用户和用户组-UID和GID Linux用户和用户组用户UID用户组GID/etc/passwd 文件结构/etc/shadow 文件结构 Linux用户和用户组 Linux采用一个32位的整数记录和区分不同的用户。这个区分不同用户的数字被称为User ID&#xff0c;简称UID。Linux系统中用户分为3类&#xff0c;即普通…

linux uid gid 作用,Linux uid和gid

Linux uid和gid教程 我们在登陆 Linux 系统时&#xff0c;虽然输入的是自己的用户名和密码&#xff0c;但其实 Linux 并不认识你的用户名称&#xff0c;它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。…

GiD 自定义 简介

目录 Blog Links一、前言二、GiD的程序架构三、问题类型系统四、主配置文件/.spd文件4.1 单位制4.2 截面属性4.3 局部轴 五、Tcl文件5.1 GiD程序调用GiD-Tcl5.2 执行程序的命名空间 六、参考文献 Blog Links DalNur | 博客总目录 GiD 实用教程 GiD 前处理 实例 GiD 自定义 简…

GiD 实用教程

目录 Blog Links一、前言二、用户界面2.1 界面组成2.2 快捷键2.3 模式切换2.4 图层功能2.5 删除功能2.6 视图切换2.7 渲染视图 三、帮助与实例3.1 帮助文档3.2 官方实例 四、GiD Basics五、几何模型5.1 点的定义5.2 线的创建5.3 面的创建5.4 体的创建 六、网格划分6.1 布设种子…

python 双向链表

双向链表基本介绍 双向链表增删改查操作思路分析 双向链表增删改查操作代码实现 """ 双向链表的增删改查 """# 英雄类 class HeroNode:next None # 指向下一个节点&#xff0c;默认为空pre None # 指向前一个节点&#xff0c;默认为空def …

小马哥的CSS驿站

目录 第一章 CSS概述 1.1语法 1.2注释 1.3CSS的创建 第二章 CSS选择器 1.id选择器 2.class选择器 3.标签选择器 4.子代选择器 5.后代选择器 6.相邻兄弟选择器 7.后续兄弟选择器 8.交集选择器 9.并集选择器 第三章 CSS样式 1.文本与文字样式 &#xff08;1&…

35 岁财务自由的小马哥,我想跟他学学!

如果说 Java 工程师&#xff0c;有什么一定要“死磕”拿下的东西&#xff0c;那一定是 Spring 无疑了。 众所周知&#xff0c;Spring 无论在 Java 生态系统&#xff0c;还是在就业市场&#xff0c;是绝对的王者。Spring AOP 作为 Spring 框架的核心内容之一&#xff0c;其重要性…

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率&#xff1a; 最重要的一个性能指标。 指的是数据的传送速率&#xff0c;也称为数据率 (data rate) 或比特率 (bit rate)。 单位&#xff1a;bit/s&#xff0c;或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…

什么盒模型

一、盒模型 1.什么是盒模型 在我们HTML页面中&#xff0c;每一个元素都可以被看作一个盒子&#xff0c;而这个盒子由&#xff1a;内容区&#xff08;content&#xff09;、填充区&#xff08;padding&#xff09;、边框区&#xff08;border&#xff09;、外边界区&#xff0…

1.1 编辑楼层标高

在任意视图内批量编辑楼层。点击 按钮&#xff0c;弹出楼层管理器界面&#xff0c;可以对模型中已有的楼层高度进行修改、批量修改楼层名称。在创建楼层时&#xff0c;可以设定起始楼层序号&#xff0c;后续楼层将自动排序,当前文件中的新建楼层在“确定”完成前允许自由删除操…

2.3 轴生墙

按照已创建的弧形/ 直线轴生成墙。点击 按钮&#xff0c;弹出轴线生墙对话框&#xff0c;如图所示&#xff1a;在基本墙中选择需要添加的墙类型&#xff0c;在顶高和底高中选择楼层&#xff0c;并可以勾选是否按楼层切分墙。可在墙上定位线中选择墙的中心或者外边缘等为定位线…

3.5 连接管线

通过Revit管线建模功能&#xff0c;或是通过翻模软件创建的管线往往是不连接的&#xff0c;如果要把它们连接起来很费力&#xff0c;同时也不容易指定连接的角度。模盒提供的连接管线”功能可以很好地连接各种管线&#xff0c;并根据所选管线的空间位置&#xff0c;智能提示可以…

1.7 删轴线

点击 按钮&#xff0c;选择任意需要删除的轴线即可完成删除&#xff0c;与已删除轴线同组的后续众轴线编号会自动向前进位&#xff0c;以保持轴网编号的连续性。 先图AGI模盒下载地址&#xff1a; 先图官网&#xff1a;http://www.agicloud.com 安装下载&#xff08;腾讯微云&a…

Retina时代的前端视觉优化

随着New iPad的发布&#xff0c;平板也将逐渐进入Retina时代&#xff0c;在高分辨率设备里图片的显示效果通常不尽人意&#xff0c;为了达到最佳的显示效果就需要对图片进行优化&#xff0c;这里介绍一些优化方法&#xff1a; 一、用CSS替代图片 这一点在任何时候都适用&#x…

3.4 分割管线

Revit中创建的管线为与实际施工结合&#xff0c;往往需要按指定的安装长度进行打断。按照传统手段进行打断&#xff0c;效率低下。可以通过模盒提供的批量分割打断管线功能&#xff0c;对机电的管线进行一次性打断。 可以打断的机电管线包括&#xff1a;风管、水管和桥架。 点击…

盒模型。。

css盒模型的概述&#xff1a; css盒模型&#xff08;Box Model&#xff09;规定了元素处理元素内容、内边距、边框、外边距、的方式 这个是盒模型的模型图 盒模型各部分说明&#xff1a; content&#xff1a;是盒子的内容 显示文本图像 padding&#xff1a;是盒子的内边距 …

2.4 标准柱

点击 按钮&#xff0c;弹出标准柱对话框&#xff0c;如图所示&#xff1a;在已创建的轴网角度处创建柱。可选择柱类型&#xff0c; 可同时创建跨多层柱子&#xff0c;并可选是否按照楼层切分柱。支持各种偏移&#xff0c;自定义偏心距离以及旋转角度的设置。可以点击最下方三个…

2.19 一键扣减

Revit建模后&#xff0c;各构件会存在互相重叠的情况&#xff0c;像结构柱与梁的重叠。由于实际施工不会出现重合的情况&#xff0c;因此模型的真实程序会降低&#xff0c;同时在后续的算量过程中会重复计算重合部分&#xff0c;计算结果不能精确。为此&#xff0c;模盒提供了“…

1.2 创建矩形轴网

点击 按钮&#xff0c;弹出矩形轴网对话框&#xff0c;如图所示&#xff1a;直接添加轴线间距生成轴网&#xff0c;轴网自动标注&#xff0c;轴网自动编号&#xff0c;自定义轴号编号原则&#xff08;加前缀和后缀&#xff09;&#xff0c;自定义标注样式&#xff0c;可选择规…

盒模型.

CSS盒模型概述&#xff1a;CSS盒模型(Box Model)规定了元素处理元素内容&#xff08;content&#xff09;、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;、外边距&#xff08;margin&#xff09;的方式。 下图为盒模型模型图。 盒模型各部分说…