Socket Unix

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

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.

En adición al 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.[1]​ Esto puede ser utilizado para implementar un formulario rudimentario de seguridad basada en capacidades. [2]​ 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

Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

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.

Referencias[editar]

  1. «Archive of the "Postfix Discussions" mailing list». 30 de septiembre de 2000. Consultado el 29 de septiembre de 2014. 
  2. «"Secure Programming for Linux and Unix HOWTO", Section 3.4 "Sockets and Network Connections"». dwheeler.com. David A. Wheeler. 22 de agosto de 2004. Consultado el 29 de septiembre de 2014. 

Enlaces externos[editar]

  • cmsg(3) – – Funciones de bibliotecas en el manual del programador de Linux (en inglés)