容器安全之启用用户命名空间

描述

Docker守护程序中启用用户命名空间支持,可对用户进行重新映射。该建议对镜像中没有指定用户是有帮助的。

如果在容器镜像中已经定义了非root运行,可跳过此建议。

隐患分析

Docker守护程序中对Linux内核用户命名空间支持为Docker主机系统提供了额外的安全性。
它允许容器具有独特的用户和组ID,这些用户和组ID在主机系统所使用的传统用户和组范围之外。
例如,root用户希望有容器内的管理权限,可映射到主机系统上的非rootUID

审计

如果容器进程以root身份运行,则不符合安全要求

[root@localhost ~]# ps -ef|grep 15eebdabbb8b
root      80060  73608  0 04:03 ?        00:00:00 containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/15eebdabbb8bd59366348ae95a89d79100370b9c9381b070fdfbb0119b516400 -address /var/run/docker/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc -systemd-cgroup
root     111259   1482  0 07:08 pts/0    00:00:00 grep --color=auto 15eebdabbb8b

修复建议

修改系统参数

$ sed -i "/user.max_user_namespaces/d" /etc/sysctl.conf
$ echo "user.max_user_namespaces=15000" >> /etc/sysctl.conf
$ sysctl -p

编辑配置文件

$ vi /etc/systemd/system/docker.service

ExecStart=/usr/bin/dockerd添加参数--userns-remap=default

重载服务

$ systemctl daemon-reload
$ systemctl restart docker

启动一个容器

[root@localhost ~]# docker run -idt --name ccc alpine

查看容器内进程用户

[root@localhost ~]# ps -p $(docker inspect --format='{{.State.Pid}}' $(docker ps |grep ccc|awk '{print $1}')) -o pid,user
 PID USER
2535 100000

参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容