Docker root privileges

Résolu
Casoth - 25 juil. 2023 à 08:28
CasothIT Messages postés 6 Date d'inscription mardi 25 juillet 2023 Statut Membre Dernière intervention 29 juillet 2023 - 25 juil. 2023 à 17:31

Bonjour,

Je suis en train de m'initier à Docker, niveau install/pull de container/run etc aucun problème pour le moment. Je m'amuse tranquillement.

Mais je me suis rendu compte, que pour lancer les containers, il fallait que je sois en root. J'ai vu dans la dock qu'il était possible de le configurer afin de lancer les containers en tant que non-root.

En soit, j'imagine que le problème (ou du moins la question) a bien été potassé par des personnes  au top niveau dans leurs domaines. Mais je ne peux m'empecher de me demander si il y a aucun risque de lancer des contenaire avec autant de privilèges.

Par exemple, si je lance un container avec un service de serveur web, ça me parait curieux de le lancer avec autant de droits, sachant qu'il y a des interaction direct avec mon "host".  (j'espère avoir été claire, je suis encore en phase de découverte, donc peut être que je confond quelques notions)

Qu'en pensez vous?

Merci pour vos réponses

Casoth

ps: Désolé si je ne suis pas sur le bon forum


Linux / Firefox 115.0

A voir également:

3 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 501
25 juil. 2023 à 10:52

Bonjour,

Les privilèges root sont nécessaires afin de communiquer avec le daemon Docker.

Il n'y a pas de distinction faite parmi les containers gérés par ce daemon en fonction de "quel utilisateur a exécuté la commande 'docker run...' ". Ainsi, chaque utilisateur ayant accès au daemon Docker peut voir/gérer les containers lancés par d'autres utilisateurs via ce daemon, ce qui peut déjà être un soucis sur un système multi-utilisateurs. Par ailleurs, pour éviter un "sudo", les utilisateurs peuvent être ajoutés au groupe "docker".

C'est juste le daemon qui est exécuté de façon privilégiée, il existe bien toujours une couche d'isolation qui fait que même si un container était compromis (à cause d'une faille dans une application contenue dans ce container), le hacker ne parviendrait pas à atteindre le système hôte. Il faudrait exploiter une faille de sécurité au niveau de la technologie de container sous jacente (LXC pour les containers Linux, HyperV pour les containers Windows) ce qui est peu probable.

Toutefois, tu as raison de te demander pourquoi une application comme Apache, un projet NodeJS, une application PHP devrait avoir besoin de faire intervenir "root" quelque-part alors qu'elles peuvent très bien être exécutées en tant qu'utilisateur simple. C'est pourquoi il est préférable d'utiliser des containers rootless, si possible avec Podman.

Pour l'utilisation d'un port privilégier <1024, il suffit d'associer le container à un port non privilégier et créer une redirection de ports avec le pare-feu du système (nftables), je déconseille de modifier la limite des ports privilégiés, méthode souvent donnée comme "solution".

0

Merci pour ta réponse.

Je comprends mieux l'idée du daemon etc. Mais donc ajouter le groupe Docker à un utilisateur, permet juste de faire un 'docker run' sans le sudo, mais derière il sera quand même gérer par le daemon avec les privilèges élevés?

Je vais me renseigner sur les couches LXC/HyperV, merci pour la piste.

Je vais regarder cette histoire de Podman et de containers rootless également.

Pour les ports, prennant pour exemple un serveur apache. Si je lance le container en mode ' -p 6666:6666' , si je ne dis pas de bétise, les requêtes passeront du container à l'host via le port 6666. Via le parefeu, je redirige mon traffic 6666 vers le 80? Ainsi, via mon navigateur, si je fais un http://localhost:80 je verrais bien mon serveur web? Je ne connais pas trop nftable, j'ai laissé le paramètrage par défaut (deny all sur le trafic entrant de mémoire). Il faut peut être que je revois certaines bases.

Quoi qu'il en soit, plein de piste à explorer et truc à lire et tester!

Je te remercie encore.

0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 501
Modifié le 25 juil. 2023 à 14:40

En effet, l'utilisateur non-privilégié pourrait, via le daemon Docker, accéder à des données auxquelles il n'a pas accès normalement en lançant un container et en lui attachant le fichier/dossier ciblé.

Oui, l'idée est d'utiliser un port hôte supérieur à 1024 pour publier le service car il faut être administrateur pour accéder aux ports inférieurs. Note que le port interne au container peut être 80 : tu peux utiliser "-p 6666:80"

De cette manière, http://localhost:6666 affichera ta page Apache qui écoute le port 80 dans le container.

Et pour accéder à http://localhost, il faudra rediriger les paquets IP destinés à 127.0.0.1:80 vers 127.0.0.1:6666

C'est du DNAT, à mettre en place avec ton pare-feu (iptables, ufw, firewalld, ...). Il faut être administrateur pour créer cette redirection mais uniquement pour cette action.

0
CasothIT Messages postés 6 Date d'inscription mardi 25 juillet 2023 Statut Membre Dernière intervention 29 juillet 2023 > avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024
25 juil. 2023 à 14:53

D'ac, j'ai pas vraiment réfléchie, mais c'est un peu comme la table NAT de mon routeur (ma box en l'occurence), je vois grosso-modo le principe, même si y a pas mal de chose à approfondire. Je vais tester tout ça, me planter, recommencer et avancer!

Je te remercie pour tes lumières, y a tellement de ressource sur internet, que parfois, c'est pas évident de faire le tri ^^

Amuse toi bien o/

0
CasothIT Messages postés 6 Date d'inscription mardi 25 juillet 2023 Statut Membre Dernière intervention 29 juillet 2023
25 juil. 2023 à 17:31

Hello,

Pour un petit retour, je me suis amusé à monter un serveur Web(Apache/mariaDB) avec un container par service et des redirections de ports  via Netfilter.

Je me suis fais un petit CRUD rapido pour voir:

- mes requêtes wget répondent nickel sur http://127.0.0.1

- dans wireshark / les logs de Netfilter, je vois bien la redirection des paquets et le trafic comme à l'attendu.

Merci encore pour le débrousaillage d'info !

0