[操作系统安全]SetUID与Capability权能

news2024/11/20 14:39:30

问题一、解释“passwd”, “sudo” , “ping”等命令为什么需要 setuid位,去掉s位试运行,添加权能试运行。
1、为什么需要setuid位:
首先明确setuid的作用是:执行该设置后,文件执行时将以文件拥有者的身份执行,而非普通用户的身份。若没有该设置,普通用户无法执行root用户的文件和进程。
实验过程:
以普通用户的身份登录操作系统,通过whoami命令查看当前用户:
在这里插入图片描述
通过which命令查看passwd、sudo、ping文件所在位置:
在这里插入图片描述
通过ls -all查看这些文件的详细信息:
在这里插入图片描述
从上图可以看出passwd、sudo和ping的文件拥有者是root,即超级用户,所属用户组是root,并且都设置了SUID。
常规来讲,当其他的普通用户执行passwd、sudo和ping时,由于不是root,无法执行这些文件。但实际上,由于普通用户设置了SUID,便可以临时以文件拥有者root的身份执行这些文件。所以passwd、sudo和ping等命令需要setuid。
在这里插入图片描述
SUID设置方法
添加suid位:chmod u+s FILE…
删除suid位:chmod u-s FILE…
具体提权
SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限
② 去掉suid位
通过chmod命令移除passwd、sudo和ping文件的setuid:

在这里插入图片描述
此时在执行发现普通用户无法执行sudo命令,并且系统提示要求设置suid位,同理,ping和passwd命令也一样无法继续正常使用。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在root权限下将三个命令的suid权限添加回来
![在这里插入图片描述](https://img-blog.csdnimg.cn/850c33f5eb634807ac190f959a3a2d1e.png
添加回来后再次查看对应的文件,发现suid位由x变为了s,说明添加成功。
在这里插入图片描述

此时在普通用户下再次执行sudo、ping和passwd命令,此时已经可以正常使用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

问题二、指出每个权能对应的系统调用,简要解释功能
通过man capabilities命令可以查看权能及简要功能

在这里插入图片描述
在这里插入图片描述
使用 sudo find / -name capability.h 查找到路径 /usr/src/linux-headers-5.15.0-46/include/uapi/linux/capability.h ,整理可得下表:
在这里插入图片描述
在这里插入图片描述
问题三、查找你Linux发行版系统(Ubuntu/centos等)中所有设置了setuid位的程序,指出其应该有的权能
首先,查看Linux的发行版,通过uname -a命令,可以看出内核版本为5.15.0-67-generic,Ubuntu发行版为18.04。
在这里插入图片描述
使用find / -perm /u=s命令
在这里插入图片描述
在这里插入图片描述

部分程序的权能:
在这里插入图片描述
问题四、实现一个程序其满足以下的功能:
(1)能够永久的删除其子进程的某个权能。
(2)能暂时性的删除其子进程的某个权能。
(3)能让上面被暂时性删除的权能重新获得。

Capabilities机制,是在Linux内核2.2之后引入的。它将root用户的权限细分为不同的领域,可以分别启用或禁用。从而,在实际进行特权操作时,如果euid不是root,便会检查是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。
每个进程有三个和能力有关的位图:inheritable(I)、permitted§和effective(E),对应进程描述符 task_struct(include/linux/sched.h)里面的cap_effective, cap_inheritable, cap_permitted。每种能力由一位表示,1表示具有某种能力,0表示没有。
1)cap_effective 当一个进程要进行某个特权操作时,操作系统会检查 cap_effective的对应位是否有效,而不再是检查进程的有效UID是否为0。
例如,如果一个进程要设置系统的时钟,Linux的内核就会检查 cap_effective的CAP_SYS_TIME位(第25位)是否有效,
2)cap_permitted 表示进程能够使用的能力。在cap_permitted中可以包含cap_effective中没有的能力,这些能力是被进程自己临时放弃的,也可以说cap_effective是cap_permitted的一个子集。进程放弃没有必要的能力对于提高安全性大有助益。
例如,ping只需要CAP_NET_RAW,如果它放弃除这个能力之外的其它能力,即使存在安全缺陷,也不会对系统造成太大的损害。
3)cap_inheritable表示能够被当前进程执行的程序继承的能力。
永久删除子进程的权能就移除effective和inheritable、permitted的,暂时性删除就移除effective和inheritable的,恢复暂时性删除的就添加进effective和inheritable。
本程序以ping指令为例进行测试,首先运行程序,并查看当前的权能,此时包括cap_net_raw权能

在这里插入图片描述
之后移除掉该权能,查看此时的权能发现移除成功。
在这里插入图片描述
此时执行ping命令,已经没有权限。
在这里插入图片描述
恢复刚被暂时移除的权限,再查看相关权能,以及执行ping命令,发现恢复成功。
在这里插入图片描述
在这里插入图片描述
永久删除cap_net_raw权能后,发现少了cap_net_raw+p,表示移除成功,此时再通过3恢复权能发现不能成功,表示已经永久移除。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

C++【栈队列(3种)反向迭代器】

文章目录一、容器适配器二、栈(一)栈定义(二)栈使用接口(三)栈模拟实现(1) 栈模拟实现解析(2) 栈模拟实现代码(3) 栈模拟结果三、队列(一)普通队列(1)普通队列…

4、浅谈Makefile文件及其简单的使用知识

文章目录1、什么是Makefile?(1)makefile关系到了整个工程的编译规则。(2)makefile带来的好处就是——“自动化编译”(3)make是一个命令工具,是一个解释makefile中指令的命令工具2、为…

