USER Instruction đ¤ â
Dockerfile-āĻ USER āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύāĻāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āϏā§āϰāĻā§āώāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ āĻāĻāĻŋ āϏāϰāĻžāϏāϰāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻā§āϤāϰ⧠āϰāĻžāύ āĻšāĻā§āĻž āĻĒā§āϰāϏā§āϏāĻā§āϞ⧠āĻā§āύ āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āϰāĻžāύ āĻāϰāĻŦā§ āϤāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āĨ¤
ā§§. USER āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āĻāĻŋ? â
āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§, āĻĄāĻāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āϏāĻŦ āĻāĻŽāĻžāύā§āĻĄ root āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāϞā§āĨ¤ āĻāĻŋāύā§āϤ⧠āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋ āĻŦā§āϏā§āĻ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ āĻ
āύā§āϝāĻžā§ā§, āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āϰā§āĻ āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāϞāĻžāύ⧠āĻāĻāĻŋāϤ āύā§āĨ¤ USER āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻĒāύāĻŋ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āĻāύā§āĻā§āĻā§āϏāĻ āϰā§āĻ āĻĨā§āĻā§ āĻ
āύā§āϝ āĻā§āύ⧠āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāĻāĻžāϰ⧠āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
⧍. āϰā§āĻ āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāĻžāϞāĻžāύā§āϰ āĻā§āĻāĻāĻŋ â
āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋ āϰā§āĻ āĻāĻāĻāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻāϞ⧠āĻāĻŦāĻ āĻā§āύā§āĻāĻžāĻŦā§ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϤ⧠āĻšā§āϝāĻžāĻāĻžāϰāϰāĻž āĻāĻā§āϏā§āϏ āĻĒāĻžā§, āϤāĻŦā§:
- āĻšā§āϝāĻžāĻāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰā§āϰ āϏāĻŦ āĻĢāĻžāĻāϞ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
- āĻāύā§āĻā§āĻāύāĻžāϰ āĻĨā§āĻā§ āĻŦā§āϰ āĻšā§ā§ āĻŽā§āĻāύ āĻšā§āϏā§āĻ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āύāĻŋā§āύā§āϤā§āϰāĻŖ āύā§āĻā§āĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ (Container Breakout)āĨ¤
- āϏā§āύāϏāĻŋāĻāĻŋāĻ āĻĄā§āĻāĻž āĻā§āϰāĻŋ āĻšāĻā§āĻžāϰ āĻā§āĻāĻāĻŋ ā§§ā§Ļā§Ļ% āĻŦā§ā§ā§ āϝāĻžā§āĨ¤
ā§Š. āĻāĻŋāĻāĻžāĻŦā§ USER āĻāύā§āϏāĻā§āϰāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ? â
āĻĒā§āϰāĻĨāĻŽā§ āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āύāϤā§āύ āĻāĻāĻāĻžāϰ āĻāĻŦāĻ āĻā§āϰā§āĻĒ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ USER āĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋā§ā§ āϏā§āĻāĻŋ āϏā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
Alpine Linux-āĻāϰ āĻāύā§āϝ āĻāĻĻāĻžāĻšāϰāĻŖ: â
# ā§§. āĻāĻāĻāĻŋ āύāύ-āϰā§āĻ āĻāĻāĻāĻžāϰ āĻāĻŦāĻ āĻā§āϰā§āĻĒ āϤā§āϰāĻŋ āĻāϰāĻž
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# ⧍. āĻāĻžāĻā§āϰ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϏā§āĻ āĻāϰāĻž
WORKDIR /app
# ā§Š. āĻĢāĻžāĻāϞā§āϰ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻž (āϝāĻžāϤ⧠āύāϤā§āύ āĻāĻāĻāĻžāϰ āĻĢāĻžāĻāϞ āĻĒā§āϤā§/āϞāĻŋāĻāϤ⧠āĻĒāĻžāϰā§)
COPY --chown=appuser:appgroup . .
# ā§Ē. āĻāĻāĻāĻžāϰ āϏā§āĻāĻ āĻāϰāĻž
USER appuser
# āĻāĻāύ āĻĨā§āĻā§ āϏāĻŦāĻāĻŋāĻā§ appuser āĻšāĻŋāϏā§āĻŦā§ āĻāϞāĻŦā§
CMD ["npm", "start"]Ubuntu/Debian-āĻāϰ āĻāύā§āϝ āĻāĻĻāĻžāĻšāϰāĻŖ: â
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" āĻŦāĻž āύā§āϝā§āύāϤāĻŽ āĻā§āώāĻŽāϤāĻžāϰ āύā§āϤāĻŋ āĻ āύā§āϝāĻžā§ā§ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϰāĻžāύ āĻāϰāĻž āϏāĻŋāĻāĻŋāĻāϰāĻŋāĻāĻŋāϰ āĻŽā§āϞ āĻāĻžāĻŦāĻŋāĻāĻžāĻ āĻŋāĨ¤