J'exécute certains services à l'intérieur des conteneurs Docker LXC sur mon serveur et je commence à faire des choses sérieuses avec eux.
Une chose que je ne sais pas, c'est comment fonctionnent les autorisations utilisateur à l'intérieur et à l'extérieur du conteneur. Si, par exemple, j'exécute MySQL dans un conteneur et que son répertoire de données est défini sur /data
, qui est un volume Docker, comment les autorisations à l'intérieur et à l'extérieur du conteneur affectent-elles les stratégies d'accès?
De toute évidence, l'idée est d'exécuter MySQL comme son propre utilisateur dans le conteneur (c'est-à-dire mysql:mysql
) et de lui donner des droits de lecture et d'écriture sur ce répertoire. Je suppose que ce serait assez simple, juste dans chmod
le répertoire, etc. Mais comment cela fonctionne-t-il en dehors du conteneur? Maintenant que j'ai ce volume partagé Docker appelé «données», comment puis-je gérer le contrôle d'accès?
Je cherche spécifiquement à pouvoir exécuter un utilisateur non privilégié en dehors du conteneur Docker qui accédera périodiquement au volume partagé MySQL et sauvegardera les données.
Comment configurer les autorisations, les utilisateurs et les groupes pour qu'un utilisateur spécifique sur l'hôte puisse lire / écrire des fichiers et des dossiers dans le volume partagé Docker?
la source
docker
support pour le moment), le conteneur LXC peut être exécuté en tant qu'utilisateur non privilégié. Sinon, l'root
utilisateur à l'intérieur du conteneur pourrait potentiellement éclater si le conteneur est mal configuré. C'est-à-dire que l'root
hôte estroot
dans un conteneur dans un conteneur LXC privilégié.root
peut, en passant, également exécuter des conteneurs non privilégiés . Il est important de définir un mappage pour les utilisateurs .Réponses:
Depuis la sortie de 0,9 Docker a chuté
LXC
et utilise son propre environnement d'exécution,libcontainer
. Votre question est un peu ancienne mais je suppose que ma réponse s'applique toujours à la version que vous utilisez.Réponse rapide: Pour comprendre les autorisations des volumes, vous pouvez prendre l'analogie de
mount --bind Host-Dir Container-Dir
. Ainsi, pour répondre à vos besoins, vous pouvez utiliser toutes les méthodes traditionnelles de gestion des autorisations. Je suppose que l'ACL est ce dont vous avez besoin .Réponse longue: Donc, comme dans votre exemple, nous avons un conteneur nommé dock avec un volume
/data
.À l'intérieur du conteneur, notre serveur MySQL a été configuré pour utiliser le
/data
comme répertoire de données. Nous avons donc nos bases de données à l'/data
intérieur du conteneur. Et en dehors du conteneur sur le système d'exploitation hôte, nous avons monté ce/data
volume à partir de/usr/container/Databases/
et nous affectons un bob utilisateur normal pour prendre des sauvegardes des bases de données. À partir de la machine hôte, nous configurerons les ACL pour l'utilisateur bob .Pour le tester, prenons une sauvegarde avec l'utilisateur bob .
Et tar apparaîtra et vous pouvez voir que notre utilisateur a pu accéder à tous les fichiers.
Maintenant, à l'intérieur du conteneur, si vous vérifiez avec,
getfacl
vous remarquerez qu'au lieu de bob, il affiche 3000. C'est parce que l'UID de bob est de 3000 et qu'il n'y a pas un tel utilisateur dans le conteneur, il affiche simplement l'UID qu'il reçoit des métadonnées . Maintenant, si vous créez un utilisateur dans votre conteneur avecuseradd -u 3000 bob
vous remarquerez quegetfacl
le nom affiche désormais le bob au lieu de 3000.Résumé : les autorisations utilisateur que vous attribuez de l'intérieur ou de l'extérieur du conteneur se reflètent donc dans les deux environnements. Ainsi, pour gérer les autorisations des volumes, les UID de la machine hôte doivent être différents des UID du conteneur .
la source
lxc-docker
, cela signifie-t-il qu'il n'utilise pas LXC? Est-ce que ce qui précède s'applique toujours dans ce cas?apt-get info
peut avoir les détails) car dans ubuntu il y a un autre paquetdocker.io
que j'ai utilisé. Je ne suis pas allé longtemps avec Ubuntu, car Docker et RedHat se sont maintenant associés. Il est donc préférable d'utiliser RHEL ou CentOS comme système d'exploitation de base, sinon vous pouvez simplement utiliser LXC.lxc-docker
cela semble fonctionner comme prévu. J'ai créé un utilisateur avec un UID de 3000, j'ai touché un fichier dans un volume partagé et j'ai pu voir depuis le système d'exploitation hôte que le fichier existait et appartenait à un utilisateur avec l'ID 3000.