Ineffektive Berechtigungen in Linux-Containern

Ineffektive Berechtigungen in Linux-Containern

Beim Einrichten und Ausführen einer Docker-Instanz gibt nginx beim Booten einen 403 ForbiddenZugriff auf statische Dateien aus.

Im Dockerfileverwende ich den COPYBefehl, um alle Dateien nach zu verschieben /var/www/app, dann verwende ich den RUNBefehl für chmoddas statische Verzeichnis, um dem www-dataBenutzer das Lesen der Dateien zu ermöglichen.

Das Dockerfilesieht so aus:

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

Bei der Untersuchung (durch interaktives Ausführen von Bash auf der Instanz) stellte ich fest, dass der Benutzer www-data die Dateien nicht lesen oder die Verzeichnisse nicht auflisten kann, es sei denn, der Root-Benutzer tut dies zuerst. Das finde ich wirklich verwirrend – es ist, als ob die aufgelisteten Berechtigungen völlig wirkungslos wären, bis der Root-Benutzer die Dateien überprüft.

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

Wie kann das sein? Warum lsführt das Ausführen scheinbar dazu, dass sich die effektiven Berechtigungen ändern?

Antwort1

Haben Sie in diesem Dockerfile ADD verwendet? Vermeiden Sie ADD, da nach dieser Anweisung alle neuen Dateien und Verzeichnisse mit einer UID und GID von 0 erstellt werden.

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

verwandte Informationen