Docker avancé : durcir et tenir en vie un conteneur

Retirer les privilèges inutiles d'un conteneur, garder les secrets hors de l'image, plafonner ses ressources, le surveiller avec un HEALTHCHECK et choisir sa politique de redémarrage.

  • 26 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Principe de moindre privilège : de quoi s'agit-il ?

    Voir la réponse

    Règle de sécurité qui veut qu'un processus reçoive uniquement les droits dont il a besoin pour sa tâche, et rien de plus.

    Pour un conteneur : utilisateur sans privilèges, système de fichiers en lecture seule, --cap-drop ALL, jamais --privileged. Si le service est compromis, l'attaquant hérite de peu.

  • Pourquoi ne faut-il jamais monter /var/run/docker.sock dans un conteneur ?

    • Qui parle au démon peut lancer un conteneur privilégié : c'est donner root sur l'hôte
    • Le socket est trop lent et ralentit tous les autres conteneurs de la machine hôte
    • Docker interdit de monter n'importe quel fichier du système hôte dans un conteneur
    • Le conteneur ne pourrait plus utiliser son propre réseau virtuel après le montage
    Voir la réponse

    Qui parle au démon peut lancer un conteneur privilégié : c'est donner root sur l'hôte

    Le socket est l'API du démon, qui tourne en root. Un processus qui peut l'appeler peut créer un conteneur montant tout le disque de l'hôte : le moindre privilège est contourné d'un coup.

  • L'option … rend le système de fichiers du conteneur non modifiable ; un dossier d'écriture temporaire s'ajoute avec ….

    Voir la réponse

    L'option --read-only rend le système de fichiers du conteneur non modifiable ; un dossier d'écriture temporaire s'ajoute avec --tmpfs /tmp.

    Réelle sortie de docker run --rm --read-only alpine touch /x : touch: /x: Read-only file system. Un intrus ne peut plus déposer d'outil ni modifier le code.

  • Conteneur non root : de quoi s'agit-il ?

    Voir la réponse

    Conteneur dont le processus tourne sous un utilisateur sans privilèges, fixé dans l'image par USER ou au lancement par --user, plutôt que sous l'utilisateur 0.

    Sans USER, le service tourne en root dans le conteneur : une faille dans le service donne alors à l'attaquant tous les droits de root à l'intérieur et, sans espace de noms user, une évasion le fait arriver root sur l'hôte.

  • docker ps montre Restarting (1) 5 seconds ago pour un conteneur lancé avec --restart always, et cela dure depuis une heure. Quelle est la cause probable et la bonne réponse ?

    • Le contrôle de santé échoue en boucle : retirer le HEALTHCHECK de l'image pour régler le problème
    • Le processus sort en erreur et always le relance : lire docker logs, corriger, puis borner avec on-failure:5
    • Le conteneur manque de mémoire : doubler --memory pour qu'il tienne enfin jusqu'au bout de son démarrage
    • C'est le fonctionnement normal d'always : il suffit d'attendre qu'il se stabilise tout seul
    Voir la réponse

    Le processus sort en erreur et always le relance : lire docker logs, corriger, puis borner avec on-failure:5

    (1) est le code de sortie : le processus échoue, Docker le relance sans fin (avec un délai croissant). Les journaux disent pourquoi ; on-failure:5 évite la boucle infinie en abandonnant après cinq essais.