Leçon 24 : Utilisateurs Non-Root et Meilleures Pratiques de Sécurité des Conteneurs
La sécurité doit être une priorité. Par défaut, les processus à l'intérieur d'un conteneur Docker s'exécutent en tant qu'utilisateur root, ce qui constitue un risque de sécurité majeur.
Le Problème du Root
Si un acteur malveillant prend le contrôle d'un conteneur s'exécutant en tant que root, il pourrait exploiter une vulnérabilité dans le démon Docker ou le noyau Linux pour obtenir un accès root à la machine hôte.
Solution : L'Instruction USER
L'instruction USER dans un Dockerfile définit l'utilisateur (par nom ou UID) qui exécutera toutes les commandes suivantes (RUN, CMD, ENTRYPOINT).
Exemple : Création et Utilisation d'un Utilisateur Dédié
-
Créer l'utilisateur et le groupe : dockerfile FROM alpine:latest
Créer un groupe et un utilisateur non-root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
Assurez-vous que le nouvel utilisateur est propriétaire du répertoire de l'application
RUN chown -R appuser:appgroup /app
Passer à l'utilisateur non-root
USER appuser
Le CMD s'exécutera maintenant en tant que 'appuser'
CMD ["node", "server.js"]
-
Utilisation d'Utilisateurs Pré-existants : De nombreuses images de base (comme Node.js, Python, ou Alpine) fournissent déjà des utilisateurs non-root auxquels vous pouvez passer immédiatement, comme
nodeoupython.dockerfile FROM node:20-slim
Passer directement à l'utilisateur fourni par l'image de base
USER node
WORKDIR /home/node/app COPY . .
CMD ["npm", "start"]
Autres Conseils de Sécurité
- Utilisez de Petites Images de Base : Utilisez des images
alpineouslimau lieu d'images OS complètes (par exemple,ubuntu) pour minimiser la surface d'attaque. - Utilisez les Constructions Multi-Étapes (Leçon 21) : Éliminez les outils de construction inutiles de l'image finale.
- Restreindre les Capacités : Utilisez le drapeau
--cap-droplors dedocker runpour supprimer les capacités du noyau inutiles du conteneur.