que hub facil dockers desde crear contenedor container compose cero linux ubuntu docker dockerfile

linux - hub - dockers container download



Agregar usuario al contenedor Docker (7)

Tengo un contenedor acoplable con algunos procesos (uwsgi y apio) ejecutándose dentro. Quiero crear un usuario de apio y un usuario de uwsgi para estos procesos, así como un grupo de trabajadores al que pertenecerán, para poder asignar permisos.

Intenté agregar RUN adduser uwsgi y RUN adduser celery a mi Dockerfile, pero esto está causando problemas, ya que estos comandos solicitan información (he publicado las respuestas de la compilación a continuación).

¿Cuál es la mejor manera de agregar usuarios a un contenedor Docker para establecer permisos para los trabajadores que se ejecutan en el contenedor?

La imagen de My Docker está construida a partir de la base oficial Ubuntu14.04.

Aquí está la salida del Dockerfile cuando se ejecutan los comandos adduser:

Adding user `uwsgi'' ... Adding new group `uwsgi'' (1000) ... Adding new user `uwsgi'' (1000) with group `uwsgi'' ... Creating home directory `/home/uwsgi'' ... Copying files from `/etc/skel'' ... [91mEnter new UNIX password: Retype new UNIX password: [0m [91mpasswd: Authentication token manipulation error passwd: password unchanged [0m [91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563. [0m [91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564. [0m Try again? [y/N] Changing the user information for uwsgi Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: [91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589. [0m [91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590. [0m Is the information correct? [Y/n] ---> 258f2f2f13df Removing intermediate container 59948863162a Step 5 : RUN adduser celery ---> Running in be06f1e20f64 Adding user `celery'' ... Adding new group `celery'' (1001) ... Adding new user `celery'' (1001) with group `celery'' ... Creating home directory `/home/celery'' ... Copying files from `/etc/skel'' ... [91mEnter new UNIX password: Retype new UNIX password: [0m [91mpasswd: Authentication token manipulation error passwd: password unchanged [0m [91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563. [0m [91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564. [0m Try again? [y/N] Changing the user information for celery Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: [91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589. [0m [91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590. [0m Is the information correct? [Y/n]


Ubuntu

Pruebe las siguientes líneas en Dockerfile :

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

Opciones de useradd (ver: man useradd ):

  • -r , --system Crea una cuenta del sistema. ver: Implicaciones creando cuentas del sistema
  • -m , --create-home Crea el directorio de inicio del usuario.
  • -d , --home-dir HOME_DIR Directorio de inicio de la nueva cuenta.
  • -s , --shell SHELL inicio de sesión de la nueva cuenta.
  • -g , --gid GROUP Nombre o ID del grupo primario.
  • -G , --groups GROUPS Lista de grupos suplementarios.
  • -u , --uid UID Especifica la ID de usuario. ver: Comprender cómo funcionan uid y gid en los contenedores Docker
  • -p , --password PASSWORD Contraseña cifrada de la nueva cuenta (por ejemplo, ubuntu ).

    Para establecer la contraseña, agregue: -p "$(openssl passwd -1 ubuntu)" al comando anterior.


Agregar un usuario a Docker y ejecutar su aplicación con ese usuario es una muy buena práctica para el punto de vista de seguridad. Para hacer eso, 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 cómo copiar archivos de proyecto NodeJS, crear un grupo de usuarios y usuarios, asignar permisos al usuario para la carpeta del proyecto, cambiar al usuario recién creado y ejecutar la aplicación con ese usuario.


Agregue esta línea a su Dockerfile (puede ejecutar cualquier comando de Linux de esta manera)

RUN useradd --user-group --create-home --no-log-init --shell /bin/bash superset


El truco consiste en usar useradd lugar de su contenedor interactivo adduser . Normalmente creo usuarios con:

RUN useradd -ms /bin/bash newuser

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

Luego puede agregar:

USER newuser WORKDIR /home/newuser

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

docker run -t -i image newuser@131b7ad86360:~$

Es posible que newuser otorgar a newuser los permisos para ejecutar los programas que desea ejecutar antes de invocar el comando del usuario.

Usar usuarios no privilegiados 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 deberán volver a la raíz antes de poder ejecutar comandos con privilegios de superusuario.


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

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

El parámetro --gecos se usa para establecer la información adicional. En este caso, solo está vacío.

En sistemas con busybox (como Alpine), use

RUN adduser -D -g '''' newuser

Ver busybox adduser


Puede imitar el Dockerfile de código abierto, por ejemplo:

Nodo: node12-github

RUN useradd -ms /bin/bash yourNewUserName

superset: superset-github

RUN groupadd --gid 1000 node / && useradd --uid 1000 --gid node --shell /bin/bash --create-home node

Creo que es una buena forma de seguir el código abierto.


Todos tienen su favorito personal, y este es el mío:

RUN useradd --user-group --system --create-home --no-log-init app USER app

Referencia: man useradd

La línea RUN agregará la app usuario y grupo:

root@ef3e54b60048:/# id app uid=999(app) gid=999(app) groups=999(app)

Utilice un nombre más específico que la app si la imagen se va a reutilizar como imagen base. Como --shell /bin/bash aparte, incluya --shell /bin/bash si realmente lo necesita.

Crédito parcial: respuesta de Ryan M