目标
容器默认以 root 运行,进程一旦被攻陷便在命名空间内拥有高权限。本配方在镜像中创建专用用户与组并以数字 uid 切换,运行时通过 id 校验实际用户,确保以非 root 运行;同时提醒可写路径需改归属,且不要为绑定低端口而授予额外能力。
步骤要点
- 在镜像中创建专用用户与组并切换。
- 运行时校验实际 uid 为非 root。
- 把可写路径改归属应用用户。
- 改绑高端口而不是授予能力。
FROM node:22-alpine
RUN addgroup -S app && adduser -S app -G app
WORKDIR /app
COPY --chown=app:app . .
USER 10001:10001
CMD ["node", "server.js"]
排错提示
- 应用用户可能对文件不可写,需改归属。
- 低于 1024 的端口需特殊权限。
- 第三方镜像可能无法非 root 运行。
适用边界
- 本身不移除 capabilities。
- 无 root 镜像可能仍需能力调优。