Socket Unix
# Socket Unix

Un socket de dominio UNIX (UDS) o socket IPC (socket de comunicación interprocesos) es un socket virtual, similar a un socket de Internet que se utiliza en los sistemas operativos POSIX para comunicación entre procesos. Estas conexiones aparecen como flujos de bytes, al igual que las conexiones de red, pero todos los datos se mantienen dentro de la computadora local.

Los Sockets de dominio UNIX utilizan el sistema de archivos como su dirección de espacio de nombres, es decir, son vistos por los procesos como archivos de un sistema de archivos. Esto permite que dos procesos distintos referencien y abran el mismo socket con el fin de comunicarse. Sin embargo, la comunicación real (el intercambio de datos) no utiliza el sistema de ficheros, sino buffers de memoria del núcleo.

Además del envío de datos, los procesos pueden enviar descriptores de archivos a una conexión de socket de dominio UNIX mediante las llamadas del sistema sendmsg y recvmsg. Esto permite que los procesos de envío concedan al proceso de recepción acceso a un descriptor de archivo para el cual el proceso de recepción no tiene acceso. Esto puede ser utilizado para implementar un formulario rudimentario de seguridad basada en capacidades. Por ejemplo, esto le permite al analizador del antivirus ClamAV ejecutar un demonio sin privilegios en Linux o BSD, aunque puede enviar cualquier archivo al socket del demonio.

Un ejemplo simple para crear un socket es cuando se desea multiplexar conexiones SSH por una sola conexión TCP:

nano ~/.ssh/config

La directiva “ControlMaster” debe establecerse a “auto” para activar el multiplexado siempre y cuando sea posible. La directiva “ControlPath” establecerá el camino del socket de control. La primera sesión establecida creará dicho socket y las sesiones subsecuentes serán capaces de encontrarlo ya que está etiquetado por nombre de usuario, host y puerto.

Al establecer la directiva “ControlPersist” a “1” permitirá que la conexión inicial esté en segundo plano. El número 1, indica que la conexión TCP debe terminar automáticamente un segundo después que la conexión SSH es cerrada.

