You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何记录Kubernetes容器内部执行的Linux命令?

Kubernetes 容器内部 Linux 命令审计实现方案

要完整记录容器内执行的所有 Linux 命令用于审计,可根据你的安全需求和集群配置,选择以下一种或多种方案组合使用:

方案1:Shell 命令历史持久化采集

这是成本最低的实现方案,适合对审计强度要求中等的场景:

  • 核心思路:修改容器内 Shell 的默认配置,将所有执行的命令历史持久化输出到指定路径,再通过日志采集工具统一收集到审计中心。
  • 操作步骤:
    • 要么修改业务基础镜像,要么通过 Mutating Webhook 动态给所有启动的容器注入 Shell 配置,以 bash 为例,需要追加的配置如下:
      # 实时写入命令历史,指定历史记录的时间格式
      export PROMPT_COMMAND='history -a >(tee -a /var/log/container_cmd_history | logger -t "container_cmd")'
      export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
      shopt -s histappend
      
    • 给容器挂载宿主机的空目录卷或者专属的持久化卷存储命令日志,防止容器销毁后日志丢失。
    • 用 DaemonSet 部署的 Filebeat、Fluentd 等采集工具,批量采集所有节点上的容器命令日志,上报到集中的审计平台存储。
    • 注意要修改日志文件的权限,仅保留 root 可写,避免普通用户篡改历史记录。

方案2:内核层系统调用审计

这个方案从内核层面捕获所有命令执行行为,无法被用户绕过,适合安全等级要求高的场景:

  • 核心思路:利用 Linux 内核的审计能力,监控所有属于容器 PID 命名空间的进程的 execve 系统调用,不管用户有没有修改 Shell 配置,都能完整记录所有执行的命令。
  • 操作步骤:
    • 每个节点部署 auditd 服务,或者用基于 eBPF 的开源工具(比如 Tracee、Falco),配置审计规则过滤出容器进程的命令执行事件。
    • 采集到的审计日志要关联上对应的 Pod 名、命名空间、容器ID、镜像名等 K8s 元数据,方便后续溯源定位。
    • 可以配置过滤规则过滤掉容器内置服务的常规执行操作,减少无用的日志噪音。

方案3:Kubectl Exec 操作全链路审计

大部分人工操作容器的场景都是通过 kubectl exec 进入容器,这个方案可以覆盖所有人工操作的审计:

  • 核心思路:在 K8s API 层面记录所有 exec 请求的发起信息,同时对 exec 会话做全量录制,方便后续回放核查。
  • 操作步骤:
    • 开启 K8s APIServer 的审计日志功能,配置审计规则将所有 /api/*/pods/*/exec 路径的请求日志级别设为 RequestResponse,完整记录请求的发起用户、时间、操作的 Pod 信息、执行的命令参数。
    • 部署准入控制器强制所有 exec 操作开启会话录制,录制的会话文件存储到独立的对象存储服务,支持后续全程回放操作过程。
    • 这个方案无法覆盖容器内部进程主动执行命令的场景,需要配合内核层审计方案一起使用。

通用注意事项

  • 所有审计日志必须存储在独立于 K8s 集群的审计系统中,配置 WORM(一次写入多次读取)策略,禁止删除或篡改审计日志,满足合规要求。
  • 提前做好日志的清洗和过滤规则,避免日志量过大占用过多存储资源,也提升后续审计排查的效率。
  • 审计相关的组件权限要做严格管控,禁止普通用户修改审计规则或者访问审计日志。

内容的提问来源于stack exchange,提问作者Prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:01