如何做网站的书籍/上海seo顾问
Linux Capabilities是一种细粒度的权限管理机制,用于将root用户的特权划分为具体的功能集。它允许将部分root特权授予非root进程。
可以在shell中运行:
man capabilities
将显示capability man page,其中包含有关Linux功能的详细信息。
文章目录
- 什么是Capabilities
- Linux Cap 分类
- File Capabilities
- Cap管理工具
- libcap2-bin
- libcap-ng-utils
- Capabilities在容器中的应用
- Docker
- 进程权限集
- 获取与解析
- 运行具有某些权限的容器
- kubernetes
什么是Capabilities
对于执行权限检查, 传统的UNIX实现区分两类进程: 特权进程(其有效用户ID为0,也称为超级用户或root)和非特权进程(其有效用户ID非零)。
特权进程绕过内核的所有权限检查,而非特权进程根据进程的凭证(通常为:有效用户ID、有效组ID和补充组列表)进行完整的权限检查。
从内核2.2开始,Linux将传统上与超级用户相关联的特权分成独立的单元,称为Capability,可以独立启用和禁用。
需要注意的是,功能是线程属性。
Linux Cap 分类
Linux capabilities可以分为以下几类:
文件系统相关:
- CAP_CHOWN - 改变文件所有权
- CAP_DAC_OVERRIDE - 忽略DAC权限
- CAP_DAC_READ_SEARCH - 忽略文件读/搜寻权限
- CAP_FOWNER - 忽略文件的所有权
- CAP_FSETID - 忽略setuid/setgid位
设备相关:
- CAP_MKNOD - 创建设备文件
- CAP_NET_ADMIN - 管理网络子系统
- CAP_NET_RAW - 使用RAW和底层网络协议
- CAP_SYS_MODULE - 插入和删除内核模块
- CAP_SYS_RAWIO - 执行raw I/O端口操作
进程相关:
- CAP_SETPCAP - 转移其他进程的capabilities
- CAP_SETUID - 设置UID
- CAP_SETGID - 设置GID
- CAP_SYS_ADMIN - 执行许多系统管理操作
- CAP_SYS_PTRACE - 跟踪其他进程
- CAP_SYS_CHROOT - 使用chroot限制根目录
- CAP_KILL - 向其他进程发送信号
- CAP_AUDIT_WRITE - 编写审计日志条目
系统管理:
- CAP_SYS_BOOT - 重新引导系统
- CAP_SYS_NICE - 修改进程优先级
- CAP_SYS_RESOURCE - 修改资源限制
- CAP_SYS_TIME - 修改系统时间
这只是capabilities的广义分类,某些capabilities可能属于多个类别。
基于最小特权原则,一个可执行文件可按需选择其中某些能力,而不是获取全部。
File Capabilities
自内核2.6.24起,内核支持使用setcap(8)
将功能集与可执行文件相关联。文件功能集存储在名为security.capability
的扩展属性中(请参阅setxattr(2)
)。写入此扩展属性需要CAP_SETFCAP
功能。文件功能集与线程的功能集一起确定execve(2)后线程的功能。
文件功能比传统的setuid和setgid机制更加精细和灵活。
在引入文件功能(File Capabilities)之前,setuid为0的程序会授予执行它的进程全部特权。
Cap管理工具
libcap2-bin
功能很重要,因为允许决定进程所需的功能,而不是给予它完全访问权限 - 即使它并不需要。
功能特性于1999年在2.2内核中引入,但当时仅限于进程。2008年,功能也引入到文件中。
需要安装libcap2-bin
获取和设置功能的两个基本命令是setcap
和getcap
。getcap
获取功能列表,而setcap
用于为可执行文件设置特定功能。
请注意,要使用
setcap
, 必须传递原始文件,而不是符号链接文件。Linux中的符号链接是指向另一个文件的特殊文件。
设置功能:
$ sudo setcap cap_net_bind_service+ep /path/to/the/file
获取功能:
$ sudo getcap /path/to/the/file
libcap2-bin附带了其他工具,包括capsh
和getpcaps
。
capsh
也用于获取功能,帮助解码功能集。getpcaps
在检查Linux进程的功能时很有用。
举例说明,以ping
为例。它需要打开原始套接字。只有root用户可以打开原始套接字或小于1024的端口。
我们如何为特定进程提供必要的功能? 答案是使用setcap
来为可执行文件设置特定的Linux功能。
为ping设置特定的net_raw
功能:
$ sudo setcap cap_net_raw=ep ping
总而言之,功能涉及将root特权分成不同的级别,并帮助您为每个进程提供特定的功能。
例如:
CAP_CHOWN
更改文件的所有权。它允许root随意更改文件UID和GID。CAP_KILL
杀死系统中正在运行的任何进程。CAP_NET_BIND_SERVICE
允许您打开小于1024的端口,即使进程不是以root用户运行。
libcap-ng-utils
在处理功能时,另一个非常有用的软件包名为libcap-ng-utils
,它带有netcap
、filecap
和pscap
工具。这些工具在处理Linux中的功能时非常有用。
filecap
查看可执行文件的所有功能。netcap
为通过TCP、UDP等在网络上通信的进程提供功能报告。pscap
查看正在运行的进程的功能
要安装libcap-ng-utils
, 以CentOS 7为例:
yum -y install libcap-ng-utils
Capabilities在容器中的应用
Docker
默认情况下,容器在启动时会获得容器运行环境提供的某些默认功能。像Docker这样的工具为您提供了根据需求添加和删除功能的灵活性。要理解这一点,您需要知道您的容器为正常工作所需的功能,否则将无法达到预期效果。
例如,让我们运行一个busybox容器并检查运行该进程所具有的功能。
busybox容器基于busybox镜像,是一个轻量级容器,内置许多常用的UNIX实用工具,如awk、grep和tar。
docker run --rm -it busybox sleep 1h &
要获取正在运行的容器的PID,您可以使用docker inspect <container-id>
。PID代表进程ID。它是在Linux系统上运行的每个进程的唯一数字ID。
$ docker inspect 7666636cd08c | grep -i PID
Output "Pid": 23764,"PidMode": "","PidsLimit": null,
进程权限集
有五种不同类型的进程权限集。让我们理解每个权限所代表的含义:
- CapInh(Inherited capabilities)是从运行的父进程传递到其子进程的权限。
- CapPrm(Permitted capabilities)是进程允许拥有的权限。
- CapEff(Effective capabilities)集是当前进程执行的所有权限。
- CapBnd(Bounding capabilities)集是进程允许拥有的最大权限集。
- CapAmb(Ambient capabilities)集包括当前生效的权限。它可以在以后应用于当前进程或其子进程。
在本文中,将重点关注有效权限集。大部分时候,会使用有效权限。
获取与解析
要获取容器的进程权限集, 运行以下命令:
$ grep Cap /proc/<container-pid>/status
CapInh: 00000000a80425fb
CapPrm: 00000000a80425fb
CapEff: 00000000a80425fb
CapBnd: 00000000a80425fb
CapAmb: 0000000000000000
这个输出不可读,所以要读取这个输出,需要使用来自libcap2-bin
软件包的二进制文件capsh
。
此时,确保已安装libcap2-bin
软件包。要解码有效权限,获取CapEff:
之后写入的文本,并使用以下命令,应该会看到如下输出:
$ capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,
cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,
cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,
cap_audit_write,cap_setfcap
输出显示进程具有不同的权限。例如, cap_chown权限使程序有权更改文件的所有者或目录的所有者。chown
命令使用此权限。
类似地,如果要进程打开/监听小于1024的端口,可以使用cap_net_bind_service
,它允许进程绑定到小于1024的端口。
如果有进程的PID,也可以使用getpcaps
获取进程的权限:
getpcaps 23808
运行具有某些权限的容器
现在,让我们尝试理解如何运行具有某些权限的容器。如果使用docker,可以使用--cap-add
添加权限和--cap-drop
放弃权限。例如,如果要运行有sys_admin
权限的容器并放弃其他所有权限,可以如下:
$ docker run --rm --cap-drop=all --cap-add=sys_admin \
-it busybox sleep 1h &
请注意,如果要添加或删除多个权限,必须再次添加相同的标志。
例如,如果要运行一个容器,放弃所有权限, 只使用SYS_ADMIN
和NET_ADMIN
权限,需要使用--cap-add
标志两次。
$ docker run --rm --cap-drop=all --cap-add=sys_admin \
--cap-add=net_admin -it busybox sleep 1h &
kubernetes
如何在Pod中设置正确的权限?
通过在Kubernetes清单中使用SecurityContext
,可以在容器中设置权限。让我用一个示例清单说明:
apiVersion: v1
kind: Pod
metadata: name: pod
spec: containers: - command: - sleep - "100000" image: ubuntu name: ubuntu-pod securityContext: privileged: false capabilities: drop: - ALL add: - SYS_ADMIN - NET_ADMIN
上述Kubernetes清单将创建一个具有Ubuntu镜像的Pod,并且只有两个权限:SYS_ADMIN
和NET_ADMIN
。在上述清单中,我们放弃了所有其他权限。
这比运行privileged: true
的Pod要好得多,后者将添加所有Linux权限,约37个。
SYS_ADMIN
几乎相当于授予容器root级访问权限,如果不需要,应避免使用。如果查看权限的手册页,则SYS_ADMIN
也称为新的root。与SYS_ADMIN
类似,NET_ADMIN
允许您在系统上执行所有特权网络操作。
在Kubernetes中使用权限时,应该在前缀中放弃CAP这个词。
即使使用多容器Pod,也可以在每个容器中设置SecurityContext。您也可以使用工具(如tracee、inspektor-gadget和其他eBPF工具)来跟踪容器的权限。如果您不确定应用程序所需的权限,这将很有用。
相关文章:

