Linux Capabilities

2023-11-19

Linux Capabilities 入门教程:基础实战篇
为了对 root 权限进行更细粒度的控制,实现按需授权,Linux 引入了另一种机制叫capabilities。Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。
linux的线程拥有的capabilities一共有五种。

Permitted

它是Effective和Inheritable的超集。进程拥有的权限不会超过这个集合。如果一个进程在Permitted集合中丢失一个能力,它无论如何不能再次获取该能力(除非特权用户再次赋予它)

Inheritable

它是表明该进程可以通过execve继承给新进程的能力。包含在该集合中的 capabilities 并不会自动继承给新的可执行文件,即不会添加到新线程的 Effective 集合中,它只会影响新线程的 Permitted 集合。

Effecitive

进程的有效能力集,Linux内核真正检查的能力集。

Bounding

它是 Inheritable 集合的超集,如果某个 capability 不在 Bounding 集合中,即使它在 Permitted 集合中,该线程也不能将该 capability 添加到它的 Inheritable 集合中。

Ambient

在Linux内核4.3后增加,用来弥补Inheritable 的不足。它可以用prctl来直接修改。Ambient 具有如下特性:

Permitted 和 Inheritable 未设置的 capabilities,Ambient 也不能设置。
当 Permitted 和 Inheritable 关闭某权限后,Ambient 也随之关闭对应权限。这样就确保了降低权限后子进程也会降低权限。
非特权用户如果在 Permitted 集合中有一个 capability,那么可以添加到 Ambient 集合中,这样它的子进程便可以在 Ambient、Permitted 和 Effective 集合中获取这个 capability。

Bounding 集合的 capabilities 在执行 fork() 系统调用时会传递给子进程的 Bounding 集合,并且在执行 execve 系统调用后保持不变。
如果想查看当前进程的 capabilities,可以用 capsh 命令。下面是 CentOS 系统中的 root 用户执行 capsh 的输出:

$ capsh --print
在这里插入图片描述
完整的信息可以查看 /proc 文件系统,比如当前 shell 进程就可以查看 /proc/$$/status。其中一个重要的状态就是 NoNewPrivs,可以通过以下命令查看:

grep NoNewPrivs /proc/$$/status
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux Capabilities 的相关文章

  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • Linux 内核标识符中前导和尾随下划线的含义是什么?

    我不断遇到一些小约定 比如 KERNEL Are the 在这种情况下 是内核开发人员使用的命名约定 还是以这种方式命名宏的语法特定原因 整个代码中有很多这样的例子 例如 某些函数和变量以 甚至 这有什么具体原因吗 它似乎被广泛使用 我只需
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug

