Linux 特权 SUID/SGID 的详解
导航
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 举例):
- 如果进程的 euid 等于档案的 owner-id,则继续开始判断档案拥有者对应的权限位中是否包含 r 权限,若包含则文件被进程顺利读取,若不包含则提示进程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果进程的 euid 不等于档案的 owner-id,则开始步骤 2 的判断。
- 如果进程的 groups 包含档案的 group-id,则继续开始判断档案所属群组对应的权限位中是否包含 r 权限,若包含则文件被进程顺利读取,若不包含则提示进程无权限,此时不管 r 权限包含与否判断流程都将不再继续;如果进程的 groups 不包含档案的 group-id,则开始步骤 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 的详解的更多相关文章
- Linux文件权限与属性详解 之 SUID、SGID & SBIT
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- Linux下find命令用法详解
Linux下find命令用法详解 学神VIP烟火 学神IT教育:XueGod-IT 最负责任的线上直播教育平台 本文作者为VIP学员 烟火 第一部分:根据文件名查找 1.在当前目录 ...
- Linux文件权限与属性详解 之 一般权限
目录 一般属性 1. iNode: 3152621 2. 文件类型 3.文件访问权限 4. 链接数目: 5. 文件所有者 6. 文件所属组 7. 文件大小 8. 修改时间 9. 文件名称 Linux文 ...
- Linux文件权限与属性详解 之 ACL
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- Linux文件权限与属性详解 之 chattr & lsattr
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- Linux文件权限与属性详解 之 su & sudo
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
- Linux基础知识之挂载详解(mount,umount及开机自动挂载)
Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...
- Linux上的free命令详解、swap机制
Linux上的free命令详解 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...
随机推荐
- AI实战 | 手把手带你打造智能待办助手
背景 大家好,我是努力的小雨.今天我想分享一下搭建待办助手的经历.起初,我并没有什么特别的创意点子.但在4月16日的百度Create大会上,我看到了小度的大模型加持使得其变得更加智能.我被一场示例所震 ...
- iptables命令详解
安装iptables yum install iptables-services 编写允许访问的策略 vim /etc/sysconfig/iptables # sample configuratio ...
- WordPress 整合Bootstrap制作分页代码
1.整合Bootstrap分页代码 * 因为wordpress默认仅仅提供简单分页, 所以要实现数字分页,需要自定义函数,wordpress可以结合bootstrap制作分页,bootstrap提供了 ...
- Django性能之道:缓存应用与优化实战
title: Django性能之道:缓存应用与优化实战 date: 2024/5/11 18:34:22 updated: 2024/5/11 18:34:22 categories: 后端开发 ta ...
- linux下使用fdisk进行磁盘分区详解
目录 一.前言 二.关于磁盘分区的结构 三.fdisk命令详解 四.使用fdisk进行磁盘分区 4.1 磁盘分区规划 4.2 fdisk进行磁盘分区 4.3 格式化分区 4.4 创建挂载点/挂载目录 ...
- 14个Flink SQL性能优化实践分享
本文分享自华为云社区<Flink SQL性能优化实践> ,作者:超梦. 在大数据处理领域,Apache Flink以其流处理和批处理一体化的能力,成为许多企业的首选.然而,随着数据量的增长 ...
- c++ RTTI Runtime Type Identification 运行阶段类型识别
NoVirtualBase* NvirBase = new NovirtualDerivd(); NvirBase->print(); // auto nd1 = dynamic_cast< ...
- RocketMQ主从同步原理
一. 主从同步概述 主从同步这个概念相信大家在平时的工作中,多少都会听到.其目的主要是用于做一备份类操作,以及一些读写分离场景.比如我们常用的关系型数据库mysql,就有主从同步功能在. 主从同步,就 ...
- VMware Workstation安装Ubuntu窗口太小的解决方式
1.选择菜单中的:虚拟机--------安装VMware-Tools 2.点击DVD图标 3.将压缩文件复制到桌面 4.解压压缩文件 5.进入解压后的目录,执行命令: sudo perl vmware ...
- 安装vmware17和下载红帽镜像
安装vmware17 一.下载 1.访问vmware官网 (也可以使用这个链接https://www.vmware.com/products/workstation-pro/workstation-p ...