docker - 在 kubernetes 中运行时是否需要在 Dockerfile 中指定 UID
问题描述
拥有这个 dockerfile:
FROM debian:stretch
CMD ["cat", "/tmp/secrets.txt"]
然后我可以运行
docker run -v /etc/shadow:/tmp/secrets.txt spycontainer
即使我不是root,我也能看到/etc/shadow
!
Kubernetes 如何避免有人这样做?我是否需要确保每个图像在 dockerfile 中都有 UID?
解决方案
在 kubernetes 中,您可以使用pod 安全上下文
当您在没有任何安全上下文的情况下运行容器时,带有 run as root的 entrypoint 命令。例如
$ kubectl run -i --tty busybox --image=busybox --restart=Never -- sh
/ # ps aux
PID USER TIME COMMAND
1 root 0:00 sh
如果您使用如下安全上下文
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
使用runAsUser
您可以修改容器内进程的用户 ID。例如
$ kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml
$ kubectl exec -it security-context-demo -- sh
/ $ ps aux
PID USER TIME COMMAND
1 1000 0:00 sleep 1h
6 1000 0:00 sh
推荐阅读
- windows - 崩溃后如何自动删除驱动程序?
- react-native - 使用tipsi-stripe在React Native应用程序上实现ApplePay和GPay时出错
- javascript - Javascript:如何在动态添加的元素上定位 lightgallery.js
- ruby - 覆盖 Chrome 选项中间测试
- sql - 需要从sql server中的长字符串中解析出文本
- date - Quicksight 和月初至今
- node.js - 对于模型“类别”的路径“_id”处的值“some_id”,转换为 ObjectId 失败
- rendering - Grafana 图像渲染器插件不起作用
- sql - 当我添加一些注释掉的行时,Oracle 查询运行得更快
- android - REACT NATIVE 找不到 com.google.firebase:firebase-iid:。iid 的新更新破坏了该项目