Linux 容器中的無效權限

Linux 容器中的無效權限

設定和執行 Docker 執行個體時,啟動時 nginx 會403 Forbidden在存取靜態檔案時給予 。

在 中Dockerfile,我使用COPY命令將所有檔案移動到/var/www/app,然後使用命令RUN移動到chmod靜態目錄以使用戶能夠www-data讀取檔案。

看起來Dockerfile像這樣:

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

經過調查(在實例上以互動方式運行 bash),我發現 www-data 使用者無法讀取檔案或列出目錄,除非 root 使用者首先執行此操作。這就是我覺得真正令人困惑的地方 - 就好像列出的權限完全無效,直到 root 用戶查看文件為止。

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

相關內容