Linux 컨테이너의 비효과적인 권한

Linux 컨테이너의 비효과적인 권한

Docker 인스턴스를 설정하고 실행할 때 부팅 시 nginx는 403 Forbidden정적 파일에 액세스할 때 다음을 제공합니다.

에서는 명령 Dockerfile을 사용하여 COPY모든 파일을 로 이동한 다음 사용자가 파일을 읽을 수 있도록 정적 디렉터리 에 명령을 /var/www/app사용합니다 .RUNchmodwww-data

모양 Dockerfile은 다음과 같습니다.

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

조사 결과(인스턴스에서 대화식으로 bash 실행) 루트 사용자가 먼저 수행하지 않는 한 www-data 사용자는 파일을 읽거나 디렉터리를 나열할 수 없다는 사실을 발견했습니다. 이것이 제가 정말 혼란스럽게 생각하는 점입니다. 마치 루트 사용자가 파일을 검토할 때까지는 나열된 권한이 완전히 효과가 없는 것처럼 보입니다.

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

어떻게 이럴 수있어? 실행하면 ls유효 권한이 명백하게 변경되는 이유는 무엇입니까?

답변1

해당 Dockerfile에서 ADD를 사용하셨나요? ADD를 피하세요. 해당 명령 이후에는 모든 새 파일과 디렉터리가 UID와 GID 0으로 생성되기 때문입니다.

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

관련 정보