成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何通過終端快速訪問 Kubernetes 節點 Shell 的 Root 環境 (無需 SSH 權限 )

系統 Linux
本文介紹了通過 kubectl 命令以 root 權限進入 node shell 的方法,非常簡單,實際上在大多數的原生 Kubernetes 上都生效。

概述

這種場景下,我想要通過 kubectl 登錄到 K8S 集群里的 Node,可以實現嗎?

可以的!本質上是利用容器(runC)的弱隔離(共享內核,Cgruop 等實現進程隔離)實現的權限逃逸。

如果貴司使用的一些商業容器平臺(如:openshift,rancher)等,可能默認安裝時就會通過 PSP scc 或 policy 等預先屏蔽掉這層隱患。但是如果是原生的 Kubernetes, 往往下面的辦法是可行的。

原理概述

先說本質,本質上就是:

容器(runC)是弱隔離

?對于虛擬機來說,虛擬機是通過內核(kernel)級別的隔離,不同的虛擬機有不同的內核,所以安全性要高很多,從虛擬機逃逸到其所在的物理機上是非常困難的。?但是,容器(runC)是弱隔離,一臺機器上的所有容器都共享同一個內核,他們之所以默認互相看不見,是通過 Cgroup、net namespace 等實現的進程級別的隔離。

那么,加入你沒有對容器的權限做進一步的限制,我是可以通過運行一個特權容器,直接進入到其所在的 node 上的。

具體步驟

  • 適用于 K8S 1.25 之前的版本。

步驟很簡單,就是創建上文說的這么一個特權容器,通過 nsenter command 進入 node shell。示例 yaml 如下:

apiVersion: v1
kind: Pod
metadata:
labels:
run: nsenter-v0l86q
name: nsenter-v0l86q
namespace: default
spec:
containers:
- command:
- nsenter
- --target
- "1"
- --mount
- --uts
- --ipc
- --net
- --pid
- --
- bash
- -l
image: docker.io/library/alpine
imagePullPolicy: Always
name: nsenter
securityContext:
privileged: true
stdin: true
stdinOnce: true
tty: true
hostNetwork: true
hostPID: true
restartPolicy: Never
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists

直接 kubectl apply -f node-shell.yaml 即可進入 node shell。

上面的 yaml,關鍵有這么幾點:

進入 node shell 的命令:nsenter --target 1 --mount --uts --ipc --net --pid -- bash -l,在 Linux 系統里, nsenter 是一個命令行工具,用于進入到另一個 namespace 。譬如, nsenter -n -t 1 bash 就是進入到 pid 為 1 的進程所在的網絡 namespace 里。

以及進入 node shell 的權限:

?hostPID: true 共享 host 的 pid

?hostNetwork: true 共享 host 的網絡

?privileged: true: PSP 權限策略是 privileged, 即完全無限制。

進入 node shell 的 pod 后, 效果如下:

node shell-可以切換 shell

node shell-可以查看所有的進程信息

node shell-可以執行 root 權限的 systemctl

實用工具 - 進入 node shell 更方便

這里推薦 2 個工具,可以更方便地進入 node shell。

krew node-shell

可以通過 kubectl 插件管理工具 krew[1] 安裝 node-shell.

如下:

# 安裝工具
kubectl krew install node-shell
# 進入 node shell
Kubectl node-shell <node-name>

Lens

Kubernetes 圖形化管理工具 - Lens[2] 也有相關功能。

具體使用方法如下:

Lens-選擇指定 node 進入 shell

Lens-實際上也是啟動個特權 pod,可以執行 root 命令

總結

上文介紹了通過 kubectl 命令以 root 權限進入 node shell 的方法,非常簡單,實際上在大多數的原生 Kubernetes 上都生效。

這個命令實際上是一定程度上利用了安全上的未加固配置。

這里最后還是建議大家除了對 OS 進行安全加固,對 Kubernetes 也要按照安全最佳實踐進行安全加固。(典型的就是起碼 PSP 等 policy 不要設置為 privileged, 而是設置為 Baseline 或 Restricted)

注意安全!??????

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關推薦

2021-07-16 09:51:21

kubernetes環境容器

2023-08-03 07:35:10

kubernetes云原生

2013-11-20 10:56:07

2010-04-27 14:32:31

2009-07-20 19:53:23

SSHLinuxMac

2022-08-21 16:50:36

Kubeadm?Kubernetes

2022-04-15 15:56:30

云原生容器

2020-04-29 09:00:03

API終端應用環境

2020-10-08 14:29:57

Kubernetes容器開發

2017-12-04 10:46:23

2019-07-13 14:21:04

LinuxShell命令

2025-05-15 08:00:00

Shell腳本history

2021-01-27 15:17:38

漏洞網絡安全程序員

2018-06-12 10:12:12

2015-05-22 08:59:38

2011-07-14 09:56:13

RHEL紅帽PuTTY

2022-03-11 13:28:54

SSHLinux命令

2019-11-21 09:24:50

SSH服務器工具

2018-06-19 08:12:25

2018-06-22 10:18:52

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品伊人久久 | 亚洲精品综合一区二区 | 色综合99| 日韩欧美一区二区三区免费看 | www国产成人 | 国产精品久久久久久久午夜 | 91看片视频 | 欧美a级成人淫片免费看 | 久草青青草 | 日本在线中文 | 久久久久久国产 | 羞羞网站在线观看 | 国产成人99久久亚洲综合精品 | 一区二区三区欧美在线 | 日韩视频二区 | 欧美一区二区在线播放 | 亚洲欧美日韩国产综合 | 欧美一级高潮片免费的 | 亚洲一区二区三区免费 | 亚洲一区二区在线视频 | 国产99免费视频 | 免费看国产一级特黄aaaa大片 | 欧美日韩免费 | 国产一区二区三区久久久久久久久 | 麻豆精品久久 | 亚洲欧美日韩在线 | 国产乱码久久久久久一区二区 | 欧美群妇大交群中文字幕 | 久久久久久久一区 | 国产成人精品久久二区二区 | 色综合久久久 | 另类视频区| 天堂视频免费 | 精品国产一区二区三区久久狼黑人 | 一区二区视频在线 | 日韩一二三区 | 久久国产成人 | www.亚洲国产精品 | 久久r久久 | 一级黄色录像毛片 | 成人在线免费观看 |