terminal-comandos

Este artículo explica cómo listar todos los sockets Unix abiertos en un sistema GNU/Linux utilizando la herramienta netstat.

En los sistemas operativos de la familia Unix, los procesos que conviven en un mismo sistema local pueden comunicarse e intercambiar información de muchas formas diferentes (IPC): archivos, señales, sockets, cola de mensajes, pipes, memoria compartida, sistemas de pasaje de mensajes (por ejemplo D-Bus), e incluso se podrían utilizar bases de datos o cualquier otro mecanismo de IPC ad-hoc.

Sin embargo típicamente se utilizan sockets, especialmente para comunicar procesos heterogéneos e independientes. Es el caso de la comunicación entre cualquier aplicación (PHP/Java/Python) y el motor de bases de datos (MySQL/Postgres), o un servidor HTTP (Nginx/Apache) y un servidor de aplicación CGI. En estos entornos lo típico es utilizar network sockets, ya que son la mejor alternativa para comunicar procesos en sistemas separados a través de una red. Pero si ambos procesos conviven en el mismo sistema, es posible utilizar sockets Unix en lugar de network sockets.

Los sockets Unix son idénticos a los network sockets, excepto que en lugar de pasar por la pila de red, toda la comunicación se resuelve internamente en el kernel. Por otro lado, el punto de comunicación (endpoint) de un socket Unix se define a través de un archivo en lugar de a través de un puerto TCP o UDP. Y, a diferencia de un network socket, esto tiene la ventaja de impedir toda comunicación desde el exterior. Sólo hace falta que el proceso que inicie la comunicación tenga los permisos de acceso necesarios al archivo correspondiente al socket Unix abierto por el proceso esperando conexiones entrantes.

Ahora bien, ¿cómo es posible encontrar todos los archivos correspondientes a sockets Unix abiertos? Simplemente utilizando la herramienta netstat:

# netstat -xl

Por ejemplo:

root@linuxito:~# netstat -xl
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     2063883  /var/run/php5-fpm.sock
unix  2      [ ACC ]     STREAM     LISTENING     1926667  @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     2060675  /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     1939177  /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     1683596028 /var/run/php7-fpm.sock

Además, si se agrega la opción -p es posible obtener el pid de proceso y nombre del programa dueño de cada socket, al igual que con los sockets TCP o UDP.

Para más información, recurrir a las páginas de manual netstat(8) y unix(7):

man 8 netstat
man 7 unix

 

Fuente: linuxito

¿Quién está en línea?

Hay 12240 invitados y ningún miembro en línea