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

author author     2023-04-23     562

关键词:

参考技术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

k8s介绍与基本使用(代码片段)

一、k8s基本介绍kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kub... 查看详情

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

k8s笔记13--配置nfs-client-provisioner​​1介绍​​​​2部署测试​​​​2.1使用helm​​​​2.2使用案例​​​​3注意事项​​​​4说明​​1介绍NFS客户端配置器是Kubernetes的自动配置器,它使用已经配置的NFS服务器,自动创建持久... 查看详情

springboot使用k8s的configmap作为外部配置

...像解耦,便于应用配置的修改。本文主要从以下几个方面介绍springboot使用k8s的configMap作为外部配置的使用方法:当应用程序启动时,SpringBoot会自动从以下位置查找并加载application.properties和application.yaml文件。配置文件优先级从... 查看详情

springboot使用k8s的configmap作为外部配置

...像解耦,便于应用配置的修改。本文主要从以下几个方面介绍springboot使用k8s的configMap作为外部配置的使用方法:springboot加载配置文件介绍k8 查看详情

k8s笔记12--grafana的配置和常见使用

k8s笔记12--grafana的配置和常见使用​​1介绍​​​​2安装和配置​​​​3注意事项​​​​4说明​​1介绍Grafana是用Go语言开发的开源数据可视化应用,其可以做数据监控和数据统计,且带有告警功能,它当前最流行的指标可... 查看详情

kubernetes云原生k8s资源管理命令与namespace使用详解(代码片段)

...资源管理命令演示3.3.1使用命令操作资源3.3.2命令式对象配置:通过命令配置和配置⽂件去操作资源3.3.3声明式对象配置:通过apply和配置⽂件操作资源3.4kubectlcreate和kubectlapply的区别四、k8sNamespace简介4.1概述4.2 Namespace特点... 查看详情

k8s中configmap使用介绍(代码片段)

K8s中ConfigMap使用介绍一、ConfigMap简介1.使用ConfigMap的限制条件二、ConfigMap使用介绍1.ConfigMap的创建2.Pod中使用ConfigMap一、ConfigMap简介ConfigMap是一种API对象,用来将非机密性的数据保存到键值对中。使用时,Pods可以将其用作... 查看详情

云原生之kubernetes在kubernetes集群下的jobs与cronjobs管理(代码片段)

...netes】在kubernetes集群下的jobs与cronjobs管理一、jobs与cronjobs介绍1.job介绍2.cronjobs介绍二、检查本地kubernetes集群1.检查工作节点状态2.检查系统pod状态三、查询k8s中jobs的相关模块1.查询查询apiVersion2.查询jobs四、k8s中使用jobs创建一次... 查看详情

java应用诊断和在线debug利器bistoury介绍与在k8s环境使用

Bistoury介绍#Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力,可以让开发人员无需登录机器或修改系统,就可以从日志、内存、线程、类信息、调试、... 查看详情

k8s使用手册——软件配置(代码片段)

@TOC目的  “K8s在容器编排领域已经形成统治地位,不管是开发、运维和测试,掌握kubernetes都变得非常有必要。”——相信大家应该在各类技术论坛与博客中早已看见过如上的一段话。的确在敏捷开发占主导模式的现今,... 查看详情

云原生之kubernetes实战在k8s集群下部署wordpress(代码片段)

...原生之kubernetes实战】在k8s集群下部署wordpress一、wordpress介绍1.wordpress简介2.wordpress的优点3.wordpress使用场景二、检查本地kubernetes集群状态三、配置nfs共享存储1.安装nfs2.创建共享目录3.配置共享目录4.使配置生效5.重启nfs相关服务①... 查看详情

服务发现-consul的介绍部署和使用(转)

什么是服务发现相关源码: springclouddemo微服务的框架体系中,服务发现是不能不提的一个模块。我相信了解或者熟悉微服务的童鞋应该都知道它的重要性。这里我只是简单的提一下,毕竟这不是我们的重点。我们看下面的一... 查看详情

k8s命名空间namespace介绍与使用,以及用kubens插件管理namespace(代码片段)

1、简介命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。简单理解,不同团队之间的项... 查看详情

k8s的apiserver认证介绍(代码片段)

一.说明kube-apiserver是k8s最重要的制组件之一,主要提供以下功能:提供集群管理的RESTAPI接口,包括认证授权、数据校验以及集群状态变更等k8s中所有模块与etcd的数据交互都需要走APIServer,禁止直接和etcd通信k8sAPI的每个请求都需... 查看详情

systemd与cgroupfs

...认驱动需要和docker的驱动指定一直,因此在docker使用默认配置的情况下,K8s使用systemd驱动安装K8s会出现因为多数linux发行版的cgroup的驱动为systemd,所以当再选择cgroupfs作为驱动时,会致使操作系统中存在两个cgroup驱动,会带来不... 查看详情

k8s部署nginx实现集群统一配置,自动更新nginx.conf配置文件总结(代码片段)

k8s部署nginx实现集群统一配置,自动更新nginx.conf配置文件总结大纲1nginx镜像选择2创建configmap保存nginx配置文件3使用inotify监控配置文件变化4Dockerfile创建5调整镜像原地址使用阿里云6创建deploy部署文件部署nginx7测试使用nginx配... 查看详情

深入浅出kubernetes(k8s)指南

...一臂之力。一面(基础面:大约60分钟)自我介绍对象相等的判断,equals方法实现。Hashcode的作用,与equal有什么区别?Java中CAS算法?G1回收器讲一下?HashMap,ConcurrentHashMap与LinkedHashMap的区别如... 查看详情

[转]twemproxy介绍与使用

Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是... 查看详情