启用用户命名空间

描述

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

参考文档

Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:42

results matching ""

    No results matching ""