kubernetes - CSI sidecar 的最低权限
问题描述
我正在使用 CSI 标准构建自己的 CSI 驱动程序,我想知道要为 CSI 边车容器设置的安全上下文。
我将使用:
- 节点驱动注册器
- CSI 供应商
- CSI 附件
- CSI 活性探针。
其中一些需要以 root 身份运行,我想知道安全上下文中的配置是否为它们分配了最小的 Linux 功能并确保在最短的时间内提供 root 功能。
我是否被迫按如下方式设置安全上下文?有没有办法进一步限制它?
securityContext:
allowPrivilegeEscalation: true
privileged: false
runAsNonRoot: true
capabilities:
drop:
- all
add:
- SYS_ADMIN
在此先感谢,安东尼奥
解决方案
根据对 kubernetes 和 linux 功能的研究,看起来您已经找到了最少的权限。
您的示例包含最低需要的功能 -主要CAP_SYS_ADMIN
用于文件系统。mounting
unmounting
更详细地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));
在许多设备驱动程序上执行管理操作;
还有一篇非常好的文章,其中包含有关 docker 映像和安全方面的许多详细信息,可以在这里找到 - Towards unprivileged container builds
另一篇文章解释了linux capabilities
它的例子,它的应用可能会有所帮助 - HackTricks - Linux Capabilities
推荐阅读
- loops - Windows 命令处理器内存使用不断增加的问题。(批处理文件)
- java - 重新运行几次后我的运行时间仍然相同,我可以知道如何解决这个问题吗?
- r - 同一个menuItem在shiny时如何根据选中的条件切换到对应的界面?
- reactjs - 如何通过按钮单击在页面更改/重定向上显示 React Toastbar?
- python - 我试图找出一种将 json 文件导出到我在 python 上选择的文件路径的方法
- javascript - 如何将字符串数学表达式中的组件与javascript中的未知数字匹配?
- css - Firebase 托管 CSS 文件上传失败
- azure - 触发将数据从 blob 复制到 ADLS,从文件名中提取路径
- julia - 强化学习中的连续动作空间——代理如何从连续空间中选择动作值?
- python - Python代码输出不显示条形图可视化