![Что такое несетевой сокет домена Unix?](https://rvso.com/image/1671485/%D0%A7%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%20%D0%BD%D0%B5%D1%81%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9%20%D1%81%D0%BE%D0%BA%D0%B5%D1%82%20%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%B0%20Unix%3F.png)
я читаюРаскрыты незащищенные демоны 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»