容器安全

日更第30日: 容器安全之启用用户命名空间

2021-11-11  本文已影响0人  微凉哇

描述

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

参考文档

上一篇 下一篇

猜你喜欢

热点阅读