Что такое несетевой сокет домена Unix?

Что такое несетевой сокет домена Unix?

я читаюРаскрыты незащищенные демоны Docker

Там написано

Docker daemon creates a non-networked Unix domain socket at /var/run/docker.sock 

Что означает несетевой сокет домена Unix?

решение1

Это сокет, адрес которогопуть к файловой системеа не какой-то сетевой адрес. Например, вместо подключения к IP-адресу:порту, такому как 127.0.0.1:4567, программа «подключится» к специальному файлу /var/run/docker.sock.

(Однако фактический API практически идентичен для сокетов IP и Unix — программы используют одни и те же вызовы socket(), bind(), connect() для обоих типов. Им нужно только указать AF_UNIX(или AF_LOCAL) вместо обычного AF_INET[6]типа сокета. Это делает их очень распространенным выбором для внутренних коммуникаций. Фактически,большинство(Программы в вашей системе Linux взаимодействуют таким образом.)

Он «несетевой», поскольку сокет доступен только локально запущенным процессам. (Вы не можете использовать его через NFS или SSHFS.) В отличие от сокетов «IP-домена», которые можно привязать к localhostилилюбой адрес (например, в вашей связанной статье, где говорится о доступных извне IP-сокетах на порту 2375), сокет «домена Unix» гарантированно будет только локальным.

(Кроме того, сокеты Unix могут использовать права доступа к файлам для ограничения доступа к сокету — например, только для членов группы «docker» — и демон знает UID каждого подключающегося клиента. Наконец, конечно, сокет имеет надлежащееимя(так что у вас не будет двух разных программ, конкурирующих за один и тот же порт…)

Термин «домен» не имеет ничего общего с «системой доменных имен» Интернета и используется только в общем смысле «области» или «зоны» — насколько мне известно, «домен Unix» просто должен был означать «локально работающую ОС» (в отличие от «всех машин, подключенных к Интернету»), поскольку наличие этого механизмакак часть API сокетаизначально это была функция Unix. Лучше было бы назвать это "локальные сокеты", т.е. AF_LOCAL, но это не прижилось.

В Windows есть очень похожая функция, называемая «именованные каналы», например \\.\pipe\docker_engine. Именованные каналы Windows действительно работают больше как сокеты Unix, чем каналы Unix, однако программам по-прежнему необходимо использовать совершенно другой API для использования именованных каналов в Windows по сравнению с использованием сокетов (хотя в Win10 также есть сокеты AF_UNIX), и по-прежнему возможен доступ к незащищенным каналам через SMB.

решение2

Исходя из контекста это означает, что docker недоступен извне хоста (т.е. локальной и внешней сети), но«доступ могут получить только процессы [на той же машине] с правами root или членством в группе Docker»

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