Curso Administración UNIX

Samba

Qué es Samba
Versiones, obtener Samba
Instalación
Arranque de los demonios
Configuración
Acceder directorio UNIX desde Windows
Acceder directorio Windows desde UNIX
Compartir una impresora UNIX
Compartir una impresora Windows
Protocolos SMB y CIFS
Protocolo SMB
Protocolo CIFS
Localización de recursos o "browsing"
Conceptos y objetivos de una red SMB/CIFS
Conceptos de red SMB/CIFS
Grupos de trabajo y Dominios
Localizadores maestros
Controlador de dominio
Seguridad de los servicios compartidos en Grupo de Trabajo
Modo de autenticación de servicios por Dominio
Esquemas de autenticación
Bibliografía y referencias.

Qué es Samba

Samba es un conjunto de programas que permite a sistemas cliente acceder archivos e impresoras en un servidor usando el protocolo SMB (Server Message Block). El servidor puede ser una máquina UNIX, Netware, OS/2 o VMS. Los clientes pueden ser Lan Manager, Windows 3.11/95/98/NT/2000, Linux, OS/2. Concretamente, Samba permite hacer uso de archivos e impresoras ubicados en una máquina UNIX desde máquinas Windows; también desde máquinas DOS con Lan Manager. Como parte del conjunto, viene un programa que permite a una máquina UNIX actuar como cliente de otros servidores SMB.

Con Samba pueden realizarse las siguientes cosas:

