[CKS] K8S Dockerfile和yaml文件安全检测

最近准备花一周的时间准备CKS考试,在准备考试中发现有一个题目关于Dockerfile和yaml文件安全检测的题目。

​ 专栏其他文章:

Question 1

  • Check the Dockerfile located at /home/cloud_user/Dockerfile on the CLI server. This Dockerfile is based upon alpine:3.13.5.
  • Correct the two security issues within the file.

Note: If you need an OS user, you can use the user nobody with id 65534.

这个题目是要求你检查Dockerfile,并修改在Dockerfile中存在的两个问题,这个题目中给我们了一个提示就是,如果没有指定系统用户,就使用id为65534的nobody用户。

Practice

首先,我们查看这个Dockerfile文件可以发现内容如下:

Dockerfile 复制代码
FROM alpine:latest

USER root
COPY sunnydale.sh .

USER root
CMD ["./sunnydale.sh"]

我们从Dockerfile中可以看到问题如下:

  • 基础镜像在题目中指明的是alpine:3.13.5,而在提供的Dockerfile中为alpine:latest
  • 没有指定系统用户,就使用id为65534的nobody用户,而在Dockerfile中使用的root user,这也是不安全的,所以需要对Dockerfile修改成以下内容:

Question 2

  • Check the YAML file located at /home/cloud_user/scooby-gang-deploy.yml on the CLI server.
  • Correct the two security issues within the file.

这个题目是要求我们对yaml文件进行分析,纠正其中存在的两个系统问题。

Practice

首先,我们查看这个yaml文件可以发现内容如下:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: scooby-gang
  namespace: sunnydale
spec:
  replicas: 3
  selector:
    matchLabels:
      app: scooby
  template:
    metadata:
      labels:
        app: scooby
    spec:
      containers:
      - name: scoobygang
        image: scoobygang:1.4.0
        securityContext:
          privileged: true
          runAsUser: 0

我们从yaml中可以看到问题如下:

  • privileged: true这将会使得容器在运行时,运行用户拥有container的全部权限,这样是不安全的
  • runAsUser: 0同样的,这将会使得容器运行过程中会拥有root权限

所以我们需要对yaml文件作出以下更改

  • 设置privileged: false
  • 设置runAsUser: 65534

Question 3

Check all of the Pods in the sunnydale namespace and determine whether their containers are static and immutable.

Note: In this scenario, static/immutable means that:

  • The container does not have access to any elevated privileges.
  • The container process cannot write to the container file system.
  • Delete any Pods in the namespace that are not static and immutable.

这个题目比较麻烦就是需要一个个的对每个pod进行分析,分析出哪些pod是not static 和 immutable的,这里也对not static 和 immutable做出了定义:

  • 容器无法访问特权权限。
  • 容器进程无法写入容器文件系统。

Practice

首先我们需要查看在sunnydale下的所有的pod,然后一一对pod的yaml文件进行检查。

  1. 查看sunnydale下面的所有的pod
shell 复制代码
kubectl get pods -n sunnydale

在这里包含了以下的pod: buffy,cordelia,willow,xander

  1. 然后依次对每个pod的yaml文件进行检查,检查内容如下
  • allowPrivilegeEscalation设置必须是false ,或者没有进行设置
  • runAsUser不能设置为0,最好是65534,或者没有进行设置
  • readOnlyRootFilesystem需要设置为true,或者没有进行设置

通过kubectl get pod -n sunnydale xxx -o yaml进行检查即可,对于不满足上述条件的pod,使用kubectl delete pod -n sunnydale进行删除即可

相关推荐
howdoyoudo2026063 分钟前
AI审计手记 #28:从“暂停训练”到“切断联网”——AI安全控制手段的极限升级
大数据·人工智能·安全·ai·语言模型
xiaohaiAIgeo4 小时前
【2026年】通风柜自动门安全吗?联锁逻辑与防夹设计
人工智能·安全·科普知识
像风一样自由20205 小时前
52.Docker部署大模型应用从本地开发到服务化运行
运维·人工智能·docker·容器·大模型·智能体
·云扬·5 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
QZ166560951598 小时前
金融数据流转监测排行:从看见到拦截的距离
网络·安全·网络安全·金融
陈陈CHENCHEN8 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
看着博客敲代码9 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
里昂00710 小时前
发工单前,怎样清理 JSON 日志而不破坏排错信息?
安全
砚凝霜12 小时前
【软考信息安全】第二十一章 网络设备安全概述与安全机制
网络·安全
看着博客敲代码13 小时前
Nmap NSE 资产指纹识别:从脚本输出到资产清单
安全·网络安全·自动化