[FREERTOS]队列

1.什么是队列 队列也称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务之间,中断和任务之间传递信息 2.传递信息为什么不用全局变量呢? 确实全局变量依然可以传递信息,但是如果全局变量改变的很频繁&#x…

网工必知—什么是堡垒机?-CCIE

什么是堡垒机? 网络工程师一定听过或用过所谓的“堡垒机”,那么堡垒机到底是什么呢? 堡垒机是一种跳板机制(Jump Server),在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的…

flink 1.16 在centos安装 部署踩的坑

报错: 1 RESOURCES_DOWNLOAD_DIR : 这个错误是修改了 conf目录下 的 master 或 workers 等信息造成的. 2 修改了这个信息可能会造成输入密码的问题. 3 Could not connect to BlobServer at address localhost/127.0.0.1:39203 这个端口还会变化,这种问题可能是因为conf下的…

Python将Word文件中的内容写入Excel文件

在日常办公中我们经常需要将word文件中的数据写入Excel中,如果是手动一个一个进行复制粘贴,那将会非常的耗时且繁琐! 遇到这种问题我们首先想到就是利用编程解决,今天我分享一个word转excel的小方法! 首先我有一个wo…

常见漏洞扫描工具AWVS、AppScan、Nessus的使用

HVV笔记——常见漏洞扫描工具AWVS、AppScan、Nessus的使用1 AWVS1.1 安装部署1.2 激活1.3 登录1.4 扫描web应用程序1.4.1 需要账户密码登录的扫描1.4.2 利用录制登录序列脚本扫描1.4.3 利用定制cookie扫描1.5 扫描报告分析1.5.1 AWVS报告类型1.5.2 最常用的报告类型&#xff1a…

Microchip的10M以太网解决方案

(以下所有图片均来源于Microchip官网) 一 为什么需要10M车载以太网 目前车载百兆以太网(100Base-T1)和千兆以太网(1000Base-T1)技术较为成熟,但如果直接用100Base-T1/1000Base-T1来替代目前被广…

anaconda 创建虚拟环境 基本命令操作

下载好之后直接打开 anaconda prpmpt : 此时直接输入 :activate 不加环境名是直接进入到base环境中的 必须先进入到base环境中再使用后边的命令 : activate 直接进入base环境:如图:conda create -n 名字 python3.7 创建虚拟…

善用Embedding,我们来给文本分分类

你好,我是徐文浩。 上一讲里我们看到大模型的确有效。在进行情感分析的时候,我们通过OpenAI的API拿到的Embedding,比T5-base这样单机可以运行的小模型,效果还是好很多的。 不过,我们之前选用的问题的确有点太简单了。…

springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透

文章目录前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统2.2 创建隧道映射本地端口2.3 测试公网地址3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址4. …

segment anything paper笔记

demo主页(包含paper, demo, dataset) 通过demo可以看到一个酷炫的效果,鼠标放在任何物体上都能实时分割出来。 segment anything宣传的是一个类似BERT的基础类模型,可以在下游任务中不需要再训练,直接用的效果。 而且…

增强领域的知识图谱

以下是一些近两年基于知识图谱做知识增强的顶会论文: "knowledge-enhanced hierarchical graph convolutional networks for intent detection" (acl 2021) "kg-bert: bert for knowledge graph completion" (emnlp 2019) "k-adapter: i…

C语言刷题--内存存储、操作符

魔王的介绍:😶‍🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍&#x1…

04-Mysql常用操作

1. DDL 常见数据库操作 # 查询所有数据库 show databases; # 查询当前数据库 select databases();# 使用数据库 use 数据库名;# 创建数据库 create database [if not exits] 数据库名; # []代表可选可不选# 删除数据库 drop database [if exits] 数据库名; 常见表操作 创建…

Nestjs实战干货-概况-中间件-Middleware

中间件 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象,以及应用程序的请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量来表示。 Nest 中间件在默认情况下等同于Express中间件。下面是来自官方 exp…

MBD—模型的回调函数

目录 前面 如何设置? 应用 简单的提示 数据的初始化 前面 常用的回调函数有三类:模型的回调函数、模块的回调函数、信号的回调函数。这里分享一下模型的回调函数。 回调函数就是CallBack. 如何设置? 打开一个模型,在空白…

【计算机网络】TCP拥塞控制、丢包重传机制与滑动窗口机制

文章目录TCP 拥塞控制原理为什么拥塞期间,发送方会收到接收方的重复确认?TCP 滑动窗口机制原理TCP 丢包重传机制TCP 拥塞控制原理 TCP拥塞控制是指在网络拥塞的情况下,TCP协议通过调整发送数据的速率来避免网络拥塞的一种机制。TCP拥塞控制的…

物料分类视图:200 和 300 分类测试记录

一、概述 测试目的:将销售订单中成品对原材料的需求,通过MRP运行,传递到生产订单中 系统版本:S4 工厂代码:1001(计划工厂) 、1008(执行工厂) 成品: CP0000535 原材料: 编码 描述 板材特性 123…

国内 中 大 型 IT 软件 外包公司 名单 汇总(2023 最新版!)

文章目录***\*1、软件外包公司名单\*******\*2、如何区分是否是外包公司\*******\*3、外包公司真是无一是处吗?\*******\*4、软件外包的几种形式\*******\*5、哪些情况可选择外包\****结语1、软件外包公司名单2、如何区分是否是外包公司3、外包公司真是无一是处吗&a…