El conjunto de programas contenidos en el paquete Samba comprende:
  • smbd, el servidor SMB; maneja las conexiones de los clientes, incluyendo permisos y validación de usuarios.
  • nmbd, el servidor de nombres NetBIOS; permite a los clientes ubicar los servidores mostrando una lista e incorporando aspectos de manejo de dominio.
  • smbclient, programa cliente UNIX; permite a UNIX actuar como cliente de otro servidor SMB.
  • smbrun, permite al servidor correr aplicaciones en máquinas SMB.
  • testprns, para comprobar el acceso a impresoras.
  • testparms, para verificar la configuración de Samba.
  • smb.conf, el archivo de configuración de Samba.
  • smbprint, un script para que una máquina UNIX pueda usar smbclient para imprimir en un servidor SMB.
  • documentación, abundante cantidad de información cuya lectura puede ahorrar mucho tiempo y frustración.
  • El conjunto se entrega con todo el código, es de uso público, y se encuentra protegido bajo la licencia GPL (General Public License) de GNU.

    Versiones, obtener Samba.

    Linux y FreeBSD incluyen Samba entre sus paquetes; para Solaris o HP-UX pueden bajarse los fuentes, o aún versiones en binario, desde www.samba.org. Samba es considerado muy estable y seguro, condiciones logradas en base a la política de abundar en  versiones de dominio público para favorecer la corrección del software. Las versiones alfa, que contienen la palabra "alpha" en el nombre del paquete, están destinadas a detección de fallas; no se las consideran estables como para el uso en producción. Al obtener una versión nueva, debe buscarse el número más alto que no contenga la palabra "alpha".

    Instalación.

    Las siguientes son las ubicaciones habituales de comandos y archivos: El archivo de configuración /etc/smb.conf es la parte crucial de la instalación. En la distribución viene un ejemplo con abundantes comentarios. La página man smb.conf explica las muchas opciones disponibles.

    Arranque de los demonios.

    Los demonios smbd y nmbd pueden ser corridos desde inetd o como procesos autónomos.

    Para arrancarlos desde inetd, si se está configurando un servidor permanente, deben ser configurados para arrancar de nuevo si mueren. El archivo /etc/inetd.conf debe contener líneas similares a éstas:
      # servicios NetBIOS de Samba
      netbios-ssn stream tcp nowait root /usr/sbin/smb smbd
      netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

    Después de editar el archivo, reinicializar inetd con
      kill -1 id-proceso-inetd
    para que la configuración tome efecto. El número de proceso de inetd puede obtenerse con
      ps auxw | grep inetd

    Para arrancar los demonios como procesos autónomos, incluir su invocación a través de los scripts de arranque, como se muestra en el siguiente script /etc/rc.d/init.d/smb:

      #!/bin/sh
      #
      # /etc/rc.d/init.d/smb - arranca y detiene servicios SMB.
      #
      # Establecer los siguientes enlaces simbólicos hacia este script
      # para el arranque en el nivel 3 (red en multiusuario):
      # /etc/rc.d/rc0.d/K35smb - destruye servicio SMB en shutdown
      # /etc/rc.d/rc1.d/K35smb - destruye servicio SMB en monousuario
      # /etc/rc.d/rc3.d/S91smb -arranca servicio SMB en multiusuario
      # /etc/rc.d/rc6.d/K35smb -destruye servicio SMB en reboot
     
      # parámetros de invocación.
      case "$1" in
      start)
        echo -n "Iniciando servicios SMB: "
        /sbin/smbd -D
        /sbin/nmbd -D
        echo
        touch /var/lock/subsys/smb
        ;;
      stop)
        echo -n "Cerrando servicios SMB: "
        killproc smbd
        killproc nmbd
        rm -f /var/lock/subsys/smb
        echo
        ;;
      *)
        echo "Usage: smb {start|stop}"
        exit 1
      esac

     

     

    En algunas distribuciones el arranque de Samba viene ya incluído en los scripts de arranque, a veces comentado. Distribuciones como Debian traen ya su script /etc/init.d/samba y crean los enlaces simbólicos al instalar el paquete.

    Configuración.

    La configuración de Samba se controla con un único archivo, /etc/smb.conf. Aquí se determina qué recursos serán compartidos y bajo qué condiciones. El archivo está dividido en secciones, cada una de las cuales comienza con un encabezado tal como global, homes, printers, etc. La sección "global" define variables de acción global sobre todos los recursos compartidos. La sección "printers" define la configuración general de impresoras reconocidas por ese servidor. La sección "homes" permite a un usuario, y sólo a él, acceder su directorio propio en la máquina UNIX. El ejemplo siguiente permitirá a usuarios Windows acceder sus directorios propios en la máquina UNIX y usar libremente un directorio temporal en la máquina UNIX.
     
      ; /etc/smb.conf
      ;
      [global]
      guest account = guest
      log file = /var/log/samba/%m.log
      lock directory = /var/lock/samba
      share modes = yes
     
      [homes]
      comment = Directorios propios
      browseable = no
      read only = no
      create mode = 0755
     
      [temporal]
      comment = Espacio para archivos temporales
      path = /tmp
      read only = no
      public = yes


    Para compartir un directorio público con permisos de escritura:

      [publico]
      comment = Public Stuff
      path = /home/public
      public = yes
      writable = yes


    Para que este directorio sea legible por todo público pero solo modificable por integrantes del grupo "tecnicos":

      [tecnopub]
      comment = Directorio Público del grupo Técnicos
      path = /home/tecnopub
      public = yes
      writable = yes
      printable = no
      write list = @tecnicos

    Acceder directorio UNIX desde Windows.

    Una vez instalado y configurado Samba en la máquina UNIX, quedarán disponibles para los clientes Windows los servicios compartidos. Esto es, será posible montar directorios de la máquina UNIX en una máquina Windows. Para ello, se realiza la operación de montaje como siempre: si se trata de Windows 95/98/NT/2000 puede usarse el Explorador, indicando en la opción de montar unidad de red el nombre de la unidad de disco, y luego el nombre de la máquina UNIX seguido del nombre del recurso compartido, en la notación habitual, \\máquina_UNIX\nombre_recurso. También puede hacerse la operación desde una ventana de comandos, indicando el nombre de la unidad:
      net use K: \\gingko\tecnopub
    monta sobre la unidad K: el recurso llamado tecnopub compartido vía Samba en la máquina UNIX llamada gingko.

    Una vez asegurado el éxito de la operación, puede accederse desde la máquina cliente al directorio de la máquina UNIX en la letra de unidad indicada. Si el recurso compartido requiere autenticación del usuario, este debe poseer una cuenta en la máquina UNIX o en otra máquina que haya sido designada para la autenticación de seguridad. En este caso, el acceso sólo será concedido si el usuario es autenticado por quien tenga la autoridad de hacerlo, y si dispone de los permisos adecuados. La autoridad para autenticación de usuarios se designa en el archivo smb.conf de Samba.

    Acceder directorio Windows desde máquinas UNIX con Samba.

    Samba trae un programa cliente, smbclient,  para que las máquinas UNIX puedan acceder recursos compartidos vía SMB en máquinas Windows o en otras máquinas UNIX/Samba. Este programa provee una interface similar a ftp, lo que permite transferir archivos desde y hacia un recurso compartido desde una máquina Windows.

      /usr/sbin/smbclient -L winntmaq
    muestra los recursos compartidos en la máquina winntmaq, ya sean directorios o impresoras, generalmente pidiendo una contraseña.

      /usr/sbin/smbclient \\\\winntmaq\\g_tmp <contraseña>
    Aquí el caracter \ debe "escaparse" con otro \, escribiendo \\ para que tome \. Este comando conecta al directorio g_tmp habilitando una línea de comandos de tipo ftp:
      Server time is Sat Aug 10 15:58:44 1996
      Timezone is UTC+10.0
      Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
      smb: \>

    Para obtener la lista de comandos disponibles en smbclient:

      smb: \> h
      ls dir lcd cd pwd
      get mget put mput rename
      more mask del rm mkdir
      md rmdir rd prompt recurse
      translate lowercase print printmode queue
      cancel stat quit q exit
      newer archive tar blocksize tarmode
      setmode help ? !
      smb: \>


    El programa smbclient es también útil para determinar el funcionamiento correcto de Samba en una máquina UNIX, invocándolo desde ella misma o desde otra máquina UNIX.

    Compartir una impresora UNIX.

    Como toda impresora en UNIX, la impresora a compartir debe tener una entrada en el archivo /etc/printcap. Una vez seguros de que la impresora funciona bien en la máquina UNIX, para compartirla hacia las máquinas Windows agregar en smb.conf algo similar a esto:
      ; parámetros globales para imprimir
      [global]
      printing = bsd
      printcap name = /etc/printcap
      load printers = yes
      log file = /var/log/samba/%m.log
      lock directory = /var/lock/samba
     
      ; parámetros para todas las impresoras
      [printers]
      comment = Todas las Impresoras
      security = server
      path = /var/spool/lpd/lp
      browseable = no
      printable = yes
      public = yes
      writable = no
      create mode = 0700
     
      ; configuración de una impresora
      [ljet]
      comment = Impresora HP laserjet
      security = server
      path = /var/spool/lpd/lp
      printer name = hpljet
      writable = yes
      public = yes
      printable = yes
      print command = lpr -r -h -P %p %s

    Compartir una impresora Windows.

    Para poder compartir una impresora en un servidor Windows remoto vía Samba, debe disponerse de una entrada para ésta en el /etc/printcap de la máquina UNIX. Las convenciones de printcap usadas significan:
      cm - comentario

      lp - nombre del dispositivo de impresión
      sd - directorio de spool de la impresora, en la máquina local
      af - archivo de contabilidad
      mx - tamaño máximo de archivo; si se pone 0, no hay límite
      if - nombre del filtro de entrada, si lo hay (un script)

    Ejemplo de entrada en /etc/printcap.

      # /etc/printcap
      #
      # \\winntmaq\imppost5 via smbprint
      #
      lpwin|immpost5:\
        :cm=HP 5MP Postscript imppost5 en winntmaq:\
        :lp=/dev/null:\
        :sd=/var/spool/lpd/imppost5:\
        :af=/var/spool/lpd/imppost5/acct:\
        :mx#0:\
        :if=/usr/bin/smbprint:


    smbprint es un filtro de entrada para impresoras definidas en  /etc/printcap. Usa el programa smbclient para imprimir un archivo en una impresora servida por una máquina basada en SMB. El nombre del servidor y la impresora se leen del archivo de configuración /var/spool/lpd/nombre_impresora/.config; para el ejemplo anterior,

    # /var/spool/lpd/imppost5/.config
    #
    # configuración para impresora imppost5 en servidor  winntmaq
    server=winntmaq
    service=imppost5
    password=""
    El script imprime hacia el servicio de impresión en la máquina remota mediante un comando similar a
      cat archivo.txt | /usr/bin/smbclient \\servidor\impresora \
        contraseña -U servidor -N -P >> logfile

    Protocolos CIFS y SMB.

    En las secciones siguientes se resumen algunos conceptos útiles para comprender la instalación de una red basada en máquinas UNIX/Samba sirviendo archivos e impresión a máquinas Windows y NT. Cada nueva versión de Samba implementa más cercanamente el esquema de red Microsoft, haciendo la máquina UNIX cada vez más indistinguible de un servidor Microsoft en lo que a clientes se refiere.

    Protocolo SMB.

    SMB (Server Message Block, bloque de mensajes de servidor) es un protocolo para compartir archivos, base de los sistemas de red LAN Manager y Microsoft Networking. SMB fue aplicado por Microsoft a DOS como una extensión para dirigir entrada salida de disco hacia NetBIOS (Network BIOS), un sistema diseñado por IBM y Sytec para actuar como interfaz cruda entre red y aplicación. Modernamente, los paquetes SMB son transportados en una extensión de NetBIOS denominada NBT, NetBIOS sobre TCP/IP.

    Protocolo CIFS.

    CIFS (Common Internet Filesystem, sistema de archivos común para Internet) es una tentativa de implementar un protocolo de dominio público para transferencia de archivos en forma simple y potente, ampliando las capacidades de SMB, en el cual se basa.

    CIFS define un protocolo de acceso a sistemas de archivos remotos normalizado para uso en redes, permitiendo a los grupos de usuarios trabajar juntos y compartir documentos ya sea a través de Internet o dentro de sus intranets corporativas. Es una tecnología multiplataforma, abierta, basada en los protocolos para compartir archivos de MS Windows y otros sistemas operativos comunes, soportada por UNIX y otros sistemas operativos. En su máxima expresión, CIFS permitiría a millones de usuarios compartir sus archivos sin instalar nuevo software o cambiar su forma de trabajo habitual.

    Localización de recursos o "browsing".

    La localización de recursos o "browswing" es la parte de los protocolos SMB/CIFS que permite ubicar recursos en la red tal como se hace en la sección "Entorno de Red" para las máquinas de un mismo grupo en el Explorador de Windows 95/98/NT/2000. Tocando con el ratón sobre el nombre de una máquina, ésta muestra sus recursos compartidos (impresoras y directorios), a los que puede hacerse conexión. CIFS aspira a realizar esto a través de la Internet.

    Conceptos y objetivos de una Red SMB/CIFS.

    Al instalar en una red LAN o WAN servicios de archivo e impresión las decisiones cruciales implican:
  • Cómo y dónde se almacena la información de nombres de usuario, contraseñas y seguridad;
  • Qué método se usará para ubicar los recursos que los usuarios tienen habilitados;
  • Qué protocolos hablan (soportan) los clientes.
  • Las redes Netware, Windows NT o cualquier producto para servicio de archivos encierra al usuario en el marco de las respuestas de ese producto a las preguntas anteriores. Esto es inconveniente aún cuando se tiene una red homogénea, pero más cuando se tiene diversos tipos de máquinas y sistemas operativos. Samba intenta superar estas restricciones admitiendo la mayor combinación posible de clientes, servidores, sistemas operativos y protocolos.

    Conceptos de red SMB/CIFS.

    Para la implementación de redes, Dominio y Grupo de Trabajo son exactamente lo mismo, excepto por la secuencia de ingreso del cliente (logon). En los dominios, existe una base de datos de autenticación distribuída; esto da mayor alcance y flexibilidad al concepto de dominio. Para Samba, cuando un cliente se conecta a un servicio,  lo hace presentando una cadena de autenticación; si ésta es válida, el acceso le es permitido, sin importar cómo ha sido generada esa cadena. En el caso de ingresar a un dominio, sin embargo, el cliente SMB espera que todos los demás servidores del dominio acepten la misma información de autenticación.
    En cuanto a la localización de recursos ("browsing"), no hay diferencia entre dominio y grupo de trabajo. Windows 95/98 puede ser miembro tanto de un dominio como de un grupo de trabajo; Windows NT no. Samba puede sólo ser miembro de un único grupo de trabajo o dominio, aunque las nuevas versiones de Samba están ya dando soporte de dominio  NT.

    Grupos de Trabajo y Dominios.

    El grupo de trabajo (Workgroup) designa un conjunto de máquinas que mantienen una base de datos común para la localización de sus recursos compartidos. No necesariamente tienen en común información de seguridad; si ésto acontece, estamos en presencia de un dominio. El mantenimiento de la lista de servidores y recursos es dinámica: se altera toda vez que entra o sale un servidor de la red, o que incorpora o elimina un recurso compartido. El término "browsing" o localización se refiere al acceso a recursos por parte del usuario, usando una interfaz cualquiera, tal como el Explorador de Windows. Los servidores SMB acuerdan entre ellos cuales mantienen la base de datos de localización de recursos. Los grupos de trabajo pueden estar en cualquier punto de una red interconectada TCP/IP, aún en diferentes subredes o en la internet; esto es algo muy difícil de implementar para SMB.

    Localizadores maestros.

    Los localizadores maestros o "master browsers" son máquinas que tienen la base de datos maestra de localización de recursos en un dominio o grupo de trabajo. Hay dos clases de localizadores maestros:
  • Localizador Maestro de Dominio ("Domain Master Browser"): retiene la base de datos maestra de localización de todo el dominio, eventualmente atravesando varias subredes TCP/IP.
  • Localizador Maestro Local ("Local Master Browser"): retienen la base de datos maestra de localización de la subred en la que se encuentran; se comunican con el localizador maestro de dominio para obtener información de otras subredes.
  • Las subredes son un caso especial porque la localización de recursos se basa en difusión, y la difusión no atraviesa los ruteadores. Los localizadores maestros, ya sean de dominio o locales, son elegidos dinámicamente según un algoritmo que considera la habilidad de la máquina para sostener la carga de localización. Samba puede configurarse para actuar siempre como localizador maestro; esto equivale a ganar siempre la elección, incluso frente a sistemas actuando como controladores primarios de dominio Windows NT, que aspiran ellos mismos a ganar la elección.

    Controlador de Dominio.

    El término Controlador de Dominio (Domain Controller) está unido a la autenticación de usuarios en un dominio. El método de autenticación de usuarios en un dominio usado por Windows NT es el más difundido, pero no es el único.

    Seguridad de los servicios compartidos en Grupo de Trabajo.

    El ajuste de seguridad de Samba "security = SHARE", fue la implementación inicial de Samba, en la cual en base a la contraseña asociada al recurso se infería el usuario, pudiendo incluso hacerse que el usuario fuera "todos". Esto se considera mala práctica, pero en los orígenes estaba ligado a grupos chicos, alrededor de los años '80, en los cuales las consideraciones de seguridad no eran prioritarias. El criterio resucitó en 1992 con Windows for Workgroups.

    Modo de autenticación de servicios por Dominio.

    Con el ajuste de seguridad de Samba  "security = USER" o "security = SERVER" todos los accessos a los recursos son verificados por el par nombre de usuario / contraseña de modo más riguroso. Para el cliente, esto emula el comportamiento de ingreso a un dominio Microsoft. Para el cliente es indiferente si Samba consulta la base de datos de seguridad SAM de Windows NT o autentica al usuario de algún otro modo, como ser consultando a la máquina UNIX. Si los nombres de usuario existen en la máquina UNIX, conviene usar "security = user"; si no, convendrá "security = share" para ambientes chicos donde la seguridad no es un problema; con "security = server" las duplas nombre de usuario / contraseña son transferidas a otro servidor SMB para su autenticación, como ser una máquina NT.

    Esquemas de autenticación.

    En el caso más simple, la información necesaria para la autenticación de un usuario reside en uno o más archivos en un servidor único. Cuando el usuario debe acceder más de un servidor, se requiere algún tipo de base de datos distribuída para evitar obligar al usuario a tener una contraseña en cada contexto. Tal esquema debe ser capaz de soportar cambios de contraseña y grupos de usuarios con permisos en un mismo nivel. Por estas razones Samba implementa en muchos casos directamente el modelo de dominio.
    Existen diversos esquemas de autenticación posibles utilizables por Samba, tales como NIS; para máquinas Windows 95/98 y muchos otros clientes Samba puede comportarse como controlador maestro de dominio compartiendo la base de datos de autenticación vía NIS en forma transparente para los clientes. El soporte de dominio para Windows NT está ya disponible en las nuevas versiones. El soporte para perfiles de usuario es soportado por Samba para clientes Windows 95/98/NT desde tiempo atrás.
     

    Bibliografía y Referencias

  • Sitio principal: http://www.samba.org
  • Documentación de Samba, en  http://www.samba.org o en paquetes de la propia distribución. Para los temas aquí tratados, especialmente README, INSTALL.txt, UNIX_INSTALL.txt para instalación; DOMAIN.txt, BROWSING.txt, NTDOMAIN.txt, NetBIOS.txt para comprender la interacción con Windows.
  • Páginas man smb, nmbd, smbclient, y especialmente smb.conf para definir el comportamiento de Samba.
  • Ejemplo de archivo de configuración smb.conf
  • CIFS: http://samba.org/cifs/

  • Víctor A. González Barbone   victor@iie.edu.uy
    Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay.