Présentation
Docker privilégié est l'une des nombreuses fonctionnalités utiles de cette puissante plate-forme de virtualisation. Avant de commencer à travailler en mode privilégié, assurez-vous de bien comprendre son fonctionnement.
Dans ce didacticiel, vous apprendrez ce que sont les conteneurs Docker privilégiés, quand les utiliser et s'il s'agit d'une bonne option pour vous.
Qu'est-ce que le mode privilégié Docker ?
Le mode privilégié Docker accorde des capacités racine de conteneur Docker à tous les appareils du système hôte. L'exécution d'un conteneur en mode privilégié lui donne les capacités de sa machine hôte. Par exemple, cela lui permet de modifier les configurations App Arm et SELinux.
Avec les fonctionnalités du noyau de l'hôte et l'accès aux périphériques, vous pouvez même installer une nouvelle instance de la plate-forme Docker dans le conteneur privilégié. Essentiellement, ce mode permet d'exécuter Docker dans Docker.
Comment vérifier si un conteneur est privilégié ?
Pour vérifier si vous exécutez un conteneur en mode privilégié, utilisez la commande :
docker inspect --format='{{.HostConfig.Privileged}}' [container_id]
Si le conteneur est privilégié, la sortie répond par true
, comme dans l'image ci-dessous.
En revanche, si le conteneur n'est pas privilégié, la sortie affiche le message false
.
Comment exécuter le mode privilégié Docker ?
Demandez à Docker d'exécuter un conteneur en mode privilégié en ajoutant le --privileged
option à la commande d'exécution :
sudo docker run --privileged [image_name]
Exemple privilégié Docker
Pour exécuter un conteneur Ubuntu (de manière interactive) en mode privilégié, vous utiliseriez :
sudo docker run -it --privileged ubuntu
Pour tester si le conteneur a accès à l'hôte, vous pouvez essayer de créer un système de fichiers temporaire (tmpfs ) et montez-le sur /mnt :
mount -t tmpfs none /mnt
Maintenant, répertoriez les statistiques d'espace disque (en lisible par l'homme format) avec la commande :
df -h
Le système de fichiers nouvellement créé devrait apparaître dans la liste, comme dans l'image ci-dessous.
Pourquoi l'exécution de conteneurs privilégiés n'est pas sécurisée ?
Tout comme Ubuntu décourage l'utilisation du système en tant que root, Docker le fait aussi. Exposer le noyau et les ressources matérielles de l'hôte à toute cyberattaque extérieure est toujours une menace potentielle pour le système.
Pour cette raison, il est déconseillé d'utiliser des conteneurs privilégiés dans un environnement de production.
Violations possibles via des conteneurs privilégiés
Avoir des conteneurs privilégiés est un risque de sécurité pour toute organisation. Cela crée des opportunités pour les utilisateurs malveillants de prendre le contrôle du système.
Autoriser un accès racine de conteneur à tout ce qui se trouve sur le système ouvre une fenêtre d'opportunité pour les cyberattaques. Un cyberattaquant pourrait se connecter à l'hôte depuis le conteneur et mettre en danger l'infrastructure et la configuration établies.
Le scénario le plus courant est lorsqu'un utilisateur légitime abuse du privilège accordé pour une activité malveillante.
Comment minimiser l'escalade des privilèges du conteneur Docker ?
Le meilleur moyen d'empêcher l'escalade des privilèges des conteneurs Docker est de ne pas utiliser de conteneurs privilégiés du tout.
Cependant, si vous exécutez une application qui nécessite une exécution avec l'utilisateur root, il existe un moyen de minimiser les risques d'activité malveillante. Cela se fait par remappage de l'espace de noms d'utilisateur , en remappant l'utilisateur de ce conteneur spécifique vers un utilisateur moins privilégié sur l'hôte Docker. Essentiellement, le conteneur considère l'utilisateur comme la racine, contrairement à l'hôte.
Le remappage comprend l'attribution d'une plage d'UID qui fonctionnent dans le conteneur (espace de noms) comme des UID normaux de 0 à 65536 mais qui n'ont aucun privilège sur l'hôte. Deux fichiers gèrent la configuration utilisateur - un pour la plage d'ID utilisateur (/etc/subuid ) et l'autre pour la plage d'ID de groupe (/etc/subgid ).
Par défaut, docker utilise le dockremap utilisateur et groupe pour effectuer le remappage.