Articulo de referencia

KSMBD

KSMBD es un servidor CIFS / SMB de código abierto integrado en el kernel, creado por Namjae Jeon para el kernel de Linux . Inicialmente, su objetivo era mejorar el rendimiento d...

KSMBD es un servidor CIFS / SMB de código abierto integrado en el kernel, creado por Namjae Jeon para el kernel de Linux . Inicialmente, su objetivo era mejorar el rendimiento de E/S de archivos, pero su propósito principal era incorporar nuevas funcionalidades que facilitaran su desarrollo y mantenimiento dentro del kernel, exponiendo completamente sus capas. Se observa una tendencia hacia la integración de Samba en algunos módulos del kernel para incorporar funciones como el acceso directo a memoria remota (RDMA), logrando así una mejora real del rendimiento.

Características

Implementado

  • Protocolos SMB1 (CIFS) y SMB2/3 para compartir archivos básicos.
  • Solicitudes compuestas
  • bloqueo/arrendamiento
  • MTU grande (créditos múltiples)
  • NTLM / NTLMv2
  • Negociación de automóviles
  • Firma HMAC-SHA256
  • Negociar de forma segura
  • Actualización de firma
  • Integridad de preautenticación (SMB 3.1.1, Windows 10)
  • Cifrado SMB (CCM, GCM)
  • SMB directo (RDMA)
  • WinACL (Descriptor de seguridad)
  • Kerberos
  • Arrendamiento de directorio
  • Multicanal
  • Mango duradero y v2

Planificado

  • Identificadores persistentes
  • Soporte de clúster
  • SCSI sobre SMB3

Arquitectura

El subconjunto de operaciones relacionadas con el rendimiento se encuentra en el espacio del kernel, mientras que el otro subconjunto, que no está directamente relacionado con el rendimiento, se encuentra en el espacio de usuario. Por lo tanto, la gestión de DCE/RPC, que históricamente ha provocado numerosos problemas de desbordamiento de búfer y vulnerabilidades de seguridad, así como la gestión de winreg y de cuentas de usuario, se implementan en el espacio de usuario mediante ksmbd.mountd . Las operaciones de archivo relacionadas con el rendimiento (abrir, leer, escribir, cerrar, etc.) se encuentran en el espacio del kernel ( ksmbd ). Esto también facilita la integración con la interfaz VFS para todas las operaciones de archivo.

ksmbd (demonio del kernel)

Cuando se inicia el demonio del servidor, se crea un hilo de creación ( ksmbd /0) durante la inicialización y se abre un puerto dedicado (445) para escuchar las solicitudes SMB. Cada vez que un nuevo cliente realiza una solicitud, el hilo de creación acepta la conexión y crea un nuevo hilo para un canal de comunicación dedicado entre el cliente y el servidor. Esto permite el procesamiento paralelo de las solicitudes SMB (comandos) de los clientes, así como la creación de nuevas conexiones. Cada instancia se denomina ksmbd/1~n para indicar los clientes conectados. Según el tipo de solicitud SMB, cada nuevo hilo puede decidir pasar los comandos al espacio de usuario ( ksmbd.mountd ). Actualmente, los comandos DCE/RPC se gestionan a través del espacio de usuario.

Para aprovechar al máximo el kernel de Linux, se optó por procesar los comandos como tareas predeterminadas que se ejecutan en los manejadores de los subprocesos kworker predeterminados . Esto permite la multiplexación de los manejadores, ya que el kernel se encarga de iniciar subprocesos adicionales si la carga aumenta y, viceversa, si la carga disminuye, destruye dichos subprocesos. Así, una vez establecida la conexión con el cliente, una tarea ksmbd dedicada se encarga por completo de la recepción y el análisis de los comandos SMB. Cada uno de los comandos recibidos de los múltiples clientes se procesa en paralelo. Tras recibir cada comando, se prepara una tarea del kernel independiente para cada uno, que se encola para ser procesada por los subprocesos kworker predeterminados dentro del kernel. De esta forma, cada tarea SMB se encola en los subprocesos kworker . Esto permite que el kernel predeterminado gestione de forma óptima el beneficio del reparto de carga y optimiza el rendimiento del cliente al procesar sus comandos en paralelo.

ksmbd.mountd (demonio de espacio de usuario)

ksmbd.mountd es un proceso de espacio de usuario que transfiere la cuenta de usuario y la contraseña registradas mediante ksmbd.adduser (parte de las utilidades para el espacio de usuario). Además, permite compartir parámetros de información analizados desde smb.conf a la capa de exportación smb en el kernel. Para la parte de ejecución, tiene un demonio que se ejecuta continuamente y se conecta a la interfaz del kernel mediante un socket netlink, esperando las solicitudes (dcerpc y winreg). Gestiona las llamadas RPC (al menos unas pocas docenas) que son más importantes para el servidor de archivos desde NetShareEnum y NetServerGetInfo, así como varias llamadas relacionadas con DFS que un servidor debe implementar. La respuesta completa de DCE/RPC se prepara desde el espacio de usuario y se pasa al hilo del kernel asociado para el cliente.

Véase también

Referencias

  • https://github.com/cifsd-team/ksmbd/blob/master/README.md
  • Manual de usuario  : https://github.com/namjaejeon/Documents/blob/master/CIFSD_User_Guide_v1.0.pdf
  • ksmbd en GitHub
  • ksmbd-tools en GitHub
  • INTRODUCCIÓN DEL SERVIDOR MB3 INTEGRADO EN EL NÚCLEO LLAMADO CIFSD, SambaXP 2019 (05-06-2019)
  • PRESENTACIÓN DEL SERVIDOR MB3 IN-KERNELS LLAMADO CIFSD, Conferencia de Desarrolladores de Almacenamiento 2019 (23-09-2019)