El Protocolo SMB y NFS

download El Protocolo SMB y NFS

of 8

Transcript of El Protocolo SMB y NFS

  • El protocolo SMB

    Puesto que Samba es, fundamentalmente, una implementacin para Unix del protocolo

    SMB, quizs la mejor forma de entender Samba es comenzar por describir SMB con un

    poco ms de detalle. Esta seccin realiza una pequea revisin de este protocolo.

    SMB es un protocolo de comunicacin de alto nivel que puede implementarse sobre

    diversos protocolos como TCP/IP, NetBEUI y IPX/SPX, tal como muestra la Figura 4.1,

    Protocolos sobre los que puede implementarse SMB., junto con la ubicacin de dichos protocolos en los niveles OSI y en la pila TCP/IP. Entre todas esas alternativas, tanto en el

    caso de Samba como de Windows 2000/XP, SMB se implementa habitualmente encima de

    NetBIOS sobre TCP/IP (esta alternativa se ha convertido en el estndar de facto para

    compartir recursos entre sistemas Windows). Sin embargo, no incidiremos ms en los

    protocolos que soportan SMB o en su implementacin, puesto que todo ello queda fuera del

    contexto de este tema.

    Protocolos sobre los que puede implementarse SMB.

    Histricamente, este protocolo fue desarrollado inicialmente por IBM como el IBM PC

    Network SMB Protocol o Core Protocol a principios de los aos 80. Desde entonces,

    diversos fabricantes (especialmente Microsoft) han ido ampliando su funcionalidad

    progresivamente, creando diferentes variantes (versiones) de SMB. Desafortunadamente,

    en ocasiones el cambio de versin ha conllevado el rebautizar el propio protocolo. En este

    sentido, SMB ha recibido, entre otros,los siguientes nombres: Core Protocol, DOS Lan

    Manager, LAN Manager, NTLM (NT Lan Manager), y en los ltimos aos, CIFS

    (Common Internet File System). Todos ellos, por tanto, hacen referencia a SMB, aunque se

    diferencien en algunos detalles de su funcionalidad y/o implementacin.

    Si nos fijamos en su interfaz, SMB es un protocolo de tipo cliente/servidor, donde el

    ordenador "servidor" ofrece recursos (archivos, impresoras, etc.) que pueden ser utilizados

    remotamente por los ordenadores "cliente" a travs de la red. Asimismo, es un protocolo de

    los denominados peticin/respuesta, indicando que las comunicaciones se inician siempre

    desde el cliente como una peticin de servicio al servidor (dicha peticin se denomina

    precisamente SMB), que la procesa y retorna una respuesta a dicho cliente. (En realidad,

    existe un caso en que el servidor enva un mensaje al cliente sin haber recibido una peticin

    de ste, pero la discusin del protocolo a ese nivel queda fuera del mbito de este texto). La

    respuesta del servidor puede ser positiva (con el resultado de procesar la peticin del

    cliente) o negativa (mensaje de error), en funcin del tipo de peticin, la disponibilidad del

    recurso, el nivel de acceso (permisos) del cliente, etc.

    El siguiente aspecto relevante de SMB es saber qu mecanismos de autentificacin soporta

    este protocolo para controlar el acceso del cliente a los recursos compartidos. En concreto,

    SMB soporta dos modos de autentificacin alternativos, denominados share y user:

    Cuando compartimos un recurso en modo share, la proteccin de dicho recurso

    recae en una contrasea que asociamos al mismo, de forma que cualquier usuario de

  • un sistema cliente remoto que conozca dicha palabra de paso podr acceder sin

    mayores restricciones al recurso (este es el mecanismo de autentificacin por

    defecto en las implemementaciones de SMB para Windows 9X, por ejemplo).

    Sin embargo, en modo user, el servidor recibe incialmente del sistema cliente unas

    credenciales de usuario (nombre, dominio y contrasea), que debe autentificar para

    autorizar el acceso al recurso. Concretamente, si el dominio de las credenciales es

    conocido, la autentificacin se delega a algn controlador de dicho dominio; y en

    caso contrario, el usuario y la contrasea se autentifican contra la base de datos

    local del equipo servidor. En cualquier caso, en modo user, el control de acceso

    sobre el recurso se realiza en funcin de qu permisos posee sobre dicho recurso el

    usuario cuyas credenciales se han enviado desde el cliente. En otras palabras, una

    vez el sistema servidor ha identificado y autentificado al usuario que desea

    conectarse al recurso, este sistema dispone ya de un SID vlido con el que puede

    contrastar los permisos que dicho SID posee sobre el recurso. Es conveniente

    recordar en este punto que si el recurso en cuestin es una carpeta compartida, se

    tienen en cuenta tanto los permisos del recurso, como los permisos NTFS de la

    carpeta y sus archivos. El modo user es el mecanismo de autentificacin por defecto

    en las versiones de SMB de sistemas Windows NT y posteriores.

    Finalmente, revisaremos brevemente el funcionamiento interno del protocolo SMB,

    utilizando para ello un ejemplo concreto. Supongamos que un sistema cliente desea acceder

    a una carpeta compartida que exporta el servidor (en modo user). En este escenario, se

    producira el siguiente intercambio de mensajes entre ellos:

    1. Peticin: Sesin NetBIOS. El objetivo de este mensaje es establecer una sesin fiable para subsiguientes mensajes entre los ordenadores cliente y servidor. Es

    imprescindible que el cliente conozca el nombre NetBIOS del servidor para poder

    alcanzarlo; el nombre NetBIOS del cliente es parte del mensaje, por lo que ambos

    saben quin es el otro.

    2. Respuesta: Sesin NetBIOS. Si no hay error en el mensaje anterior, el servidor enva un mensaje de reconocimiento (ACK), aceptando la conexin.

    3. Peticin: Dialecto SMB. El cliente enva en este mensaje una lista con los dialectos o variantes de SMB que soporta, puesto que es habitual que un sistema Windows

    soporte varias versiones de SMB simultneamente.

    4. Respuesta: Dialecto SMB. El servidor contesta con el dialecto que prefiere para la comunicacin subsiguiente, o un cdigo de error si no soporta ninguna de las

    alternativas ofrecidas por el cliente.

    5. Peticin: Inicio de sesin. El cliente enva las credenciales de usuario (usuario, dominio,contrasea) con las que ste desea conectarse al servidor. Recurdese que

    por defecto, se emplean las credenciales con las que el usuario se conect

    interactivamente al sistema cliente, pero se pueden especificar otras explcitamente.

    6. Respuesta: Inicio de sesin. El servidor autentifica las credenciales de usuario (ver modo user descrito arriba). Si las credenciales son buenas, el servidor posee ya un

    SID vlido que le permite, antes que nada, comprobar si el usuario posee el derecho

    de conectarse al servidor (directiva "tener acceso a este equipo desde la red"). En

    caso afirmativo, se acepta la conexin y el servidor construye un identificador

    numrico particular para esa coexin (denominado User ID o UID) que devuelve al

  • cliente. Los UIDs pueden ser reutilizados durante la vida del sistema, pero son

    nicos para todas las conexiones simultneas que mantiene el servidor en un

    momento dado, por lo que identifican unvocamente una conexin (aceptada).

    Todos los mensajes posteriores del cliente deben contener este identificador para ser

    aceptados por el servidor.

    Por otro lado, si las credenciales estaban mal (o si los derechos eran insuficientes),

    el servidor enva un cdigo de error en lugar del UID.

    7. Peticin: Conexin a un recurso concreto. El cliente enva entonces un mensaje que contiene una cadena que identifica el recurso al que desea acceder (por ejemplo,

    \\pc01\impresora o \\pc01\carpeta).

    8. Respuesta: Conexin a un recurso concreto. Si el recurso solicitado por el cliente existe (y el SID asociado a la conexin posee suficientes permisos), el servidor

    construye un identificador denominado Tree ID o TID, que ser utilizado por el

    cliente para hacer referencia a dicho recurso en posteriores mensajes de esa

    conexin.

    Tras esta secuencia tpica de conexin al recurso (carpeta compartida), y si todo ha

    fucionado correctamente, el sistema cliente ya est en condiciones de acceder a la carpeta.

    Mediante el envo de los SMBs correspondientes, el cliente ya puede abrir archivos, leerlos,

    modificarlos, etc., utilizando siempre los identificadores (UID y TID) que el servidor ha

    construido durante el intercambio de mensajes inicial.

    Captulo 9. Sistema de archivos de red (NFS)

    Un Sistema de archivos de red (NFS) permite a los hosts remotos montar sistemas de

    archivos sobre la red e interactuar con esos sistemas de archivos como si estuvieran

    montados localmente. Esto permite a los administradores de sistemas consolidar los

    recursos en servidores centralizados en la red.

    Este captulo se centra en los conceptos fundamentales de NFS e informacin

    suplementaria. Para instrucciones especficas con respecto a la configuracin y operacin

    del software NFS en servidores o clientes, vea el captulo titulado Sistema de archivos de

    red (NFS) en el Manual de administracin del sistema de Red Hat Enterprise Linux.

    9.1. Funcionamiento

    Hay tres versiones de NFS actualmente en uso. La versin 2 de NFS (NFSv2), es la ms

    antigua y est ampliamente soportada por muchos sistemas operativos. La versin 3 de

    NFS (NFSv3) tiene ms caractersticas, incluyendo manejo de archivos de tamao variable

    y mejores facilidades de informes de errores, pero no es completamente compatible con los

    clientes NFSv2. NFS versin 4 (NFSv4) incluye seguridad Kerberos, trabaja con

    cortafuegos, permite ACLs y utiliza operaciones con descripcin del estado. Red Hat

  • Enterprise Linux soporta clientes tanto NFSv2, NFSv3 como NFSv4, y cuando monta un

    sistema de archivos a travs de NFS, Red Hat Enterprise Linux usa NFSv4 por defecto.

    Todas las versiones de NFS pueden utilizar el Protocolo de control de transmisiones (TCP)

    ejecutndose sobre una red IP. En el caso de NFSv4, ste lo requiere. NFSv2 y NFSv3

    pueden utilizar el Protocolo de datagrama de usuarios (UDP) sobre una red IP para

    proporcionar conexiones de red sin supervisin (stateless) entre el cliente y el servidor.

    Cuando se utiliza NFSv2 o NFSv3 con UDP, bajo condiciones normales la conexin UDP

    desatendida minimiza el trfico de la red, ya que el servidor NFS envia un cookie al cliente

    despus que este tiene acceso al volumen compartido. Esta cookie es un valor aleatorio

    guardado en el lado del servidor y es pasado junto con las peticiones RPC desde el cliente.

    El servidor NFS puede ser reiniciado sin afectar a los clientes y las cookies permanecen

    intactas. Sin embargo, debido a que UDP es sin supervisin, si el servidor se cae de forma

    inesperada, los clientes UDP continan saturando la red con peticiones para el servidor. Por

    esta razn, TCP es el protocolo preferido cuando se conecte a un servidor NFS.

    Cuando se autentifique utilizando NFSv4, se crea una conexin atenta y, de forma opcional,

    est disponible la autenticacin de usuarios y grupos con Kerberos. NFSv4 no tiene

    interaccin con portmapper, rpc.mountd, rpc.lockd y rpc.statd, pues estos han sido

    incorporados en el kernel. NFSv4 escucha en el puerto TCP 2049.

    Nota

    TCP es el protocolo por defecto para NFS bajo Red Hat Enterprise Linux. Consulte el

    captulo llamado Sistema de archivos de red (NFS) en el Manual de administracin

    del sistema de Red Hat Enterprise Linux para ms informacin sobre la conexin a

    servidores NFS usando TCP. UDP se puede utilizar para propsitos de

    compatibilidad si se necesita, pero no es recomendado para uso general.

    La nica vez que NFS lleva a cabo la autentificacin es cuando el cliente intenta montar un

    recurso compartido NFS. Para limitar el acceso al servicio NFS, se utilizan envolturas TCP

    (TCP wrappers). Los TCP wrappers leen los archivos /etc/hosts.allow y

    /etc/hosts.deny para determinar si a un cliente particular o red tiene acceso o no al

    servicio NFS. Para ms informacin sobre cmo configurar los controles de acceso con

    envolturas TCP (TCP wrappers), consulte el Captulo 17.

    Despus de que al cliente se le permite acceso gracias a un TCP wrapper, el servidor NFS

    recurre a su archivo de configuracin, /etc/exports, para determinar si el cliente tiene

    suficientes privilegios para acceder a los sistemas de archivos exportados. Una vez

    otorgado el acceso, todas las operaciones de archivos y de directorios estn disponibles para

    el usuario.

  • Aviso

    Si se est utilizando NFSv2 o NFSv3, los cuales no son compatibles con la

    autenticacin Kerberos, los privilegios de montaje de NFS son otorgados al host

    cliente, no para el usuario. Por lo tanto, se puede acceder a los sistemas de archivos

    exportados por cualquier usuario en un host cliente con permisos de acceso. Cuando

    se configuran las unidades compartidas NFS, tenga mucho cuidado de cules hosts

    obtienen permisos de lectura/escritura (rw).

    Importante

    Para que NFS funcione con una instalacin de Red Hat Enterprise Linux con un

    cortafuegos instalado, se debe configurar IPTables con el puerto predeterminado TCP

    2049. Sin una configuracin IPTables, NFS no funcionar correctamente.

    El script de inicializacin NFS y el proceso rpc.nfsd ahora permiten la vinculacin

    a cualquier puerto especificado durante el inicio del sistema. Sin embargo, esto puede

    ser susceptible a errores si el puerto no est disponible o si entra en conflicto con otro

    demonio.

    9.1.1. Servicios requeridos

    Red Hat Enterprise Linux utiliza una combinacin de soporte a nivel del kernel y procesos

    demonio para proporcionar los archivos compartidos con NFS. NFSv2 y NFSv3 confa en

    las Llamadas de procedimientos remotos ((RPC)) para enrutar peticiones entre clientes y

    servidores. Los servicios RPC bajo Linux son controlados por el servicio portmap. Para

    compartir o montar sistemas de archivos NFS, los servicios siguientes funcionan juntos,

    dependiendo de cul versin de NFS se tenga implementada:

    nfs Inicia los procesos RPC apropiados para servir peticiones para los sistemas de archivos compartidos NFS.

    nfslock Un servicio opcional que inicia los procesos RPC adecuados para permitir que clientes NFS bloqueen archivos en el servidor.

    portmap El servicio RPC para Linux; responde a las peticiones para servicios RPC y configura las conexiones al servicio RPC solicitado. No se utiliza con

    NFSv4.

    Los siguientes procesos RPC facilitan los servicios NFS:

    rpc.mountd Este proceso recibe las peticiones de montaje desde clientes NFS y verifica que el sistema de archivos solicitado est actualmente exportado. Este

    proceso es iniciado automticamente por el servicio nfs y no requiere de la

    configuracin del usuario. No se utiliza con NFSv4.

    rpc.nfsd Este proceso es el servidor NFS. Trabaja con el kernel Linux para satisfacer las demandas dinmicas de clientes NFS, tales como proporcionar hilos

  • del servidor cada vez que se conecta un cliente NFS. Este proceso corresponde al

    servicio nfs.

    rpc.lockd Un proceso opcional que permite a los clientes NFS bloquear

    archivos en el servidor. Esto corresponde al servicio nfslock. No se utiliza con

    NFSv4.

    rpc.statd Este proceso implementa el protocolo RPC Network Status Monitor (NSM) el cual notifica a los clientes NFS cuando un servidor NFS es reiniciado

    luego de haber sido apagado abruptamente. Este proceso es iniciado

    automticamente por el servicio nfslock y no requiere configuracin por parte del

    usuario. No se utiliza con NFSv4.

    rpc.rquotad Proporciona informacin de cuotas de usuario para los usuarios

    remotos. Este proceso se inicia automticamente por el servicio nfs y no requiere

    configuracin por parte del usuario.

    rpc.idmapd Este proceso proporciona al cliente y servidor NFSv4 llamadas ascendentes (upcalls) que hacen corresponder los nombres NFSv4 (los cuales son

    cadenas en la forma usuario@dominio) y los UIDs y GIDs locales. Para que idmapd

    funcione con NFSv4, el /etc/idmapd.conf debe estar configurado. Se requiere

    este servicio para su uso con NFSv4.

    rpc.svcgssd Este proceso proporciona al servidor los mecanismos de transporte para el proceso de autenticacin (Kerberos versin 5) con NFSv4. Se requiere este

    servicio para su uso con NFSv4.

    rpc.gssd Este proceso proporciona al cliente los mecanismos de transporte para el proceso de autenticacin (Kerberos versin 5). Se requiere este servicio para su

    uso con NFSv4.

    9.1.2. NFS y portmap

    Nota

    La seccin siguiente solamente aplica para las implementaciones NFSv2 o NFSv3 que requieren del servicio portmap para la compatibilidad hacia atrs.

    El servicio portmap bajo Linux asigna las peticiones RPC a los servicios correctos. Los

    procesos RPC notifican a portmap cuando comienzan, revelando el nmero de puerto que

    ellos estn supervisando y el nmero de programas RPC que esperan servir. El sistema

    cliente entonces contacta con el portmap del servidor con un nmero de programa RPC

    particular. Entonces portmap redirecciona al cliente al nmero del puerto apropiado para

    que se comunique con el servicio solicitado.

    Como los servicios basados en RPC confian en portmap para hacer todas las conexiones

    con las peticiones de clientes entrantes, portmap debe estar disponible antes que cualquiera

    de esos servicios comience.

  • El servicio portmap puede utilizar TCP wrappers para el control de acceso, y las reglas de

    control de acceso para portmap afectan a todos los servicios basados en RPC.

    Alternativamente, es posible especificar reglas de control de acceso para cada demonio

    RPC NFS. Las pginas man para rpc.mountd y rpc.statd contienen informacin relativa

    a la sintaxis precisa de estas reglas.

    9.1.2.1. Resolucin de problemas de NFS y portmap

    Como portmap proporciona la coordinacin entre servicios RPC y los nmeros de puertos

    usados para comunicarlos, es til poder visualizar el estado de los servicios RPC actuales

    usando portmap cuando estamos resolviendo algn problema. El comando rpcinfo

    muestra cada servicio basado en RPC con su nmero de puerto, nmero de programa RPC,

    versin y tipo de protocolo (TCP o UDP).

    Para asegurarse que estn activos los servicios NFS basados en RPC para portmap, use el

    comando siguiente como root:

    rpcinfo -p

    A continuacin se presenta una muestra de la salida de este comando:

    program vers proto port

    100000 2 tcp 111 portmapper

    100000 2 udp 111 portmapper

    100021 1 udp 32774 nlockmgr

    100021 3 udp 32774 nlockmgr

    100021 4 udp 32774 nlockmgr

    100021 1 tcp 34437 nlockmgr

    100021 3 tcp 34437 nlockmgr

    100021 4 tcp 34437 nlockmgr

    100011 1 udp 819 rquotad

    100011 2 udp 819 rquotad

    100011 1 tcp 822 rquotad

    100011 2 tcp 822 rquotad

    100003 2 udp 2049 nfs

    100003 3 udp 2049 nfs

    100003 2 tcp 2049 nfs

    100003 3 tcp 2049 nfs

    100005 1 udp 836 mountd

    100005 1 tcp 839 mountd

    100005 2 udp 836 mountd

    100005 2 tcp 839 mountd

    100005 3 udp 836 mountd

    100005 3 tcp 839 mountd

    La salida de este comando revela que los servicios NFS correctos se estn ejecutando. Si

    uno de los servicios NFS no comienza correctamente, portmap puede ser incapaz de

    corresponder las peticiones RPC de los clientes para ese servicio con sus respectivos

    puertos. En muchos casos, si NFS no est presente en la salida de rpcinfo, reiniciando

  • NFS provocar que estos servicios se registren correctamente con portmap y empiecen a

    funcionar. Para ms instrucciones sobre el inicio de NFS, consulte la Seccin 9.2.

    Estn disponibles otras opciones tiles para el comando rpcinfo. Para ms informacin,

    consulte la pgina man de rpcinfo.