pod 禁止执行的 dmesg

2024-04-27 20:28
文章标签 执行 禁止 pod dmesg

本文主要是介绍pod 禁止执行的 dmesg,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 为什么 pod 里面执行的 dmesg 命令和系统里面的一样,不是应该环境分离吗?
    • 原因解释
    • 安全和隔离的考虑
      • 修改内核参数

为什么 pod 里面执行的 dmesg 命令和系统里面的一样,不是应该环境分离吗?

在 Kubernetes 环境中,尽管 Pod 提供了与主机系统隔离的运行环境,但它们仍然与宿主机共享某些底层资源和环境,如内核。这种设计使得在任何 Pod 内部执行的 dmesg 命令显示的是宿主机的内核日志,而不是特定于 Pod 的日志。

原因解释

内核共享:所有在同一宿主机上的容器(包括 Pod 内的容器)都运行在同一个操作系统内核之上。dmesg 命令显示的是内核的环环缓冲区消息,这些消息是系统级别的,不是隔离在单独的容器或 Pod 中的。

安全和隔离的考虑

修改内核参数

在宿主机上,可以修改 kernel.dmesg_restrict 内核参数。当设置为 1 时,限制非特权用户禁止访问 dmesg,这样设置后,只有具有 CAP_SYS_ADMIN 能力的用户才能访问 dmesg

  • kernel.dmesg_restrict 为 0
    pod 拥有执行 dmesg 权限
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器
EOF
pod/ubuntu-dmesg created# kubectl exec -it ubuntu-dmesg -- dmesg | head -n 2
Defaulted container "ubuntu" out of: ubuntu, k8tz (init)
[    0.000000] Linux version 5.4.0-147-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #164-Ubuntu SMP Tue Mar 21 14:23:17 UTC 2023 (Ubuntu 5.4.0-147.164-generic 5.4.231)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-147-generic root=/dev/vda1 ro true intel_idle.max_cstate=0 console=ttyS0 console=tty0 net.ifnames=0 biosdevname=0 mitigations=off# kubectl exec -it ubuntu-dmesg -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 0
  • kernel.dmesg_restrict 为 1
    pod 默认没有执行 dmesg 权限,需要赋权
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg-1
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器EOF
pod/ubuntu-dmesg-1 created
# kubectl exec -it ubuntu-dmesg-1 -- dmesg | head -n 2
dmesg: read kernel buffer failed: Operation not permitted
command terminated with exit code 1
# kubectl exec -it ubuntu-dmesg-1 -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 1### 赋予权限
# kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:name: ubuntu-dmesg-2
spec:nodeSelector:kubernetes.io/hostname: "172.31.1.127"containers:- name: ubuntuimage: ubuntu:20.04command: ["sh", "-c", "sleep infinity"] # 持续运行容器securityContext:capabilities:add:- SYS_ADMIN # 添加 CAP_SYS_ADMIN 权限
EOF
pod/ubuntu-dmesg-2 created
# kubectl exec -it ubuntu-dmesg-2 -- dmesg | head -n 2
[    0.000000] Linux version 5.4.0-147-generic (buildd@lcy02-amd64-067) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #164-Ubuntu SMP Tue Mar 21 14:23:17 UTC 2023 (Ubuntu 5.4.0-147.164-generic 5.4.231)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.4.0-147-generic root=/dev/vda1 ro true intel_idle.max_cstate=0 console=ttyS0 console=tty0 net.ifnames=0 biosdevname=0 mitigations=off
# kubectl exec -it ubuntu-dmesg-2 -- sysctl kernel.dmesg_restrict
kernel.dmesg_restrict = 1

这篇关于pod 禁止执行的 dmesg的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941449

相关文章

详解如何在React中执行条件渲染

《详解如何在React中执行条件渲染》在现代Web开发中,React作为一种流行的JavaScript库,为开发者提供了一种高效构建用户界面的方式,条件渲染是React中的一个关键概念,本文将深入探讨... 目录引言什么是条件渲染?基础示例使用逻辑与运算符(&&)使用条件语句列表中的条件渲染总结引言在现代

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

禁止复制的网页怎么复制

禁止复制的网页怎么复制 文章目录 禁止复制的网页怎么复制前言准备工作操作步骤一、在浏览器菜单中找到“开发者工具”二、点击“检查元素(inspect element)”按钮三、在网页中选取需要的片段,锁定对应的元素四、复制被选中的元素五、粘贴到记事本,以`.html`为后缀命名六、打开`xxx.html`,优雅地复制 前言 在浏览网页的时候,有的网页内容无法复制。比如「360

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