kubernetes--安全上下文(Security Context)

这篇具有很好参考价值的文章主要介绍了kubernetes--安全上下文(Security Context)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安全上下文(Security Context):

K8s对pod和容器提供的安全机制,可以设置Pod特权和访问控制

安全上下文限制维度:

1.自主访问控制((DiscretionaryAccess Control):

基于用户ID(UID)和组ID(GID),来判定对对象(例如文件)的访问权限

2.安全性增强的Linux(SELinux):

为对象赋予安全性标签

3.以特权模式或者非特权模式运行

4.Linux Capabilities:

为进程赋予root用户的部分特权而非全部特权

5.AppArmor:

定义使用AppArmor限制容器对资源访问限制

6.Seccomp:

定义pod使用Seccomp限制容器进程的系统调用

7. AllowPrivilegeEscalation:

禁止容器中进程(通过 SetUID 或 SetGID 文件模式)获得特权提升。当容器以特权模式运行或者具有CAP_SYS_ADMIN能力时,AllowPrivilegeEscalation总为True。

8. readOnlyRootFilesystem:

以只读方式加载容器的根文件系统。

Linux Capabilities:Capabilities是一个内核级别的权限,它允许对内核调用权 限进行更细粒度的控制,而不是简单地以 root 身份能力授权。 Capabilities 包括更改文件权限、控制网络子系统和执行系统管理等功能。在securityContext 中,可以添加或删除 Capabilities,做到容器精细化权限控制。CAP_可以省略不写

【】capsh --print第一行为当前用户的

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

capability 名称

描述

CAP_AUDIT_CONTROL

启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则

CAP_AUDIT_READ

允许通过 multicast netlink 套接字读取审计日志

CAP_AUDIT_WRITE

将记录写入内核审计日志

CAP_BLOCK_SUSPEND

使用可以阻止系统挂起的特性

CAP_CHOWN

修改文件所有者的权限

CAP_DAC_OVERRIDE

忽略文件的 DAC 访问限制

CAP_DAC_READ_SEARCH

忽略文件读及目录搜索的 DAC 访问限制

CAP_FOWNER

忽略文件属主 ID 必须和进程用户 ID 相匹配的限制

CAP_FSETID

允许设置文件的 setuid 位

CAP_IPC_LOCK

允许锁定共享内存片段

CAP_IPC_OWNER

忽略 IPC 所有权检查

CAP_KILL

允许对不属于自己的进程发送信号

CAP_LEASE

允许修改文件锁的 FL_LEASE 标志

CAP_LINUX_IMMUTABLE

允许修改文件的 IMMUTABLE 和 APPEND 属性标志

CAP_MAC_ADMIN

允许 MAC 配置或状态更改

CAP_MAC_OVERRIDE

忽略文件的 DAC 访问限制

CAP_MKNOD

允许使用 mknod() 系统调用

CAP_NET_ADMIN

允许执行网络管理任务

CAP_NET_BIND_SERVICE

允许绑定到小于 1024 的端口

CAP_NET_BROADCAST

允许网络广播和多播访问

CAP_NET_RAW

允许使用原始套接字

CAP_SETGID

允许改变进程的 GID

CAP_SETFCAP

允许为文件设置任意的 capabilities

CAP_SETPCAP

参考 capabilities man page

CAP_SETUID

允许改变进程的 UID

CAP_SYS_ADMIN

允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等

CAP_SYS_BOOT

允许重新启动系统

CAP_SYS_CHROOT

允许使用 chroot() 系统调用

CAP_SYS_MODULE

允许插入和删除内核模块

CAP_SYS_NICE

允许提升优先级及设置其他进程的优先级

CAP_SYS_PACCT

允许执行进程的 BSD 式审计

CAP_SYS_PTRACE

允许跟踪任何进程

CAP_SYS_RAWIO

允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备

CAP_SYS_RESOURCE

忽略资源限制

CAP_SYS_TIME

允许改变系统时钟

CAP_SYS_TTY_CONFIG

允许配置 TTY 设备

CAP_SYSLOG

允许使用 syslog() 系统调用

CAP_WAKE_ALARM

允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器)

案例1:设置容器以普通用户运行

