Avec l’aide du mode d’emploi rootless de Podman, découvrons ensemble les choix d’architecture de Podman et son mode rootless par défaut : https://podman.io/docs/installation
Note : il est aussi possible d’utiliser docker-compose avec Podman grâce à l’activation de son API.
Ressources pour le debugging si nécessaire :
dockerd
: le fichier daemon.json
Revenons à Docker.
On peut spécifier des options plus sécurisées, soit en modifiant le service docker.service
, soit en modifiant le fichier /etc/docker/daemon.json
(plus recommandé).
Par défault, et à cause de leur côté contre-intuitif, ils ne sont pas utilisés !
Voici la documentation détaillée de leur fonctionnement : https://docs.docker.com/engine/security/userns-remap/#enable-userns-remap-on-the-daemon
/etc/docker/driver.json
:
{
"userns-remap": "default"
}
Relancez le service docker.service
Observez ces fichiers :
/etc/subuid
/etc/passwd
Montez le dossier /
(racine) dans un conteneur : que s’est-il passé ?
docker run -it -v /:/dossier-racine-hote ubuntu /bin/bash
Faites un id
depuis un conteneur
Avec docker inspect
et ps -aux
, trouvez le UID effectif d’un conteneur après l’activation de cette option.
à l’aide du projet Github suivant, lancez le benchmark Docker CIS : https://github.com/docker/docker-bench-security/
commentons-le ensemble à l’aide du guide suivant : CIS_Docker_Benchmark_V1.6.0.PDF
Désactivez l’options icc
dans le fichier daemon.json
et relancez l’audit.
Tentez de pinger un conteneur depuis un autre (voir TP3 sur le réseau pour un exemple).
La sécurité de Docker c’est aussi celle de la chaîne de dépendance, des images, des packages installés dans celles-ci : on fait confiance à trop de petites briques dont on ne vérifie pas la provenance ou la mise à jour
docker run --rm aquasec/trivy image monimage:latest
, scannons une image de notre choix
https://aquasecurity.github.io/trivy/v0.50/docs/coverage/language/En production, on peut utiliser Watchtower : un conteneur ayant pour mission de périodiquement récupérer des images et recréer les conteneurs pour qu’ils utilisent la dernière image Docker
Un registry avancé, par exemple avec Harbor, permet d’activer le scanning d’images, de gérer les droits d’usage d’images, et de potentiellement restreindre les images utilisables dans des contextes d’organisation sécurisés.
Voir la démo : https://goharbor.io/docs/2.10.0/install-config/demo-server/
bane
, un générateur de profil AppArmor pour Docker, en suivant l’exemple d’un profil Nginx :
https://github.com/genuinetools/baneAppArmor est plus haut niveau que SELinux (qui s’active dans daemon.json
mais que sur les systèmes RedHat).