Linux 中 uid、gid、euid、egid、groups 之间的关系

linux,uid,gid,euid,egid,groups · 浏览次数 : 0

小编点评

本文主要介绍了 Linux 系统中权限匹配流程、五种身份变化、有效用户/组、特权对 Shell 脚本的影响以及 SUID、SGID 和 Sticky 的功能。 1. 权限匹配流程: 当一个进程想要操作某个档案文件时,操作系统会根据进程拥有的身份和档案拥有的权限标记进行判断。判断流程包括:检查进程的 euid 是否等于档案的 owner-id,如果相等则检查档案拥有者对应的权限位中是否包含读取权限;如果不相等,则检查进程的 groups 是否包含档案的 group-id,如果包含则检查档案所属群组对应的权限位中是否包含读取权限;最后检查档案其他用户对应的权限位中是否包含读取权限。 2. 五种身份变化: 当一个二进制命令被授予 SUID/SGID 特权时,命令进程的五种身份会发生变化。如果没有特殊权限,进程的 uid、gid、euid、egid 和 groups 分别继承自 shell。当授予 suid 特权时,进程的 euid 等于 suid 的值,其他参数不变。当授予 sgid 特权时,进程的 euid 等于 uid,egid 等于 sgid 的值。当同时授予 suid 和 sgid 特权时,euid 和 egid 分别等于 suid 和 sgid 的值,groups 参数会添加上 sgid 的值。 3. 有效用户/组: 无论进程的五种身份如何变化,当进程产生新档案时,档案的拥有者和所属群组都是以 euid 和 egid 的值去赋予的。 4. 特权对 Shell 脚本无效: SUID 和 SGID 特权对 Shell 脚本不起作用,即使没有授予这些特权,命令的执行结果也是一样的。 5. Sudo 与 SUID/SGID 的优先级: 当 Sudo 和 SUID/SGID 同时作用二进制命令时,优先以 SUID/SGID 的权限为主,这意味着在 root shell 下执行特殊授权的命令时,命令进程的五种身份变化过程与普通用户执行相同。 6. SUID、SGID、Sticky 的功能: SUID:只作用于二进制文件,使命令以拥有者的身份运行,而非当前 shell 用户身份。 SGID:当作用于二进制文件时,效果与 SUID 类似,但多了一个群组的援助;当作用于目录时,新创建的文件的群组 id 会与该目录的群组 id 一致。 Sticky:只作用于目录,使得在该目录下新建的文件和目录只有所有者和 root 有权删除。

正文

导航


Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管理就变的很重要了。
Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。
image

故对于"静态"的档案来说,其中的权限属性即确定了“哪些身份的人拥有什么样的权限可以去操作档案”,如上图所示。

而对于"动态"的进程来说,操作系统又为进程分配了它们的用户身份,即有效用户身份euid、有效群组身份egid、群组身份groups、还有继承uid、继承gid。【注:不管进程是否有SUID/SGID加持,进程都将拥有这5个身份,只不过无差异时 id 命令默认不显示euid/egid而已,默认euid=uid、egid=gid】

(1)权限匹配流程

于是,当一个进程想要操作某个档案文件时,操作系统便会根据进程拥有的身份档案拥有的权限标记去做判断。判断流程如下(以下以读权限 r 举例):

  1. 如果进程的 euid 等于档案的 owner-id,则继续开始判断档案拥有者对应的权限位中是否包含 r 权限,若包含则文件被进程顺利读取,若不包含则提示进程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果进程的 euid 不等于档案的 owner-id,则开始步骤 2 的判断。
  2. 如果进程的 groups 包含档案的 group-id,则继续开始判断档案所属群组对应的权限位中是否包含 r 权限,若包含则文件被进程顺利读取,若不包含则提示进程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果进程的 groups 不包含档案的 group-id,则开始步骤 3 的判断。
  3. 此时直接开始判断档案其它人对应的权限位中是否包含 r 权限,若包含则文件被进程顺利读取,若不包含则提示进程无权限。至此,流程不再递归判断,直接结束。
    image

image

image

(2)五种身份变化

当一个二进制命令被授予 SUID/SGID 特权时,命令进程中 5 种身份的变化。

  • 当无特殊权限时,uid=继承shell的uid,gid=继承shell的gid,euid=uid,egid=gid,groups=uid所加入的群组。
  • 当授予suid特殊权限时,uid=继承shell的uid,gid=继承shell的gid,euid=suid的值,egid=gid,groups=uid所加入的群组。
  • 当授予sgid特殊权限时,uid=继承shell的uid,gid=继承shell的gid,euid=uid,egid=sgid的值,groups=uid所加入的群组+sgid。
  • 当授予suid和sgid特殊权限时,uid=继承shell的uid,gid=继承shell的gid,euid=suid的值,egid=sgid的值,groups=uid所加入的组+sgid。