背景:容器中的应用程序默认以root账号运行的,这个root与宿主机root账号是相同的, 拥有大部分对Linux内核的系统调用权限,这样是不安全的,所以我们应该将容器以普 通用户运行,减少应用程序对权限的使用。 可以通过两种方法设置普通用户:

1 Dockerfile里使用USER指定运行用户

2 K8s里指定spec.securityContext.runAsUser,指定容器默认用户UID

spec:

securityContext:

runAsUser: 1000 # 镜像里必须有这个用户UID

fsGroup: 1000 # 数据卷挂载后的目录属组设置为该组

containers:

-image: flask-demo:root (镜像自制即可)

name: web

securityContext:

allowPrivilegeEscalation: false # 不允许提权

方法1.Dockerfile

1)可以先注释USER看效果

【】cat /root/flask-demo/Dockerfile

FROM python

RUN useradd python

RUN mkdir /data/www -p

COPY . /data/www

RUN chown -R python /data

RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple/&& \

pip install prometheus_client -i https://mirrors.aliyun.com/pypi/simple/

WORKDIR /data/www

#USER python

CMD python main.py

【】docker build -t flask-demo:v1 .

【】docker run -d --name demo-v1 -p 8080:8080 flask-demo:v1

【】docker exec -it demo-v1 bash

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

在宿主机查看也有该进程且为root

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

2)以普通账号运行

cat /root/flask-demo/Dockerfile

FROM python

RUN useradd python

RUN mkdir /data/www -p

COPY . /data/www

RUN chown -R python /data

RUN pip install flask -i https://mirrors.aliyun.com/pypi/simple/&& \

pip install prometheus_client -i https://mirrors.aliyun.com/pypi/simple/

WORKDIR /data/www

USER python

CMD python main.py

【】docker build -t flask-demo:v2 .

【】docker run -d --name demo-v2 -p 8081:8080 flask-demo:v1

【】docker exec -it demo-v2 bash

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档
securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

方法2:K8s里指定spec.securityContext.runAsUser,指定容器默认用户UID

【】kubectl create deployment flask-demo --image=nginx --dry-run=client -o yaml >deployment.yaml

【】vim deploymeny.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: flask-demo

name: flask-demo

spec:

replicas: 1

selector:

matchLabels:

app: flask-demo

strategy: {}

template:

metadata:

creationTimestamp: null

labels:

app: flask-demo

spec:

securityContext:

runAsUser: 1000 # 镜像里必须有这个用户UID

fsGroup: 1000 # 数据卷挂载后的目录属组设置为该组

containers:

- image: flask-demo:v1 #上文创建的镜像,默认root权限

name: nginx

resources: {}

nodeName: "k8s-master1"

进入容器查看id

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

若使用镜像中不存在的用户则会创建一个普通账号

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档
securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

使用v2版镜像,默认以1000用户则不需要设置上下文即可,默认就是用户id为1000

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

案列2:避免使用特权容器

背景:容器中有些应用程序可能需要访问宿主机设备、修改内核等需求(容器引擎已经组止了,测不出来),在默认情况下,容器没有这个能力,因此此时会考虑给容器是设置特权模式。

启用特权模式:

containers:

- image:flask-demo:root

name:web

securityContext:

privileged: true#启用特权

启用特权模式就意味着,你要为容器提供了访问linux内核的所有能力,这是很危险的,为了减少系统调用的供给,可以使用Capabilities为容器赋予仅所需的能力。

Linux Capabilities:是一个内核级别的权限,它允许对内核调用权限进行更细粒度的控制,而不是简单的以root身份能力授权。

Capabilities包括更改文件权限、控制网络子系统和执行系统管理等功能。在securityContext中,可以添加或删除Capabilities,做到容器精细化控制。

验证mount权限,默认无,截图为示列

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

【】cat tequan

apiVersion: v1

kind: Pod

metadata:

name: pod-sc1

spec:

containers:

-name: sc

image: busybox

command:

-sleep

-24h

securityContext:

privileged: true

【】kubectl exec -it pod-sc1 sh

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

示列1:容器默认没有挂载文件系统能力,添加SYS_ADMIN增加这个能力

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

容器默认无此能力,容器引擎以默认阻止

-t tmpfs 临时文件系统

apiVersion: v1
kind: Pod
metadata:
  name: pod-sc2
