Skip to content

USER Instruction 👤 ​

Dockerfile-āĻ USER āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύāϟāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϏ⧁āϰāĻ•ā§āώāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻāϟāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϭ⧇āϤāϰ⧇ āϰāĻžāύ āĻšāĻ“ā§ŸāĻž āĻĒā§āϰāϏ⧇āϏāϗ⧁āϞ⧋ āϕ⧋āύ āχāωāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϰāĻžāύ āĻ•āϰāĻŦ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤


ā§§. USER āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ āĻ•āĻŋ? ​

āĻĄāĻŋāĻĢāĻ˛ā§āϟāĻ­āĻžāĻŦ⧇, āĻĄāĻ•āĻžāϰ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϏāĻŦ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ root āχāωāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāϞ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻŦ⧇āĻ¸ā§āϟ āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāϏ āĻ…āύ⧁āϝāĻžā§Ÿā§€, āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϰ⧁āϟ āχāωāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻžāϞāĻžāύ⧋ āωāϚāĻŋāϤ āύ⧟āĨ¤ USER āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻĒāύāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āĻ•āĻ¨ā§āĻŸā§‡āĻ•ā§āϏāϟ āϰ⧁āϟ āĻĨ⧇āϕ⧇ āĻ…āĻ¨ā§āϝ āϕ⧋āύ⧋ āϏāĻžāϧāĻžāϰāĻŖ āχāωāϜāĻžāϰ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤


⧍. āϰ⧁āϟ āχāωāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻžāϞāĻžāύ⧋āϰ āĻā§āρāĻ•āĻŋ ​

āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϰ⧁āϟ āχāωāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāϞ⧇ āĻāĻŦāĻ‚ āϕ⧋āύ⧋āĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϤ⧇ āĻšā§āϝāĻžāĻ•āĻžāϰāϰāĻž āĻāĻ•ā§āϏ⧇āϏ āĻĒāĻžā§Ÿ, āϤāĻŦ⧇:

  • āĻšā§āϝāĻžāĻ•āĻžāϰ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϏāĻŦ āĻĢāĻžāχāϞ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āĨ¤
  • āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĨ⧇āϕ⧇ āĻŦ⧇āϰ āĻšā§Ÿā§‡ āĻŽā§‡āχāύ āĻšā§‹āĻ¸ā§āϟ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āύāĻŋ⧟āĻ¨ā§āĻ¤ā§āϰāĻŖ āύ⧇āĻ“ā§ŸāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ (Container Breakout)āĨ¤
  • āϏ⧇āύāϏāĻŋāϟāĻŋāĻ­ āĻĄā§‡āϟāĻž āϚ⧁āϰāĻŋ āĻšāĻ“ā§ŸāĻžāϰ āĻā§āρāĻ•āĻŋ ā§§ā§Ļā§Ļ% āĻŦā§‡ā§œā§‡ āϝāĻžā§ŸāĨ¤

ā§Š. āĻ•āĻŋāĻ­āĻžāĻŦ⧇ USER āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ⧇āύ? ​

āĻĒā§āϰāĻĨāĻŽā§‡ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āχāωāϜāĻžāϰ āĻāĻŦāĻ‚ āĻ—ā§āϰ⧁āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ USER āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋā§Ÿā§‡ āϏ⧇āϟāĻŋ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

Alpine Linux-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĻāĻžāĻšāϰāĻŖ: ​

dockerfile
# ā§§. āĻāĻ•āϟāĻŋ āύāύ-āϰ⧁āϟ āχāωāϜāĻžāϰ āĻāĻŦāĻ‚ āĻ—ā§āϰ⧁āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻž
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# ⧍. āĻ•āĻžāĻœā§‡āϰ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϏ⧇āϟ āĻ•āϰāĻž
WORKDIR /app

# ā§Š. āĻĢāĻžāχāϞ⧇āϰ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž (āϝāĻžāϤ⧇ āύāϤ⧁āύ āχāωāϜāĻžāϰ āĻĢāĻžāχāϞ āĻĒ⧜āϤ⧇/āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰ⧇)
COPY --chown=appuser:appgroup . .

# ā§Ē. āχāωāϜāĻžāϰ āϏ⧁āχāϚ āĻ•āϰāĻž
USER appuser

# āĻāĻ–āύ āĻĨ⧇āϕ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ appuser āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāϞāĻŦ⧇
CMD ["npm", "start"]

Ubuntu/Debian-āĻāϰ āϜāĻ¨ā§āϝ āωāĻĻāĻžāĻšāϰāĻŖ: ​

dockerfile
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
USER appuser

ā§Ē. āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϟāĻŋāĻĒāϏ ​

  • Specific UID/GID āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž: āĻ…āύ⧇āĻ• āϏāĻŽā§Ÿ āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋ āĻĒāϞāĻŋāϏāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āφāχāĻĄāĻŋ āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšā§ŸāĨ¤
    dockerfile
    RUN addgroup -g 1001 appgroup && \
        adduser -D -u 1001 -G appgroup appuser
    USER appuser
  • --chown āĻĢā§āϞāĻžāĻ—: COPY āĻŦāĻž ADD āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϏāĻŽā§Ÿ āϰāĻŋāĻŽā§‡āĻŽā§āĻŦāĻžāϰ āĻ•āϰ⧇ --chown=user:group āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ, āύāϤ⧁āĻŦāĻž āĻĢāĻžāχāϞāϗ⧁āϞ⧋ āϰ⧁āϟ āχāωāϜāĻžāϰ⧇āϰ āĻŽāĻžāϞāĻŋāĻ•āĻžāύāĻžāϧ⧀āύ āĻĨ⧇āϕ⧇ āϝāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āϏ⧇āϗ⧁āϞ⧋ āĻāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āύāĻžāĨ¤
  • WORKDIR āĻāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāύ: āϏāĻžāϧāĻžāϰāĻŖāϤ āχāωāϜāĻžāϰ āϏ⧁āχāϚ āĻ•āϰāĻžāϰ āφāϗ⧇āχ WORKDIR āϏ⧇āϟ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āĻĢāĻžāχāϞ āĻ•āĻĒāĻŋ āĻ•āϰāĻž āĻļ⧇āώ āĻ•āϰāĻž āĻ­āĻžāϞ⧋āĨ¤

āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary) ​

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ-āϰ⧇āĻĄāĻŋ āϝ⧇āϕ⧋āύ⧋ Dockerfile-āĻ USER āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ āĻĨāĻžāĻ•āĻž āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻŦāϞ⧇ āĻŽāύ⧇ āĻ•āϰāĻž āĻšā§ŸāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇āϰ āϚāĻžāϰāϧāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻžāϰ āĻ¸ā§āϤāϰ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤


IMPORTANT

āϏāĻŦāϏāĻŽā§Ÿ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ: "Principle of Least Privilege" āĻŦāĻž āĻ¨ā§āϝ⧂āύāϤāĻŽ āĻ•ā§āώāĻŽāϤāĻžāϰ āύ⧀āϤāĻŋ āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϰāĻžāύ āĻ•āϰāĻž āϏāĻŋāĻ•āĻŋāωāϰāĻŋāϟāĻŋāϰ āĻŽā§‚āϞ āϚāĻžāĻŦāĻŋāĻ•āĻžāĻ āĻŋāĨ¤

Released under the MIT License.