image

image

image

image

(3)有效用户/组

不管实验2中进程的5种身份如何变化,当进程产生新档案时,档案的拥有者和所属群组都是以euid和egid的值去赋予的。
image

(4)特权对 Shell 脚本无效

特殊权限 SUID/SGID 对于 shell 脚本不起作用,授予和不授予的状态一样。
image

(5)Sudo 与 SUID/SGID 的优先级

当 Sudo 和 SUID/SGID 同时作用二进制命令时,优先以SUID/SGID的权限为主,这其实就相当于在root shell下执行特殊授权的命令一样,命令进程的5种身份依旧按照小节(2)描述的过程一样,root也不例外。
image

(6)SUID、SGID、Sticky 各自的功能。

  • SUID:只作用于二进制文件,当命令被执行时,命令会以命令拥有者的身份走完进程的整个生命周期,而非以当前 shell 的用户身份运行。
  • SGID:当作用于二进制文件时,效果与 SUID 类似,只是在命令进程的整个整个生命周期中又多了一个群组的援助;当作用于目录时,使用者进入此目录下时他的有效群组将会变成该目录的群组,此时新建的任何文件目录,他们的 群组id 都将和该目录的 群组id 一样。
  • Sticky:只作用于目录,使用者在该目录下新建的任何文件目录,都将只有自己与 root 才有权力删除。如 /tmp 目录。

与Linux 中 uid、gid、euid、egid、groups 之间的关系相似的内容:

Linux 中 uid、gid、euid、egid、groups 之间的关系

导航 1 权限匹配流程 2 五种身份变化 3 有效用户/组 4 特权对 Shell 脚本无效 5 Sudo 与 SUID/SGID 的优先级 6 SUID、SGID、Sticky 各自的功能 Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管

[转帖]linux中关于带宽 MTU的一些命令

linux中关于带宽 MTU的一些命令 https://blog.51cto.com/xiaoliuer/1882208 查看协商的带宽大小 sudo ethtools eth0 Linux更改网卡MTU方法: 1. 打开终端,查看当前网卡设置:ifconfig 2. 对需要改MTU的网卡进行设置(

[转帖]Linux 中用 dd 命令来测试硬盘读写速度

https://www.cnblogs.com/xiexun/p/13935443.html hdparm -T /dev/sdb iostat 磁盘性能监控 由sysstat包提供 dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转

[转帖]Bash 脚本实现每次登录到 Shell 时可以查看 Linux 系统信息

Linux 中有很多可以查看系统信息如处理器信息、生产商名字、序列号等的命令。你可能需要执行多个命令来收集这些信息。同时,记住所有的命令和他们的选项也是有难度。-- Magesh Maruthamuthu(作者) Linux 中有很多可以查看系统信息如处理器信息、生产商名字、序列号等的命令。你可能需

[转帖]如何理解 iowait

Linux中,%iowait 过高可能是个问题,严重的时候,它能使服务停止, 但问题是,多高才算高? 什么时候应该担心呢? 本文将讨论 iowait 的含义、相关的统计数据、原理以及 iowait的瓶颈问题 什么是 iowait Linux 中的解释 Show the percentage of t

[转帖]linux的硬链接和软连接的区别

Linux中有两种链接文件: 1)软链接(符号链接symbol),等同于Windows中快捷方式 ln -s 源文件名 符号链接文件名,源文件名和符号链接文件名是主从关系,源被删了,符号链接也就失效了 eg: ln -s src.c linker.c (linker.c就是src.c的一个符号链接文

[转帖]关于Linux操作系统中LUN的队列深度(queue_depth)

Linux中的queue_depth(队列深度),可以用lsscsi查看。不过今天在我的vm 虚拟机环境中(无外界存储),是没有lsscsi命令。不过,从网上,搜到了如下的信息:$ lsscsi -l[0:0:1:0] disk FUJITSU MAM3184MP 0105 /dev/sda sta

Linux 中的内部命令和外部命令

Linux 中的内部命令和外部命令 作者:Grey 原文地址: 博客园:Linux 中的内部命令和外部命令 CSDN:Linux 中的内部命令和外部命令 什么是 bash shell ? bash shell,就是一个程序,就是 Linux 系统安装的一个软件,用户通过 SSH 输入用户名密码登录操

Linux 中的文件简单说明

Linux 中的文件简单说明 作者:Grey 原文地址: 博客园:Linux 中的文件简单说明 CSDN:Linux 中的文件简单说明 说明 本文基于 CentOS 7 根目录(/)下文件夹主要作用 [root@linux /]# ll / total 16 lrwxrwxrwx. 1 root r

linux中修改文件常用vim命令

linux中修改文件常用vim命令 个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top | 按键 | 作用 | 含义 | | | | | | i | 在当前字符前插入 | (记忆:insert) | |