freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

不同的用户组之间的比较
2021-11-24 21:31:14

这个标题可能有点容易让人误解。这里首先澄清一下,用户组其实有很多的划分,有以下几个:实际用户组、有效用户组、保存的设置用户组、文件系统用户组和辅助组。我将比较详细的讲一下这些用户组将会用在什么地方

实际用户ID和实际组ID

实际用户id和实际组id,其实就是我们刚打开Linux的时候登录的用户和用户所在的首选属组。并且这两个ID存放在/etc/passwd文件中的第三个和第四个字段。

有效用户ID和有效组ID

有效用户组ID和实际用户组ID之间的比较是最多的。实际用户组ID和实际组ID最多的就是在登录的时候。而有效用户ID和有效组ID则是针对一个进程来说的。这两个ID就像是一个进程的凭证,当进程执行系统调用的时候就会用到。当进程执行系统调用的时候,操作系统将会结合进程的有效用户ID、有效组ID、辅助组ID一起来确定授予进程的权限。

我们举一个简单的例子,假如我们使用了一个open函数去打开一个文件,那么这个文件是否可以被正常的打开呢?如果说A用户创建了一个进程,然后想要打开B用户的文件,以只读的形式打开。但是该文件只对用户B有可读权限,那么用户A就无法正常打开open。于是open就会返回-1并且重置errno,相关错误信息为大概为无可读权限。

对于一个文件来说,其实还有一个文件所有者ID。该ID是怎么得到的呢?每一个文件的创建其实都是进程创建的,那么进程的有效用户组ID就会成为文件的所有者ID。

对于一个进程来讲,在一般情况下是哪个实际用户执行的,那么进程的有效用户就是谁。有一般也就有二般,我们后面慢慢道来。

设置用户ID和设置组ID

设置用户ID和设置组ID将会把进程的有效ID设置为文件所属用户的ID和所属组ID。这就是我们上面所说的二般情况。

首先我们来看一下这个图片
image.png
首先来看最开始的那一部分。我们重点看下红框部分,从左往右来看,第1到3位表示文件所有者的权限,4-6位表示同组用户的权限,7-9位表示了其他用户的权限。所有文件都是这样,包括目录也是这样。另外这些文件都还有两个特殊的权限位就是设置用户ID和设置组ID。我们可以使用chmod指令添加设置用户ID和设置组ID。每个文件的权限只能由其所有者进行设置。

我们可以设置一下这两个权限位(一般来说这两个权限位最长用在可执行文件上,所以拿test来做实验)。
chmod u+s filename设置文件的设置用户ID
chmod g+s filename设置文件的设置组ID
执行完以后我们再来看一下
image.png
看执行权限那里变成了s。当我们运行文件的时候,内核会将该文件的有效用户ID和有效组ID设置为文件所属的用户ID和文件所属的组ID。也就是说当root用户设置了此类文件的设置用户ID,并且其他用户拥有执行权限,那么当普通用户执行该文件的时候,该进程将会成为特权进程。

根据《Linux系统编程手册》所讲,在我们访问一个受保护的文件的时候,我们完全可以创建一个对该文件具有访问权限的ID,然后再创建一个设置由设置用户ID的程序。这样进程的有效用户组ID将会变为文件的所有者也就是我们创建的用户ID。这样对于这个文件即便是非特权用户也能进行查看,而且只能通过程序进行查看,这样基本无法对该文件造成任何伤害。

还有这样的一种情况,如果root用户创建的可执行文件设置了设置用户权限,那么其他用户执行该文件时由于该文件的有效用户ID为root,所以进程还是特权进程,这个是没有问题的;但是如果普通用户创建的可执行文件设置了设置用户ID,那么root用户执行该程序,进程依旧会获得特权

保存用户ID和保存组ID

保存用户ID和保存组ID是什么呢?当程序运行以后,内核将会设置进程的有效用户ID和有效组ID,然后将它们拷贝一份。拷贝下来的这份就被称为保存用户组ID。

那么保存用户ID有什么用呢?我们知道,如果一个进程设置了设置用户ID的权限位,当程序执行的时候程序的有效用户ID将会将会设置为属主ID。那么就有这样的一个情况,当A用户执行B用户的程序时,进程的有效用户将会被更改为B,那么此时情况是这样的
实际ID=A;有效ID=B;保存用户ID=B。如果有时候我们需要临时更换一下有效ID,那么直接改回实际ID就可以。但是最后我们的有效ID还是要变回去的,就是根据拷贝的保存用户ID。

这就是保存用户ID的作用,实际上在Linux中有很多系统调用都可以临时变换有效用户,比如我们在用到exec函数族的时候都会使用到保存用户ID

因此该ID的出现就是为了使进程的有效ID变换的更加灵活
总结:这次我们讲解了不同的用户组ID,以及它们的作用。在一般情况下进程的有效ID就等于执行程序用户的实际ID。而设置了设置用户ID的时候进程有效ID等于文件属主ID

# linux # 系统编程 # c语言 # 进程
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者