导航


0、前言

Linux最优秀的地方之一,就在于他的多人多工环境。而为了让各个使用者具有较保密的档案资料,因此档案的权限管理就变的很重要了。

Linux一般将档案可存取的身份分为三个类别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限。

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

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

注:以下实验中涉及的 id、cat、touch 命令均是通过 cp $(which id) /tmp 从系统命令拷贝而来,通过对 id 命令赋予特权以观察同样被赋予特权的cat、touch 命令在此情景之下进程内部发生的变化,以及实际会产生什么样的效果。

1、权限匹配流程

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

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

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。

3、有效用户/组

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

4、特权对 Shell 脚本无效

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

5、Sudo 与 SUID/SGID 的优先级

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

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

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

Linux 特权 SUID/SGID 的详解的更多相关文章

  1. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  2. Linux下find命令用法详解

    Linux下find命令用法详解   学神VIP烟火 学神IT教育:XueGod-IT   最负责任的线上直播教育平台   本文作者为VIP学员 烟火   第一部分:根据文件名查找   1.在当前目录 ...

  3. Linux文件权限与属性详解 之 一般权限

    目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...

  4. Linux文件权限与属性详解 之 ACL

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. Linux文件权限与属性详解 之 chattr & lsattr

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  6. Linux文件权限与属性详解 之 su & sudo

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  7. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

  8. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  9. Linux基础知识之挂载详解(mount,umount及开机自动挂载)

    Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...

  10. Linux上的free命令详解、swap机制

    Linux上的free命令详解   解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...

随机推荐

  1. Lua 学习笔记(自用)

    Lua 学习笔记 1 语言基础 运行方式类似Python,可以直接在交互行运行,也可以通过解释器运行某个脚本.也可以在交互行运行某个lua脚本 dofile("hello.lua" ...

  2. keepalived(1)- keepalived集群概述

    目录 1. 高可用集群概述 2. keepalived概述 2.1 keepalived介绍 2.2 keepalived体系架构 2.3 keepalived实现原理 2.4 keepalived配 ...

  3. Maven - cmd命令行窗口创建maven项目

    一.构建命令 mvn archetype:generate 当出现以上的命令提示,直接回车下一步即可: 二.输入maven项目的groupId.artifactId.version 三.maven项目 ...

  4. 🔥httpsok彻底告别SSL证书续期烦扰

    httpsok彻底告别SSL证书续期烦扰 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定.安全.可靠. ...

  5. 前端JavaScript开发风格规范

    开发者需要建立和遵守的规范 大致可以划分成这几个方向: 开发流程规范 代码规范 git commit规范 项目文件结构规范 UI设计规范 1. 开发流程规范 这里可能有小伙伴有疑问了,开发流程规范不是 ...

  6. 基于FPGA的贪吃蛇游戏 之代码解析

    基于FPGA的贪吃蛇游戏 之代码解析 1. 代码结构 代码结构包含7格.v文件. 下面依次解析. 2. 代码解析 (1) seg_display.v 数码管的译码模块是最熟悉,最简单的模块了.这里是共 ...

  7. Linux上执行内存中的脚本和程序

    在Linux中可以不需要有脚本或者二进制程序的文件在文件系统上实际存在,只需要有对应的数据在内存中,就有办法执行这些脚本和程序. 原理其实很简单,Linux里有办法把某块内存映射成文件描述符,对于每一 ...

  8. 定了!航天科技AIRIOT 物联网平台新品发布会,6月6日北京见!

    AIRIOT新品发布会预告 航天科技定档6月6日举办AIRIOT新品发布会,诚邀大家共同见证4.0版本的创新与赋能! 活动地点:北京雍和航星科技园. 现场参会请通过下方长图二维码进行报名! 亦可预约直 ...

  9. WPF开发快速入门【8】WPF进行简单的3D开发

    概述 本文介绍采用WPF进行3D开发的一些基础知识,还有HelixToolkit控件的介绍以及在MVVM模式下使用3D框架. 3D开发入门 官方文档对3D开发的一些基础知识已经描述的比较详细了:三维图 ...

  10. nginx对称加密算法和非对称加密算法nginx证书配置

    对称加密算法 对称加密性能更好 对称加密: 客户端和服务器之间的通信数据是通过对称加密算法进行加密,对称加密是在加密和解密的过程中使用同一个私钥进行加密和解密,而且加密算法是公开的,所以对称加密中的私 ...