Como o usuário não root consegue escutar na porta privilegiada

Como o usuário não root consegue escutar na porta privilegiada

Eu deveria obter uma exceção de ligação, em vez disso, ela é vinculada à porta privilegiada

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

Até tentei outra abordagem construindo umDockerfile

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

Tentei este também, mas ainda é capaz de vincular uma porta menor que 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

Responder1

O parâmetro de ajuste do kernel padrão net.ipv4.ip_unprivileged_port_startpara contêineres é definido como 0o que torna todas as portas no contêiner docker sem privilégios.

Todos os processos dentro do contêiner podem ser vinculados a qualquer porta (do contêiner), mesmo como um usuário sem privilégios.

Com relação à exposição de portas privilegiadas como um usuário não privilegiado no sistema operacional host, consultehttps://docs.docker.com/engine/security/rootless/#exposing-privileged-ports

informação relacionada