Permissões ineficazes em contêineres Linux

Permissões ineficazes em contêineres Linux

Ao configurar e executar uma instância do Docker, na inicialização o nginx fornece uma mensagem 403 Forbiddenao acessar arquivos estáticos.

No Dockerfile, eu uso o COPYcomando para mover todos os arquivos para /var/www/app, depois uso o RUNcomando para chmodo diretório estático para permitir que o www-datausuário leia os arquivos.

Fica Dockerfileassim:

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

Após investigação (executando o bash interativamente na instância), descobri que o usuário www-data não pode ler os arquivos ou listar os diretórios, a menos que o usuário root faça isso primeiro. Isso é o que considero realmente confuso - é como se as permissões listadas fossem completamente ineficazes até que o usuário root examine os arquivos.

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

Como isso pode ser? Por que a execução lsfaz com que as permissões efetivas aparentemente mudem?

Responder1

Você usou ADD nesse Dockerfile? Evite ADD, pois após essa instrução todos os novos arquivos e diretórios são criados com UID e GID 0.

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

informação relacionada