Cómo un usuario no root puede escuchar en el puerto de privilegios

Cómo un usuario no root puede escuchar en el puerto de privilegios

Se supone que debo obtener una excepción de vinculación en lugar de que sea vinculante en el puerto de privilegios.

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

Incluso lo intenté con otro enfoque construyendo unDockerfile

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

Probé este también, aún así es capaz de vincular un puerto inferior a 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

Respuesta1

El parámetro de ajuste del kernel predeterminado net.ipv4.ip_unprivileged_port_startpara contenedores está configurado en 0lo que hace que todos los puertos en el contenedor acoplable no tengan privilegios.

Todos los procesos dentro del contenedor pueden vincularse a cualquier puerto (del contenedor), incluso como usuario sin privilegios.

Con respecto a la exposición de puertos privilegiados como usuario sin privilegios en el sistema operativo host, consultehttps://docs.docker.com/engine/security/rootless/#exposing-privileged-ports

información relacionada