Linux Capabilities
Linux Capabilities是一种细粒度的权限管理机制,用于将root用户的特权划分为具体的功能集。它允许将部分root特权授予非root进程。 可以在shell中运行: man capabilities将显示capability man page,其中包含有关Linux功能的详细信息。 文章目录 什么是CapabilitiesLinux Cap …...

【自制C++深度学习框架】前言
KuiperCourse 介绍 此GitHub项目是一个初学者的深度学习框架,使用C编写,旨在为用户提供一种简单、易于理解的深度学习实现方式。以下是本项目的主要特点和功能: 计算图:使用计算图来描述深度学习模型的计算过程,利用计…...

【高危】泛微 e-cology9 存在任意用户登录漏洞
漏洞描述 泛微协同管理应用平台(e-cology)是一套企业大型协同管理平台。 泛微e-cology9部分版本中存在前台任意用户登录漏洞,由于系统默认配置固定密钥进行用户身份验证。 当存在/mobile/plugin/1/ofsLogin.jsp文件时(可能通过插件方式安装࿰…...

1TB文本的实时全文检索系统搭建
1个T的文本是多大呢?1TB 1000GB,1GB是10亿,1TB就是1万亿字节。如果是英文字符,1TB文本就是1万亿个英文字符,如果是中文字符而且都是UTF8格式,1个中文字符占3个字节,1TB文本是3333亿中文字符&am…...

RHCA---DO477---变量实验
实验目的如下: 1. 环境准备: 使用命令lab inventory-variables start初始化环境 2. 进入/home/student/git-repos目录克隆下载http://git.lab.example.com:8081/git/inventory-variables.git 3. 将目录下yaml文件内容以group_vars形式修改 4. 部署并将修改后ansible-playbook代…...

毕业生高频常用材料线上签,高校毕业季契约锁电子签章一站式助力
据人社部消息,2023年全国高校毕业生总规模将达1158万人!毕业季开启,全国各地高校普遍面临三方协议、成绩单、证书、证明等毕业生高频常用材料签署量激增的现状。学生、教职工、学校常常疲于应对机械化的材料盖章工作。 #毕业季高频常用材料清…...

.ini配置文件介绍与解析库使用
【前言】 ini 文件是英文"Initialization"的缩写,即初始化文件。它用来配置特定应用软件以实现对程序初始化或进行参数设置。.ini文件由节(section)、键(key)、值(value)三种模块构成。在windows系统/嵌入式软件中有很多XXX.ini文件,例如Syste…...

牛客网Linux错题七
1.如何在命令行查看一台linux机器的CPU、SWAP分区信息、硬盘信息?(ACD) A. cat /proc/cpuinfo B. du C. cat /proc/swaps D. df -Ih 解: cat /proc/cpuinfo查看Linux设备的CPU信息,cat /proc/swaps查看Linux设备的交换分区信息…...

牛课刷题Day5(编程题)
1.合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组 正确答案: function concat(arr1, arr2) {let carr1.concat(arr2)return c } 解析: js的Array对象提供了一个叫concat()方法,连接两个或更多的数组&#x…...

javascript基础二十五:说说你对函数式编程的理解?优缺点?
一、是什么 函数式编程是一种"编程范式"(programming paradigm),一种编写程序的方法论 主要的编程范式有三种:命令式编程,声明式编程和函数式编程 相比命令式编程,函数式编程更加强调程序执行…...

常见JavaScript加密算法、JS加密算法
常见JavaScript加密算法、JS加密算法 一、SHA-256加密算法二、Base64编码算法三、RSA加密算法四、AES加密算法五、HMAC-SHA256算法六、PKCS7填充 一、SHA-256加密算法 SHA-256是一种密码散列函数,可以将任意长度的消息压缩成256位的摘要值。以下是使用JavaScript实现…...

题解2023.6.5
D - Factorial Divisibility 对于a[i]>x的数一定可以整除,考虑a[i]<x的数,因为(x1)*x! (x1)! 统计ai出现的次数, 把他转换为大的阶乘, 如果, 最终1到x - 1, ai的出现次数均为0则说明可以被x!整除 #pragma GCC optimize(2) #pragma GCC optimiz…...

与声音计算研究相关的挑战赛——DCASE和L3DAS
前言:在本专栏的系列博文中,我将包含声学场景识别、声音事件检测、声源位置估计等利用机器学习或深度学习技术进行研究的、基于声音信号的相关工作成为“声音计算”。 本篇博文主要介绍与声音计算相关的两个近些年持续跟进的挑战赛:DCASE和L…...

实训总结-----Scrapy爬虫
1.安装指令 pip install scrapy 2.创建 scrapy 项目 任意终端 进入到目录(用于存储我们的项目) scrapy startproject 项目名 会在目录下面 创建一个以 项目名 命名的文件夹 终端也会有提示 cd 项目名 scrapy genspider example example.com 3.运行爬虫指令 scrapy craw…...

前端开发职业规划指南:如何做好职业规划与发展
引言 前端开发是目前互联网行业中最火热的职业之一,也是非常具有发展前景的职业之一。随着互联网技术的不断更新和发展,前端开发的职业规划也在不断地发生变化。本文将从几个方面来探讨前端开发的职业规划。 一、职业发展路径 1.前端初级工程师 前端初…...

创业第一步:如何写好商业计划书
即使你的项目不需要融资,你也把标准商业计划书作为一个工具模板来应用,帮助更全面的盘点你要做的事情。 撰写一份性感的商业计划书如同造房子:第一步是科学设计,打好结构(有清晰的撰写逻辑);第…...

【Linux驱动】字符设备驱动相关宏 / 函数介绍(module_init、register_chrdev)
驱动运行有两种方式: 方式一:直接编译到内核,Linux内核启动时自动运行驱动程序方式二:编译成模块,使用 insmod 命令加载驱动模块 我们在调试的时候,采用第二种方式是最合适的,每次修改驱动只需…...

axios解决跨域问题
Vue3中使用axios访问聚合的天气API,出现跨域问题,需要在前端进行一些配置: 首先是修改vue.config.js: const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…...

R语言作图——热图聚类及其聚类结果输出
代码 不多说了,做个记录,代码如下。 library(pheatmap) library(RColorBrewer) # args commandArgs(TRUE) betafile "twist_common_panel_434.csv" infofile "twist_common_panel_434.txt" title "twist_common_panel&qu…...

Tomcat优化
Tomcat优化 Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面,分别为操作系统优化(内核参数优化),Tom…...

我的GIT练习TWO
目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习TWO C1 C2 C3 C4 C5 C6 C7 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理 GIT安装教程 点击进入查看教程…...

个人器件库整理
样品本 包含如下: 电容器件: 元件值封装备注钽电容47uF 10V1206钽电容10uF 10V1206电容10uF 10% 10V0603X5R,CL10A106KP8NNNC 元件值封装备注100nF电容50V,10%0603 电阻器件: 元件值封装备注75 Ω \Omega Ω…...

javascript——内存管理
JavaScript内存管理是Web开发中的一个重要主题。正确管理内存可以提高应用程序的性能和稳定性。本文将介绍JavaScript中的内存管理概念、常见的内存泄漏问题以及一些有效的内存管理技巧。 什么是JavaScript内存管理? JavaScript具有自动内存管理机制,开…...

Qt5.15.2安卓Android项目开发环境配置
1、Qt Creator 4.11.2 官方下载:https://download.qt.io/archive/qtcreator/4.11/4.11.2/ 镜像下载:https://mirrors.cloud.tencent.com/qt/archive/qtcreator/4.11/4.11.2/ 2、Qt 5.15.2 Android 官方更新器内部下载 参考:https://blog…...

第四十三章 弹跳训练2(灵识扫描)
“再不脱离便会陷死在里面。”这个声音似乎来自脑海深处某个隐秘角落。 双眼一睁,灵识退去,空空的头壳兀自嗡嗡作响,一股说不清道不明的失落感笼罩全身,似要将自己拖入抑郁的谷底。 不!没什么好失落沮丧的!…...

【location对象的方法,history对象,navigator--BOM】
location对象的方法 location.assign()//跟href一样,可以跳转页面(也称重定向页面) location.replace()//替换当前页面,因为不记录历史,所以不能后退页面 location.reload()//重新加载页面,相当于刷新按钮或…...

论文笔记:Normalizing Flows for Probabilistic Modeling and Inference
Abstract 正则流(Normalizing flows)提供了一种通用的机制来定义富有表达力的概率分布,只需要指定一个(通常简单的)基础分布和一系列可逆变换。 Intraduction 正则流通过将简单的密度通过一系列变换来产生更丰富、可…...

java 异常类介绍
Java 异常(Exception)是指在程序运行期间出现的错误或异常情况。Java 异常处理机制允许程序在出现异常情况时进行处理,避免程序崩溃或出现不可预知的错误 一、Java 异常的概念 Java 异常是指程序在运行期间出现的错误或异常情况。Java 异常…...

shiro 550 反序列化rce
Apach shiro 是一款开源安全框架,提供身份验证,授权,会话管理等。 shiro 550 反序列化漏洞rce 通关利用它反序列化的漏洞直接执行rce 加密的用户信息序列化后储存在名为remenber -me的cooike中。攻击者可以使用shiro默认密钥伪造cooike&am…...

【C++】---模板初阶(超详练气篇)
个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇 希望我们一起努力、成长&…...