Ich sollte eine Bind-Ausnahme erhalten, stattdessen ist es eine Bindung an den privilegierten Port
% docker run --rm -u nobody alpine nc -l 0.0.0.0 443
% docker exec -it b2b471d05398 sh
~ $ id
uid=65534(nobody) gid=65534(nobody)
~ $ ps
PID USER TIME COMMAND
1 nobody 0:00 nc -l 0.0.0.0 443
8 nobody 0:00 sh
15 nobody 0:00 ps
~ $ %
Habe es sogar mit einem anderen Ansatz versucht, indem ich eineDockerfile
FROM python:latest
COPY index.html /
EXPOSE 80
USER nobody
CMD python -m http.server 80
docker build -t test .
docker run --rm -u nobody test
~ % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b40c6c33a187 test "/bin/sh -c 'python …" 28 seconds ago Up 27 seconds 80/tcp practical_lumiere
Habe das auch probiert, es ist immer noch in der Lage, Ports unter 1024 zu binden
docker run --rm -u nobody --cap-drop=SETUID --cap-drop=NET_BIND_SERVICE --cap-drop=SETFCAP --cap-drop=NET_RAW alpine nc -l 0.0.0.0 443
Antwort1
Der Standard-Kernel-Tuning-Parameter net.ipv4.ip_unprivileged_port_start
für Container ist auf eingestellt, 0
wodurch alle Ports im Docker-Container nicht privilegiert werden.
Alle Prozesse innerhalb des Containers können sich an jeden Port (des Containers) binden, auch als nicht privilegierter Benutzer.
Informationen zum Freigeben privilegierter Ports als nicht privilegierter Benutzer auf dem Host-Betriebssystem finden Sie unterhttps://docs.docker.com/engine/security/rootless/#exposing-privileged-ports