随机推荐

  • 【实践经验】PPT导出SVG格式通过Inkscape转化为pdf

    目录 背景 方案调研 Inkspace 配置 将svg转为pdf 背景 在写论文过程中不可避免需要作图 常用的工具就是PPT 但是在导出图片的过程中通常会遇到一个问题 图片导出为png格式不够清晰 放大后比较模糊影响观感 那么有没有解决方案
  • AcWing4118. 狗和猫

    输入样例1 3 6 10 4 0 CCDCDD 4 1 2 0 CCCC 4 2 1 0 DCCD 输出样例1 Case 1 YES Case 2 YES Case 3 NO 样例1解释 在 Case 1 中 一共有 1010 份狗粮和 4
  • VTK环境安装教程

    安装前依赖环境 CMake VS2019 VTK压缩包 8 2 0即可 build过程 第一次分析完 找到下图中选中项 勾选Configure 解释勾选项 BUILD EXAMPLES 生成一些vtk官方的examples 帮助理解学习 当
  • SQL 后计算的利器 SPL

    目录 专业的结构化数据对象 强大的结构化数据计算能力 灵活的流程控制能力 优化体系结构 SPL资料 现代应用开发中 通常只用SQL实现简单的数据存取动作 而主要的计算过程和业务逻辑直接在应用程序中实现 主要原因在于 过于复杂的SQL很难调试
  • Python JS逆向篇(四)

    Python JS逆向篇 四 找到参数加密位置 跟进window asrsea函数 结果 扣取的js代码 扩展 逆向主题 某易云评论数据 请求时的加密参数 注 文章所涉及内容只做学习参考交流 不做除此之外的任何其它用途 找到参数加密位置 我
  • 解析XML文件时的嵌套异常SAXParseException

    解析XML文件时的嵌套异常SAXParseException 引言 XML 可扩展标记语言 是一种常用的数据格式 用于存储和传输结构化数据 在开发过程中 我们经常需要解析XML文件来获取其中的数据 然而 XML解析过程中可能会遇到各种异常情
  • 关于利用Qt编写应用程序的帮助文档

    转载请注明出处 关于利用Qt编写应用程序的帮助文档 首先推荐Qt官网的example 官网的例子讲的很细致很全面 不过官网的例子全是英文的 百度文库里有对这个例子的翻译 我也看了一下 感觉还不如去看英文的 好的言归正传 讲一下大概的步骤 1
  • node快速创建一个工程项目

    1 安装express npm install g express 2 新建一个工程 指定使用ejs模板引擎 express e 文件名 3 安装需要的模块 cd 文件名 npm install 4 启动 SET DEBUG 文件名 npm
  • Oracle学习(14)【DBA向】:利用DBCA创建Oracle数据库

    数据库管理任务 DBA 1 评测数据库服务器硬件 2 安装Oracle数据库软件 3 规划数据库 4 创建并且打开数据库 5 数据库备份 6 注册用户 7 实现数据库计划 8 全库备份 9 调整数据库性能 数据库规划 作为一名DBA 你必须
  • mac m1 安装 protobuf

    mac m1各种踩坑中 一 背景 mac m1 机器上使用golang grpc 二 安装流程 1 安装protobuf 注 已经安装了brew brew install protobuf 2 安装go的支持 go install goog
  • 用 Python 打造 AIGC 的「操作系统」

    carefree0910 carefree drawboard Infinite Drawboard in Python github com https github com carefree0910 carefree drawboard
  • 挖金矿问题(c++求解)

    n个金矿 共有w个工人 目前可以用的人数 F收益 F n w 递推函数 n个金矿 共有w个工人 目前可以用的人数 F收益 F n w 那么该问题的边界值如下 当w 0且w
  • 蓝桥杯 2019年号字串

    题目 试题 B 年号字串 问题描述 小明用字母 A 对应数字 1 B 对应 2 以此类推 用 Z 对应 26 对于 27以上的数字 小明用两位或更长位的字符串来对应 例如 AA 对应 27 AB 对应 28 AZ 对应 52 LQ 对应 3
  • C# 细说async/await的用法

    目录 一 引言 二 实例演示 2 1 多线程同步执行下载任务 任务完成后通知 2 2 异步执行下载任务 任务完成后通知 三 async await的用法 3 1 跨线程修改UI控件 3 2 异步获取数据 一 引言 首先先来区分一下 同步方法
  • Oracle VM VirtualBox在电脑上安装后只显示32位版本不显示64位版本的问题

    今天准备在Oracle VM VirtualBox上安装linux 结果安装Oracle VM VirtualBox后发现所有操作系统只能选择32位系统类型的 通过网络上寻找原因发现是电脑主板Bios里的V irtualization里设置
  • 憨批的语义分割重制版8——Keras 搭建自己的DeeplabV3+语义分割平台

    憨批的语义分割重制版8 Keras 搭建自己的DeeplabV3 语义分割平台 注意事项 学习前言 什么是DeeplabV3 模型 代码下载 DeeplabV3 实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获
  • 对象数组题目 Student类

    package object oriented02 对象数组题目 定义类的Student 包含三个属性 学号为number 年级为state int 成绩为score int 创建20个学生对象 学号为1到20 年级和成绩都是随机产生 问题
  • 3.Mybatis 注解方式的基本用法

    Mybatis 也可以使用注解开发方式 这样我们就可以减少编写 Mapper映射文件了 下面介绍用户的增删改查 3 1 修改全局配置文件 在mybatis 全局文件中 通过package标签或者mapper标签的class属性加载mappe
  • 安装gcc-arm-none-eabi-10-2020-q4-major-win32工具(NRF52编译ECC加密文件用)

    gcc arm none eabi 10 2020 q4 major win32安装包下载 链接 https pan baidu com s 1NbpyI fQoKvMUuct0hruxA 提取码 ikeu 安装后环境变量配置 C Prog
  • Linux Capabilities

    Linux Capabilities 入门教程 基础实战篇 为了对 root 权限进行更细粒度的控制 实现按需授权 Linux 引入了另一种机制叫capabilities Capabilites 作为线程 Linux 并不真正区分进程和线程