Как пользователь без прав root может прослушивать привилегированный порт

Как пользователь без прав root может прослушивать привилегированный порт

Я должен был получить исключение привязки, вместо этого он привязывается к порту привилегий

% 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
~ $ %

Даже пробовали другой подход, строяDockerfile

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

Пробовал и это, все равно удается привязать порт меньше 1024

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

решение1

Параметр настройки ядра по умолчанию net.ipv4.ip_unprivileged_port_startдля контейнеров установлен на значение, 0которое делает все порты в контейнере Docker непривилегированными.

Все процессы внутри контейнера могут привязываться к любому порту (контейнера) даже как непривилегированный пользователь.

Что касается предоставления привилегированных портов непривилегированному пользователю в ОС хоста, см.https://docs.docker.com/engine/security/rootless/#exposing-privileged-ports

Связанный контент