Vamos a convertir este capítulo en un pequeño tutorial sobre SMB/CIFS. SMB/CIFS es el protocolo que las máquinas Windows 95/98 y NT usan para comunicarse con el servidor Samba y entre ellos. A alto nivel, la suite del protocolo SMB es relativamente simple. Incluye comandos para todas las operaciones de archivos e impresión que puedas necesitar hacer sobre un disco o impresora local, como:
Abrir y cerrar un fichero.
Crear y eliminar ficheros y directorios.
Leer y escribir sobre un fichero.
Buscar archivos.
Enviar y eliminar archivos a una cola de impresora.
Cada una de estas operaciones puede ser codificada en un mensaje SMB y transmitida hacia/desde un servidor. El nombre de SMB viene de su formato de datos: son versiones de las estructuras estandar de las llamadas al sistema DOS, o Server Message Blocks, rediseñadas para transmitir a otra máquina a través de una red.
Formato SMB
Richard Sharpe, del equipo de desarrollo de Samba, define SMB como un protocolo "petición-respuesta"3.2. En efecto, esto significa que un cliente envía una petición SMB a un servidor, y el servidor envía una respuesta SMB de vuelta al cliente. Raramente un servidor envía un mensaje que no es respuesta a la petición de un cliente.
Un mensaje SMB no es tan complejo como puedas pensar. Echemos un vistazo a la estructura interna de uno de estos mensajes. Este puede dividirse en dos partes: la cabecera (header), la cual es de tamaño fijo, y la cadena de comando (command string), cuyo tamaño puede variar en base al contenido del mensaje.
Formato de la Cabecera SMB
La Tabla 3.1. muestra el formato de una cabecera SMB. Los comandos SMB no necesitan usar todos los campos de la cabecera SMB. Por ejemplo, cuando un cliente inicialmente intenta conectar a un servidor, este todavía no tiene un valor de identificador de árbol ("tree identifier") (TID) -se asigna uno cuando se realiza una conexión con éxito-, así que se emplaza un TID nulo (0xFFFF) en el campo de la cabecera. Otros campos pueden ser rellenados con ceros cuando no se usan.
Los campos de la cabecera SMB se listan en la Tabla 3.1.
Table: Campos de la Cabecera SMB.
| Campo |
Tamaño (bytes) |
Descripción |
| 0xFF 'SMB' |
1 |
Identificador de Protocolo |
| COM |
1 |
Código Comando, desde 0x00 hasta 0xFF |
| RCLS |
1 |
Clase de Error |
| REH |
1 |
Reservado |
| ERR |
2 |
Código de Error |
| REB |
1 |
Reservado |
| RES |
14 |
Reservado |
| TID |
2 |
TID; un ID único para un recurso en uso por un cliente |
| PID |
2 |
ID de Proceso |
| UID |
2 |
ID de Usuario |
| MID |
2 |
Multiplex identifier; usado para rutar peticiones dentro de procesos |
Formato de Comando SMB
Inmediatamente después de la cabecera va un número variable de bytes que forman un comando o respuesta SMB. Cada comando, tal como "Open File" (identificador de campo COM: SMBopen) o "Get Print Queue" ( SMBsplretq ), tiene su propio conjunto de parámetros y datos. Al igual que en el caso de los campos en las cabeceras SMB, no todos los campos de comando necesitan estar rellenados, dependiendo de cada comando específico. Por ejemplo, el comando "Get Server Attributes" (SMBdskattr) establece los campos WCT y BCC a cero. Los campos del segmento de comando se muestran en la Tabla 3.2.
Table: Contenido de un Comando SMB.
| Campo |
Tamaño (bytes) |
Descripción |
| WCT |
1 |
Contador de Palabras |
| VWV |
Variable |
Parámetro de palabras (tamaño dado por WCT) |
| BCC |
2 |
Contador de byte de Parámetro |
| DATA |
Variable |
Dato (tamaño dado por BCC) |
No te preocupes si no comprendes cada uno de estos campos; no es necesario para usar Samba a un nivel de administración. Sin embargo, conocer esto te va a resultar útil cuando analices o depures mensajes del sistema. Te mostraremos alguno de los mensajes de sistema SMB más comunes que clientes y servidores envían usando una versión modificada de tcpdump más adelante en esta sección. (Si quieres un sniffer SMB con una interfaz gráfica, prueba "ethereal", que usa las librerías GTK; mira en la página web de Samba para más información sobre esta herramienta).
Si deseas más información sobre cada uno de los comandos del protocolo SMB, mira la documentación sobre SMB/CIFS en
ftp://ftp.microsoft.com/developr/drg/CIFS/.
Variaciones sobre SMB
El protocolo SMB ha sido extendido con nuevos comandos muchas veces desde su concepción. Cada nueva versión es compatible con las anteriores. Esto hace posible tener en una misma LAN varios clientes y servidores corriendo diferentes versiones del protocolo SMB al mismo tiempo.
La Tabla 3.3. muestra las mejores versiones del protocolo SMB. Dentro de cada "versión" de SMB hay muchas subversiones que incluyen comandos soportando versiones determinadas de los mejores sistemas operativos. El ID de cadena es usado por clientes y servidores para determinar qué nivel de protocolo usarán para hablar unos con otros.
Table: Dialectos del Protocolo SMB.
| Nombre Protocolo |
ID de Cadena |
Usado por |
| Core |
PC NETWORK PROGRAM 1.0 |
|
| Core Plus |
MICROSOFT NETWORKS 1.03 |
|
| LAN Manager 1.0 |
LANMAN1.0 |
|
| LAN Manager 2.0 |
LM1.2X002 |
|
| LAN Manager 2.1 |
LANMAN2.1 |
|
| NT LAN Manager 1.0 |
NT LM 0.12 |
Windows NT 4.0 |
| Samba's NT LM 0.12 |
Samba |
Samba |
| Common Internet File System |
CIFS 1.0 |
Windows 2000 |
Samba implementa la especificación NT LM 0.12 para NT LAN Manager 1.0. Este es compatible con todas las variantes de versiones anteriores. La especificación CIFS es, en realidad, LAN Manager 0.12 con unas cuantas adiciones específicas.
Clientes y Servidores SMB
Como mencionamos antes, SMB es un protocolo cliente/servidor. Esto significa que un cliente envía una petición a un servidor, el cual actúa en función de la petición y envía una respuesta. Sin embargo, los roles de cliente/servidor pueden invertirse frecuentemente, algunas veces dentro del contexto de una misma sesión SMB. Por ejemplo, considera dos computadoras Windows 95/98 como en la Figura 3.28. La computadora llamada WIZZIN comparte una impresora para la red, y la llamada ESCRIME comparte un directorio de disco. WIZZIN está en el papel de cliente cuando accede a la unidad de red de ESCRIME, y se pone en el papel de servidor cuando imprime un trabajo para ESCRIME.
Figure: Dos computadoras que comparten recursos para la red.
|
|
Esto nos lleva a un punto importante en la terminología Samba:
Un servidor es una máquina con un recurso compartido.
Un cliente es una máquina que quiere usar un recurso compartido.
Un servidor puede ser un cliente en cualquier momento.
Advierte que no hay implicaciones en cuanto a la cantidad de recursos que ofrece un servidor, o si tiene mayor capacidad de disco o velocidad de procesador. Un servidor podría ser un viejo 486 con una impresora conectada a él, o podría ser una estación UltraSparc con un servicio de disco de 20 gigabytes.
Los productos de Microsoft Windows contienen la tecnología cliente/servidor SMB incluídas en el sistema operativo. Wndows NT 4.0 usa un nuevo protocolo SMB distinto al de Windows para Grupos de Trabajo, y ofrece el valor añadido de la seguridad en la red, lo cual discutiremos en el Capítulo 6. En adición, hay un largo número de productos comerciales de servidores SMB disponibles para compañías tales como Sun, Compaq, SCO, Hewlett-Packard, Syntax, e IBM. Desafortunadamente, en la parte del cliente hay muy pocas ofertas,limitándose principalmente a productos de redes de equipos Digital , y por supuesto, Samba.
Una Simple Conexión SMB
Antes de dar por terminado este capítulo, echemos un vistazo a una simple conexión SMB. Lo que vamos a comentar ahora son algunos interesantes datos técnicos, que realmente no son necesarios para administrar Samba, así que si quieres, esto te lo puedes saltar. Presentamos esta información lo más desmenuzada posible para que te familiarices con la forma en que el protocolo SMB negocia conexiones con otras computadoras en la red.
Hay cuatro pasos que un cliente y un servidor deben completar en orden a establecer una conexión con un recurso:
Establecer una conexión virtual.
Negociar la variante de protocolo a usar para hablar entre ellos.
Establecer los parámetros de la sesión.
Realizar una conexión de árbol a un recurso (TID).
Examinaremos cada uno de estos pasos a través de los ojos de una útil herramienta que ya hemos mencionado anteriormente: el modificado tcpdump que está disponible desde el sitio web de Samba.
Puedes descargar este programa desde samba.org en el directorio
samba/ftp/tcpdump-smb; la última versión a la hora de escribir este manual era la 3.4-5. Usa este programa tal como usarías la aplicación estándar tcpdump, pero añade el switch -s 1500 para asegurarte de que obtienes todo el paquete y no sólo los primeros bytes del mismo.
Estableciendo una Conexión Virtual
Cuando un usuario realiza una primera petición para acceder a un disco de red o para enviar un trabajo a una impresora remota, NetBIOS se encarga de realizar una conexión (sesión). El resultado es un canal virtual bidireccional entre el cliente y el servidor. En realidad, sólo hay dos mensajes que el cliente y el servidor necesitan para establecer esa conexión. Esto se muestra en el siguiente ejemplo de petición y respuesta en una sesión, tal como saldría de la catpura a través de tcpdump :
>>> NBT Packet
NBT Session Request
Flags=0x81000044
Destination=ESCRIME NameType=0x20 (Server)
Source=WIZZIN NameType=0x00 (Workstation)
>>> NBT Packet
NBT Session
Granted Flags=0x82000000
...3.2
Mira en http://anu.samba.org/cifs/docs/what-is-smb.html el excelente sumario de Richard sobre SMB.