GNU/Linux >> Tutoriels Linux >  >> Linux

Comment ajouter des utilisateurs au conteneur Docker ?

L'astuce consiste à utiliser useradd au lieu de son wrapper interactif adduser .Je crée généralement des utilisateurs avec :

RUN useradd -ms /bin/bash newuser

qui crée un répertoire personnel pour l'utilisateur et garantit que bash est le shell par défaut.

Vous pouvez ensuite ajouter :

USER newuser
WORKDIR /home/newuser

à votre dockerfile. Chaque commande ultérieure ainsi que les sessions interactives seront exécutées en tant qu'utilisateur newuser :

docker run -t -i image
[email protected]:~$

Vous devrez peut-être donner newuser les autorisations d'exécuter les programmes que vous avez l'intention d'exécuter avant d'invoquer la commande utilisateur.

L'utilisation d'utilisateurs non privilégiés à l'intérieur des conteneurs est une bonne idée pour des raisons de sécurité. Il a aussi quelques inconvénients. Plus important encore, les personnes dérivant des images de votre image devront revenir à la racine avant de pouvoir exécuter des commandes avec des privilèges de superutilisateur.


Ajouter un utilisateur dans Docker et exécuter votre application sous cet utilisateur est une très bonne pratique du point de vue de la sécurité. Pour ce faire, je recommanderais les étapes ci-dessous :

FROM node:10-alpine

# Copy source to container
RUN mkdir -p /usr/app/src

# Copy source code
COPY src /usr/app/src
COPY package.json /usr/app
COPY package-lock.json /usr/app

WORKDIR /usr/app

# Running npm install for production purpose will not run dev dependencies.
RUN npm install -only=production    

# Create a user group 'xyzgroup'
RUN addgroup -S xyzgroup

# Create a user 'appuser' under 'xyzgroup'
RUN adduser -S -D -h /usr/app/src appuser xyzgroup

# Chown all the files to the app user.
RUN chown -R appuser:xyzgroup /usr/app

# Switch to 'appuser'
USER appuser

# Open the mapped port
EXPOSE 3000

# Start the process
CMD ["npm", "start"]

Les étapes ci-dessus sont un exemple complet de copie de fichiers de projet NodeJS, de création d'un groupe d'utilisateurs et d'un utilisateur, d'attribution d'autorisations à l'utilisateur pour le dossier de projet, de basculement vers l'utilisateur nouvellement créé et d'exécution de l'application sous cet utilisateur.


Ubuntu

Essayez les lignes suivantes en Dockerfile :

RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu

useradd options (voir :man useradd ):

  • -r , --system Créez un compte système.
  • -m , --create-home Créez le répertoire personnel de l'utilisateur.
  • -d , --home-dir HOME_DIR Répertoire d'accueil du nouveau compte.
  • -s , --shell SHELL Shell de connexion du nouveau compte.
  • -g , --gid GROUP Nom ou ID du groupe principal.
  • -G , --groups GROUPS Liste des groupes supplémentaires.
  • -u , --uid UID Spécifiez l'ID utilisateur.
  • -p , --password PASSWORD Mot de passe crypté du nouveau compte (ex. ubuntu ).

Définir le mot de passe de l'utilisateur par défaut

Pour définir le mot de passe de l'utilisateur, ajoutez -p "$(openssl passwd -1 ubuntu)" à useradd commande.

Vous pouvez également ajouter les lignes suivantes à votre Dockerfile :

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN echo 'ubuntu:ubuntu' | chpasswd

La première instruction shell est de s'assurer que -o pipefail l'option est activée avant RUN avec un tuyau dedans. En savoir plus :Hadolint :peluchez votre Dockerfile.


Pour éviter les questions interactives par adduser, vous pouvez l'appeler avec ces paramètres :

RUN adduser --disabled-password --gecos '' newuser

Le --gecos Le paramètre est utilisé pour définir les informations supplémentaires. Dans ce cas, il est simplement vide.

Sur les systèmes avec busybox (comme Alpine), utilisez

RUN adduser -D -g '' newuser

Voir l'utilisateur adduser de la boîte occupée


Linux
  1. Comment ajouter un utilisateur à un groupe sous Linux

  2. Comment ajouter des utilisateurs à Ubuntu ?

  3. Comment exécuter un programme dans un conteneur Docker ?

  4. Comment exécuter MySQL dans un conteneur Docker

  5. Comment exécuter une commande sur un conteneur Docker en cours d'exécution

Comment ajouter et supprimer des utilisateurs dans Debian

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment ajouter un volume à un conteneur Docker existant

Comment exécuter des conteneurs Docker

Comment créer/ajouter des utilisateurs sous Linux