Permisos ineficaces en contenedores de Linux

Permisos ineficaces en contenedores de Linux

Al configurar y ejecutar una instancia de Docker, al arrancar, nginx proporciona un 403 Forbiddenacceso a archivos estáticos.

En Dockerfile, uso el COPYcomando para mover todos los archivos a /var/www/app, luego uso el RUNcomando al chmoddirectorio estático para permitir que el www-datausuario lea los archivos.

Se Dockerfileve así:

...
COPY app /var/www/app
RUN chmod -R go+rX /var/www/app/static
...

Tras la investigación (ejecutando bash de forma interactiva en la instancia), descubrí que el usuario www-data no puede leer los archivos ni enumerar los directorios, a menos que el usuario root lo haga primero. Esto es lo que encuentro realmente confuso: es como si los permisos enumerados fueran completamente ineficaces hasta que el usuario root revisa los archivos.

root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js        
ls: cannot access /var/www/app/static/js: Permission denied
root@0e4b48a67a72:/# ls -la /var/www/app/static/js                  
total 100
drwxr-xr-x  2 root root  4096 Oct  9 02:40 .
drwxr-xr-x 10 root root  4096 Oct  9 02:40 ..
-rw-r--r--  1 root root 93868 Oct  6 13:39 jquery.js
root@0e4b48a67a72:/# sudo -u www-data ls -la /var/www/app/static/js
total 100
drwxr-xr-x  2 root root  4096 Oct  9 02:40 .
drwxr-xr-x 10 root root  4096 Oct  9 02:40 ..
-rw-r--r--  1 root root 93868 Oct  6 13:39 jquery.js

¿Cómo puede ser esto? ¿Por qué la ejecución lshace que aparentemente cambien los permisos efectivos?

Respuesta1

¿Usaste ADD en ese Dockerfile? Evite AGREGAR, porque después de esa instrucción todos los archivos y directorios nuevos se crean con un UID y GID de 0.

https://docs.docker.com/reference/builder/#add

información relacionada