首页 > 解决方案 > CSI sidecar 的最低权限

问题描述

我正在使用 CSI 标准构建自己的 CSI 驱动程序,我想知道要为 CSI 边车容器设置的安全上下文。

我将使用:

其中一些需要以 root 身份运行,我想知道安全上下文中的配置是否为它们分配了最小的 Linux 功能并确保在最短的时间内提供 root 功能。

我是否被迫按如下方式设置安全上下文?有没有办法进一步限制它?

securityContext:
  allowPrivilegeEscalation: true
  privileged: false
  runAsNonRoot: true
  capabilities:
    drop:
    - all
    add:
    - SYS_ADMIN

在此先感谢,安东尼奥

标签: kubernetesprivilegeslinux-capabilitiessecurity-contextcsi

解决方案


根据对 kubernetes 和 linux 功能的研究,看起来您已经找到了最少的权限。

您的示例包含最低需要的功能 -主要CAP_SYS_ADMIN用于文件系统。mountingunmounting

更详细地CAP_SYS_ADMIN用于:

  • 执行一系列系统管理操作,包括:quotactl(2)、mount(2)、umount(2)、pivot_root(2)、swapon(2)、swapoff(2)、sethostname(2) 和 setdomainname(2);

  • 使用 ioprio_set(2) 分配 IOPRIO_CLASS_RT 和(在 Linux 2.6.25 之前)IOPRIO_CLASS_IDLE I/O 调度类;

  • 超过 /proc/sys/fs/file-max,系统范围内打开文件数量的限制,在打开文件的系统调用中(例如,accept(2)、execve(2)、open(2)、pipe( 2));

  • 调用 setns(2)(需要目标命名空间中的 CAP_SYS_ADMIN);

  • 使用 TIOCSTI ioctl(2) 将字符插入到终端的输入队列中,而不是调用者的控制终端;

  • 使用过时的 nfsservctl(2) 系统调用;

  • 使用过时的 bdflush(2) 系统调用;

  • 执行各种特权块设备 ioctl(2) 操作;

  • 执行各种特权文件系统 ioctl(2) 操作;

  • 在 /dev/random 设备上执行特权 ioctl(2) 操作(参见 random(4));

  • 在许多设备驱动程序上执行管理操作;

源码-capabilities(7)——Linux手册页


还有一篇非常好的文章,其中包含有关 docker 映像和安全方面的许多详细信息,可以在这里找到 - Towards unprivileged container builds

另一篇文章解释了linux capabilities它的例子,它的应用可能会有所帮助 - HackTricks - Linux Capabilities


推荐阅读