Estoy leyendoSe revelan demonios acoplables no seguros
Dice
Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock
¿Qué denota el socket de dominio Unix no conectado en red?
Respuesta1
Es un socket cuya dirección es unruta del sistema de archivosen lugar de alguna forma de dirección de red. Por ejemplo, en lugar de conectarse a una dirección IP:puerto como 127.0.0.1:4567
, el programa se "conectará" al archivo especial /var/run/docker.sock
.
(Sin embargo, la API real es casi idéntica entre los sockets IP y Unix: los programas usan las mismas llamadas socket(), bind(), connect() para ambos tipos. Solo necesitan especificar AF_UNIX
(o AF_LOCAL) en lugar de lo habitual AF_INET[6]
como tipo de socket Esto los convierte en una opción muy común para las comunicaciones internas.mayoríaLos programas en su sistema Linux se comunican de esta manera.)
Está "no conectado en red" porque solo los procesos que se ejecutan localmente pueden acceder al socket. (No puede usarlo a través de NFS o SSHFS). A diferencia de los sockets de "dominio IP" que pueden vincularse a localhostocualquier dirección (como en su artículo vinculado que habla sobre sockets IP accesibles externamente en el puerto 2375), se garantiza que un socket de "dominio Unix" será solo local.
(Además, los sockets Unix pueden usar permisos de archivos para restringir el acceso al socket – por ejemplo, sólo a los miembros del grupo 'docker' – y el demonio conoce el UID de cada cliente que se conecta. Finalmente, por supuesto, el socket tiene unnombreasí no tendrás dos programas diferentes peleándose por el mismo puerto…)
El término 'dominio' no tiene nada que ver con el "Sistema de nombres de dominio" de Internet y sólo se utiliza en el sentido genérico de "reino" o "área"; hasta donde yo sé, se suponía que "dominio Unix" simplemente significaba "el sistema operativo que se ejecuta localmente" (a diferencia de "todas las máquinas conectadas a Internet"), porque tener este mecanismocomo parte de la API del socketDe hecho, originalmente era una característica de Unix. Un nombre mejor sería "sockets locales", es decir, AF_LOCAL, pero no funcionó.
Windows tiene una característica muy similar llamada "canalizaciones con nombre", por ejemplo \\.\pipe\docker_engine
. De hecho, las canalizaciones con nombre de Windows funcionan más como sockets Unix que como canalizaciones Unix; sin embargo, los programas aún necesitan usar una API completamente diferente para usar canalizaciones con nombre en Windows en comparación con el uso de sockets (aunque Win10 también tiene sockets AF_UNIX), y aún es posible acceder Tuberías no aseguradas a través de SMB.
Respuesta2
Según el contexto, significa que no se puede acceder a Docker desde fuera del host (es decir, la red local y externa), pero"solo pueden acceder los procesos [en la misma máquina] con permiso de root o membresía en un grupo Docker"