spec:
  containers:
  - name: test
    image: busybox
    command:
    - sleep
    -  24h
    securityContext:
      capabilities:
        add: ["SYS_ADMIN"]
       #drop:移除特权,可写all
securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

也有这样用的,删除所有,添加指定项,类似于白名单

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

案列2:以只读挂载文件系统,防止恶意二进制文件创建

普通容器没限制的话可任意增删改查

apiVersion: v1
kind: Pod
metadata:
  name: Pod-sc3
spec:
  containers:
  - name: test
    image: busybox
    command:
    - sleep
    -  24h
    securityContext:
      readOnlyRootFilesystem: true

启动并进入容器文章来源地址https://www.toymoban.com/news/detail-782650.html

securitycontext,kubenetes,kubernetes,安全,linux,Powered by 金山文档

到了这里,关于kubernetes--安全上下文(Security Context)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是层叠上下文(stacking context)?它是如何形成的?

    前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而又亲切的学习平台。在这个

    2024年02月12日
    浏览(40)
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景二

    3.创建其他应用或其他Module的Context 基类Context提供创建其他应用或其他Module的Context的方法为createModuleContext(moduleName:string),创建其他应用或者其他Module的Context,从而通过该Context获取相应的资源信息(例如获取其他Module的获取应用开发路径信息)。 调用createModuleContext(moduleNa

    2024年02月11日
    浏览(58)
  • HarmonyOS/OpenHarmony(Stage模型)卡片开发应用上下文Context使用场景一

    1.获取应用文件路径 基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionContext均继承该能力。应用文件路径属于应用沙箱路径。上述各类Context获取的应用文件路径有所不同。 通过ApplicationContext获取应用级别的应用文件路径,此路

    2024年02月11日
    浏览(56)
  • React Native Ref转发/Memo缓存/HOC高阶组件/Context上下文

    1、使用自定义组件时,实现外层组件对原始组件(TextInput)的操作 外层组件使用 ref 属性 子组件使用 forwardRef 包裹 2、函数式组件对外暴露实例方法(cusomFocus) 子组件 父组件如图一所示 1 、 避免多余渲染 问题:每次点击按钮都会导致 InfoView 组件发生重绘,即使每次 setI

    2024年01月21日
    浏览(51)
  • [元带你学: eMMC协议 31] eMMC Context(上下文) ID 详解 | eMMC 并行数据标识与隔离详解

    依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 5000 字, 主要内容 eMMC 为什么要引入 Context? Context 是什么? 如何使用Context 上下文? Context 上下文配置怎么做? 上下文 ID 应用局限 系统层和芯片组对 Context ID 支持情况 应用层软

    2024年02月11日
    浏览(46)
  • Yolov8涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

    目录 2.Context Aggregation介绍  3. Yolov8引入ContextAggregation 3.1 修改modules.py中 3.2 注册tasks.py模块 3.3  yolov8_ContextAggregation.yam

    2024年02月06日
    浏览(66)
  • Yolov5涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

    目录  1.数据集性能验证 2.Context Aggregation介绍  3. Yolov5引入ContextAggregation 3.1 修改common.py 3.2 注册yolo.py模块

    2024年02月07日
    浏览(46)
  • Selinux 安全上下文与端口控制

    Selinux Selinux 的全称是Security Enhance Linux,就是安全加强的Linux。在Selinux之前root账号能够任意的访问所有文档和服务在selinux中,访问控制属性叫做安全上下文,所有客体(文件、进程间通讯通道、套接字、网络主机等)都有与其关联的安全上下文,安全上下文分为以下4个部分

    2024年02月09日
    浏览(50)
  • 6.6.6、查看 SELinux 安全上下文

    关注公众号 “融码一生”,领取全套 PDF / 电子书 SELinux 管理过程中,进程是否可以正确地访问文件资源取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签(比如 SELinux 用户、角色、类型、类别等),当运行 SELinux 后所有这

    2024年04月28日
    浏览(31)
  • K8s进阶6——pod安全上下文(1),重难点整理

    2.创建pod,使用安全上下文指定普通用户id。 [root@k8s-master1 flask-demo]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: qingjun name: qingjun spec: replicas: 1 selector: matchLabels: app: qingjun template: metadata: labels: app: qingjun spec: containers: image: 192.168.130.152/qingjun/flask-demo:v3 name: flask-de

    2024年04月26日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包