GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo agregar usuarios al contenedor Docker?

El truco es usar useradd en lugar de su contenedor interactivo adduser .Yo suelo crear usuarios con:

RUN useradd -ms /bin/bash newuser

que crea un directorio de inicio para el usuario y garantiza que bash sea el shell predeterminado.

A continuación, puede agregar:

USER newuser
WORKDIR /home/newuser

a su archivo acoplable. Todos los comandos posteriores, así como las sesiones interactivas, se ejecutarán como usuario newuser :

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

Puede que tengas que dar newuser los permisos para ejecutar los programas que desea ejecutar antes de invocar el comando de usuario.

Usar usuarios sin privilegios dentro de contenedores es una buena idea por razones de seguridad. También tiene algunos inconvenientes. Lo que es más importante, las personas que obtengan imágenes de su imagen tendrán que volver a la raíz antes de poder ejecutar comandos con privilegios de superusuario.


Agregar un usuario en la ventana acoplable y ejecutar su aplicación con ese usuario es una muy buena práctica desde el punto de vista de la seguridad. Para hacerlo, recomendaría los siguientes pasos:

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"]

Los pasos anteriores son un ejemplo completo de la copia de archivos de proyecto de NodeJS, la creación de un grupo de usuarios y un usuario, la asignación de permisos al usuario para la carpeta del proyecto, el cambio al usuario recién creado y la ejecución de la aplicación con ese usuario.


Ubuntu

Pruebe las siguientes líneas en Dockerfile :

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

useradd opciones (ver:man useradd ):

  • -r , --system Cree una cuenta del sistema.
  • -m , --create-home Cree el directorio de inicio del usuario.
  • -d , --home-dir HOME_DIR Directorio de inicio de la nueva cuenta.
  • -s , --shell SHELL Shell de inicio de sesión de la nueva cuenta.
  • -g , --gid GROUP Nombre o ID del grupo principal.
  • -G , --groups GROUPS Lista de grupos complementarios.
  • -u , --uid UID Especifique el ID de usuario.
  • -p , --password PASSWORD Contraseña cifrada de la nueva cuenta (por ejemplo, ubuntu ).

Configuración de la contraseña de usuario predeterminada

Para establecer la contraseña de usuario, agregue -p "$(openssl passwd -1 ubuntu)" a useradd comando.

Alternativamente, agregue las siguientes líneas a su Dockerfile :

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

La primera instrucción de shell es asegurarse de que -o pipefail la opción está habilitada antes de RUN con una pipa dentro. Leer más:Hadolint:Linting su Dockerfile.


Para evitar las preguntas interactivas de adduser, puede llamarlo con estos parámetros:

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

El --gecos El parámetro se utiliza para configurar la información adicional. En este caso, simplemente está vacío.

En sistemas con busybox (como Alpine), use

RUN adduser -D -g '' newuser

Ver el usuario adicional de busybox


Linux
  1. Cómo agregar un usuario a un grupo en Linux

  2. ¿Cómo agregar usuarios a Ubuntu?

  3. ¿Cómo ejecutar un programa dentro de un contenedor Docker?

  4. Cómo ejecutar MySQL en un contenedor Docker

  5. Cómo ejecutar un trabajo cron dentro de un contenedor docker

Cómo agregar y eliminar usuarios en Debian

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo agregar un volumen a un contenedor Docker existente

Cómo ejecutar contenedores Docker

Cómo crear/agregar usuarios en Linux