【转】Linux CAP介绍与k8s下配置使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【转】Linux CAP介绍与k8s下配置使用相关的知识,希望对你有一定的参考价值。

参考技术A

description: "使用 CAP 为容器提权"
date: 2021.11.07 10:34
categories:
- K8s
tags: [Linux, K8s]
keywords: Linux, CAP, capabilities

原文地址: https://www.jianshu.com/p/a7f6c4f420fa

发音

译为 能力 或 功能 ,一般缩写 CAP ,以下我们简称 Capabilities 为 CAP

从内核 2.2 开始, Linux 将传统上与超级用户 root 关联的特权划分为不同的单元,称为 CAP 。

CAP 作为线程( Linux 并不真正区分进程和线程)的属性存在,每个单元可以独立启用和禁用。
如此一来,权限检查的过程就变成了:
在执行特权操作时,如果进程的有效身份不是 root ,就去检查是否具有该特权操作所对应的 CAP ,并以此决定是否可以进行该特权操作。

比如要向进程发送信号( kill() ),就得具有 CAP_KILL ;如果设置系统时间,就得具有 CAP_SYS_TIME 。

在 CAP 出现之前,系统进程分为两种:

特权进程可以做所有的事情: 进行管理级别的内核调用;而非特权进程被限制为标准用户的子集调用

某些可执行文件需要由标准用户运行,但也需要进行有特权的内核调用,它们需要设置 suid 位,从而有效地授予它们特权访问权限。(典型的例子是 ping ,它被授予进行 ICMP 调用的完全特权访问权。)

这些可执行文件是黑客关注的主要目标——如果他们可以利用其中的漏洞,他们就可以在系统上升级他们的特权级别。
由此内核开发人员提出了一个更微妙的解决方案: CAP 。

意图很简单: 将所有可能的特权内核调用划分为相关功能组,赋予进程所需要的功能子集。
因此,内核调用被划分为几十个不同的类别,在很大程度上是成功的。

回到 ping 的例子, CAP 的出现使得它仅被赋予一个 CAP_NET_RAW 功能,就能实现所需功能,这大大降低了安全风险。

注意: 比较老的操作系统上,会通过为 ping 添加 SUID 权限的方式,实现普通用户可使用。
这存在很大的安全隐患,笔者所用操作系统( CentOS7 )上 ping 指令已通过 CAP 方式实现

Set capabilities for a Container

基于 Linux capabilities ,您可以授予某个进程某些特权,而不授予 root 用户的所有特权。

要为容器添加或删除 Linux 功能,请在容器清单的 securityContext 部分中包含 capability 字段。

输出显示了容器的进程 id ( pid ):

输出显示了进程的能力位图:

解码

接下来,运行一个与前一个容器相同的容器,只是它有额外的功能集。

进程的能力位图:

进程的能力位图值解码

有关常 capability 数的定义,请参阅 capability.h 。

注意: Linux capability 常量的形式是 CAP_XXX 。
但是,当您在容器清单中列出功能时,必须忽略常量的 CAP_ 部分。
例如,要添加 CAP_SYS_TIME ,请在功能列表中包含 SYS_TIME 。

这里我们介绍进程状态中与 Capabilities 相关的几个值:

借用上述例子中未配置 CAP 的进程能力位图

对比发现,容器运行时内的 root 用户并非拥有全部权限,仅仅是默认拥有 14 条权限,其他权限如果使用需要额外开启。

显然当镜像指定 USER 为非特权用户运行时, CAP 配置并不生效

Linux Capabilities 简介
Linux Capabilities: Why They Exist and How They Work

3.5 样本分布K-S检验 ——python实战

文章目录

import tensorflow as tf
print("TensorFlow version:", tf

以上是关于【转】Linux CAP介绍与k8s下配置使用的主要内容,如果未能解决你的问题,请参考以下文章

linux终端terminal个性化配置(转)

(转)Linux下配置tomcat+apr+native应对高并发

基于Linux下Nagios的安装与配置说明介绍[图]

k8s笔记13--配置nfs-client-provisioner

Linux中环境变量文件及配置(转)

(转)Windows下安装Docker, GitBash环境配置