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 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]
fuente
useradd --create-home --shell /bin/bash
Es más comprensible / legible para los compañeros de trabajo.RUN echo 'newuser:newpassword' | chpasswd
--no-log-init
opción deuseradd
.USER newuser
. Si también necesita que el usuario tenga privilegios de root, también puede incluiradduser <username> sudo
./bin/sh: useradd: not found
linux alpinoPara evitar las preguntas interactivas de adduser, puede llamarlo con estos parámetros:
El
--gecos
parámetro se usa para establecer la información adicional. En este caso, solo está vacío.En sistemas con busybox (como Alpine), use
Ver busybox adduser
fuente
adduser
la solución de alto nivel generalmente se prefiere al uso de funciones de bajo nivel comouseradd
.adduser: unrecognized option: gecos
Esto no parece funcionar en Alpine.Ubuntu
Pruebe las siguientes líneas en
Dockerfile
:useradd
opciones (ver:)man useradd
:-r
,--system
Crear una cuenta del sistema. ver: Implicaciones creando cuentas 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 primario.-G
,--groups GROUPS
Lista de grupos suplementarios.-u
,--uid UID
Especifique 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 (pubuntu
. Ej .).Establecer contraseña de usuario predeterminada
Para establecer la contraseña del usuario, agregue
-p "$(openssl passwd -1 ubuntu)"
aluseradd
comando.Alternativamente, agregue las siguientes líneas a su
Dockerfile
:La primera instrucción de shell es asegurarse de que esa
-o pipefail
opción esté habilitada antesRUN
con una tubería. Leer más: Hadolint: Cubriendo tu Dockerfile .fuente
root
grupo no indica que tienen acceso de root, solo tienen más acceso de lectura a algunos archivos (como registros), lo cual es útil, pero depende del proyecto.Agregar un usuario en 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:
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.
fuente
Puede imitar el Dockerfile de código abierto, por ejemplo:
Nodo: nodo12-github
superset: superset-github
Creo que es una buena forma de seguir el código abierto.
fuente
Todos tienen su favorito personal, y este es el mío:
Referencia: man useradd
La
RUN
línea agregará el usuario y el grupoapp
:Utilice un nombre más específico que
app
si la imagen se va a reutilizar como imagen base. Como comentario, inclúyalo--shell /bin/bash
si realmente lo necesita.Crédito parcial: respuesta de Ryan M
fuente
Alternativamente, puedes hacer así.
El primer comando crea un grupo llamado demo . El segundo comando crea un usuario de demostración y lo agrega al grupo de demostración creado anteriormente .
Banderas significa:
fuente
Agregue esta línea a su Dockerfile (puede ejecutar cualquier comando de Linux de esta manera)
fuente