运行 静态构建在 docker 临时图像中时的安全性?
Security when running static builds in docker scratch images?
我目前正在评估减小图像尺寸的不同选项。除了 alpine 之外,还可以选择 运行 在具有多阶段 docker 构建的临时图像中静态构建,大多数人称之为安全(并且我同意攻击面)。但是由于不涉及用户管理等,这是否意味着 运行 二进制文件与执行它的 docker 守护程序具有相同的权限?这里的安全点在哪里?
您仍然可以通过在 Dockerfile 中使用 USER
命令或在启动容器 (--user=
) 时为来自 SCRATCH
的图像定义用户。最安全的选项将是 Dockerfile 中 USER
命令指定的非 root 用户——它将是默认的容器选项。如果容器需要 root 用户,那么你可以使用 user namespaces,这样就不会在容器中使用真正的 root。
顺便说一句:非 root 用户的典型问题是低端口绑定,但您可以绑定高端口或使用 --cap-add net_bind_service
/--sysctl net.ipv4.ip_unprivileged_port_start=0
(内核 4.11+)。
我目前正在评估减小图像尺寸的不同选项。除了 alpine 之外,还可以选择 运行 在具有多阶段 docker 构建的临时图像中静态构建,大多数人称之为安全(并且我同意攻击面)。但是由于不涉及用户管理等,这是否意味着 运行 二进制文件与执行它的 docker 守护程序具有相同的权限?这里的安全点在哪里?
您仍然可以通过在 Dockerfile 中使用 USER
命令或在启动容器 (--user=
) 时为来自 SCRATCH
的图像定义用户。最安全的选项将是 Dockerfile 中 USER
命令指定的非 root 用户——它将是默认的容器选项。如果容器需要 root 用户,那么你可以使用 user namespaces,这样就不会在容器中使用真正的 root。
顺便说一句:非 root 用户的典型问题是低端口绑定,但您可以绑定高端口或使用 --cap-add net_bind_service
/--sysctl net.ipv4.ip_unprivileged_port_start=0
(内核 4.11+)。