Estou lendo Unsecured daemons docker revelados
Diz
Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock
O que o soquete de domínio Unix não conectado à rede denota?
Estou lendo Unsecured daemons docker revelados
Diz
Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock
O que o soquete de domínio Unix não conectado à rede denota?
É um soquete cujo endereço é um caminho do sistema de arquivos em vez de algum tipo de endereço de rede. Por exemplo, em vez de se conectar a um endereço IP:porta como
127.0.0.1:4567
, o programa "conectará" ao arquivo especial/var/run/docker.sock
.(Entretanto, a API real é quase idêntica entre sockets IP e Unix – os programas usam as mesmas chamadas socket(), bind(), connect() para ambos os tipos. Eles só precisam especificar
AF_UNIX
(ou AF_LOCAL) ao invés do usualAF_INET[6]
como o tipo de soquete. Isso os torna uma escolha muito comum para comunicações internas. Na verdade, a maioria dos programas em seu sistema Linux se comunica dessa maneira.)É "sem rede" porque o soquete só é acessível a processos em execução localmente. (Você não pode usá-lo via NFS ou SSHFS.) Ao contrário dos soquetes de "domínio IP" que podem ser vinculados ao host local ou a qualquer endereço (como em seu artigo vinculado que fala sobre soquetes IP acessíveis externamente na porta 2375), um "Unix domain" é garantido como apenas local.
(Além disso, soquetes Unix podem usar permissões de arquivo para restringir o acesso ao soquete – por exemplo, apenas para membros do grupo 'docker' – e o daemon conhece o UID de cada cliente conectado. Finalmente, é claro, o soquete tem um nome próprio então você não terá dois programas diferentes lutando pela mesma porta…)
O termo 'domínio' não tem nada a ver com o "Domain Name System" da Internet e é usado apenas no sentido genérico de "reino" ou "área" - até onde eu sei, 'domínio Unix' deveria significar simplesmente "o SO executando localmente" (em oposição a "todas as máquinas conectadas à Internet"), porque ter esse mecanismo como parte da API de soquete era de fato originalmente um recurso do Unix. Um nome melhor seria "sockets locais", ou seja, AF_LOCAL, mas isso não funcionou.
O Windows tem um recurso muito semelhante chamado "canais nomeados", por exemplo,
\\.\pipe\docker_engine
. Os pipes nomeados do Windows realmente funcionam mais como soquetes Unix do que pipes Unix - no entanto, os programas ainda precisam usar uma API completamente diferente para usar pipes nomeados no Windows em comparação com o uso de soquetes (embora o Win10 também tenha soquetes AF_UNIX), e ainda é possível acessar tubulações não seguras via SMB.Com base no contexto, significa que o docker não é acessível de fora do host (ou seja, rede local e externa), mas "somente processos [na mesma máquina] com permissão de root ou associação ao grupo do Docker podem acessar"