Samba (samba.org) es una implementación libre del protocolo SMB (Server Message Block, el protocolo que utilizan los equipos Windows para compartir sus directorios) que nos permitirá comunicarnos con equipos Windows desde Linux:

  • el servidor Samba permitirá que los equipos Windows pueda acceder a los recursos compartidos del equipo Linux (directorios e impresoras).
  • el cliente Samba permitirá al equipo Linux acceder a los recursos compartidos del equipo Windows (directorios e impresoras), y montar los directorios compartidos como si se tratara de un disquete o un CD. Para poder usar las impresoras compartidas tendremos que configurarlas en el equipo cliente.

Equivalencias en Windows: MS-SMB.

Samba también permite:

  • validar usuarios haciendo de Controlador Principal de Dominio (PDC) para redes Windows.
  • proporcionar un servidor de resolución de nombres WINS (WINS es el servidor de nombres de Windows que relaciona los nombres NetBIOS de las máquinas con sus direcciones IP).

El protocolo SMB utiliza los siguientes puertos, según figura en /etc/services:

netbios-ns 137 TCP y 137 UDP
netbios-dgm 138 TCP y 138 UDP
netbios-ssn 139 TCP y 139 UDP

Recursos

Servidor Samba

Para permitir a los equipos Windows acceder al equipo Linux instalaremos el servidor Samba (paquete samba). Durante la instalación nos hará varias preguntas para configurar el archivo /etc/samba/smb.conf, aunque después lo revisaremos:

  • Grupo de trabajo: el mismo que en las máquinas Windows.
  • Contraseñas cifradas: .
  • ¿Utilizar DHCP para configurar WINS? No (si no vamos a usar DHCP).
  • ¿Ejecutar Samba como demonio o como esclavo de inetd? Demonio.
  • ¿Crear la base de datos de contraseñas? (creará el archivo de contraseñas cifradas /var/lib/samba/passdb.tdb).

Una vez terminada la instalación, tendremos los dos demonios de Samba funcionando:

  • nmbd: actúa como un servidor de nombres Windows, comunicando el nombre de nuestra máquina a las máquinas Windows de la red local e informándoles de cuáles son nuestros recursos compartidos. También maneja la resolución de nombres de NetBIOS (obtener una equivalencia entre la direccion IP de la LAN y el nombre de la máquina), comunicándose para ello con un servidor WINS presente en la red.
  • smbd: acepta las peticiones de archivos e impresoras desde las máquinas Windows. Se encarga de compartir los recursos (archivos e impresoras) y del control del acceso a los recursos, gestionando los permisos de los clientes.

Para acceder a Samba crearemos un usuario específico, samba, que será el único que tendrá acceso a los recursos compartidos y que deberán usarán todos los ordenadores que accedan a los mismos. Como no queremos que el usuario samba pueda acceder a otros servicios del sistema le impediremos hacer login, creándolo con el comando:

# useradd -s /bin/false samba

Después lo añadiremos a la lista de usuarios de Samba, que se encuentra en el archivo /etc/samba/smbpasswd, ejecutando el comando:

# smbpasswd -a samba

Configuración del servidor Samba

Para configurar el servidor Samba editaremos el archivo /etc/samba/smb.conf.

  • Comprobaremos el grupo de trabajo:
    workgroup = domain.com
  • La directiva server string establece la descripción del ordenador que se verá en la red. Por defecto es:
    server string = %h server (Samba %v)

    donde %h es el nombre del equipo y %v la versión de Samba.

  • Comprobaremos que las contraseñas se encriptan, verificando la línea:
    encrypt passwords = true
  • La directiva guest account estará comentada:
    ; guest account = nobody

    Si la descomentamos permitiremos que dejar el nombre de usuario y contraseña en blanco equivalga a entrar como el usuario guest (Invitado, sin contraseña). Autorizar el acceso guest es permitir a cualquier usuario de una máquina del grupo de trabajo acceder a Samba, y la integración en un grupo de trabajo no es un metodo fiable de validación. Cualquier usuario de una máquina Windows puede cambiar su grupo de trabajo tantas veces como desee sin que ningun mecanismo de autentificación se lo impida. Dejaremos la línea comentada para esto no ocurra.

  • Podemos establecer un cierto nivel de seguridad especificando qué rango de direcciones IP podrán acceder al servidor Samba, añadiendo la directiva hosts allow. Por ejemplo, para permitir el acceso sólo desde una red local haremos (atención al punto final):
    hosts allow = 192.168.1. 127.
  • Permitiremos el acceso sólo al usuario samba (si se crean más habrá que añadirlos aquí):
    valid users = samba
  • Para compartir las carpetas personales de los usuarios haremos (si no queremos compartir las carpetas personales de los usuarios comentaremos con un ";" todas estas líneas):
    [homes]
    comment = Home Directories
    browseable = yes
    writable = yes
    create mask = 0777
    directory mask = 0777
    • [homes]: indica bajo qué etiqueta veremos esos directorios en los equipos Windows.
    • writable = yes/no: permite escribir en el directorio.
    • browseable = yes/no: permite al navegar por los recursos compartidos.
    • create mask y directory mask: establecen los permisos de los archivos y directorios que se creen a 777, (u=rwx g=rwx o=rwx), para que puedan ser leídos, modificados o ejecutados por cualquier usuario.
  • Si queremos compartir otros directorios, como por ejemplo:

    /var/www, permisos de lectura y escritura, etiqueta en Windows web.
    /home/francis/deb, permisos de lectura, etiqueta en Windows debian.

    añadiremos las líneas:

    [web]
    comment = directorio de la web
    path = /var/www
    writable = yes
    browseable = yes
    guest ok = no
    create mask = 0777
    directory mask = 0777
    
    [debian]
    comment = repositorio paquetes deb
    path = /home/francis/deb
    read only = yes
    browseable = yes
    guest ok = no
    • path indica el directorio compartido.
    • read only = yes/no establece el directorio como de sólo lectura.
    • guest ok = yes/no permite el usuario invitado.

    Si tenemos problemas para acceder al directorio compartido o para modificar, borrar o crear archivos revisaremos los permisos del usuario samba y el propietario de la carpeta compartida y su contenido.

  • Si no tenemos impresoras para compartir conectadas al servidor Linux comentaremos con un ";" todas las líneas de la sección [printers].
  • Podemos habilitar nuestro servidor Samba para que actúe de servidor de nombres WINS y se encargue de traducir los nombres NetBIOS a IPs. Para ello, agregaremos las siguientes líneas a /etc/samba/smb.conf:
    wins support = yes
    domain master = yes

Reiniciaremos los demonios de Samba con:

# /etc/init.d/samba restart

y probaremos a acceder a los directorios e impresoras compartidas desde un ordenador Windows de la red, desde Entorno de red.

Comandos de Samba

Algunos comandos útiles de Samba son:

  • para ver quién está conectado:
    # smbstatus
  • para ver la IP del equipo host de la red:
    # nmblookup host

Frontales gráficos para configurar el servidor Samba

  • SWAT (Samba Web Administration Tool, paquete swat): interfaz web para configurar Samba. SWAT se comporta como un servidor web y nos permite configurar Samba de forma remota. Podremos acceder a la ayuda, cambiar la configuración, generar el archivo /etc/samba/smb.conf y reiniciar los servicios.

    Nota

    Tanto durante la instalación como durante el funcionamiento de SWAT se sobreescribe /etc/samba/smb.conf, por lo que debemos hacer copia de seguridad de este archivo si queremos conservarlo.

    Para ejecutar SWAT teclearemos en el navegador la dirección http://localhost:901. Posiblemente no obtengamos respuesta positiva, debido a que le hemos dicho al superservidor inetd que en ese puerto escucha SWAT. Para ello, editaremos el fichero /etc/inetd.conf y añadiremos la línea:

    swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat

    Reiniciamos inetd:

    # /etc/init.d/inetd restart

    Y ahora sí tendremos acceso a http://localhost:901, siendo necesario acceder como root:

     

    Si hacemos modificaciones en Samba con SWAT, guardaremos los cambios pulsando Commit changes y los activaremos reiniciando los demonios.

Cliente Samba

Instalaremos el cliente Samba (paquetes smbclient smbfs) para acceder desde Linux a equipos Windows o Linux con carpetas o impresoras compartidas mediante el protocolo SMB.

Para ver los recursos compartidos del equipo <host> haremos:

# smbclient -L <host>

Podemos especificar el usuario (la contraseña la preguntará) con:

# smbclient -L <host> -U <usuario>

Obtenemos la lista de recursos compartidos de la máquina <host>, con el identificador de usuario <usuario>, entre ellos una impresora llamada INKJET:

added interface ip=10.6.7.234 bcast=10.6.7.255 nmask=255.255.255.0
Got a positive name query response from 10.6.7.8 ( 10.6.7.8 )
Password: (not shown)
Sharename   Type     Comment
PRINTER$    Disk
INKJET      Printer
STUFF       Disk
IPC$        IPC       Remote Inter Process Communication

Para montar el directorio compartido haremos:

# smbmount //host/nombre_del_recurso /mnt/samba

Podemos especificar el nombre de usuario:

# smbmount //host/nombre_del_recurso /mnt/samba -o username=nombre_usuario

Para desmontar el recurso compartido:

# smbumount /mnt/samba

Cliente Samba en entorno gráfico

Para acceder a los recursos compartidos por SMB en el entorno gráfico tenemos varias opciones:

  • Konqueror: simplemente entraremos en smb://192.168.1.2
  • Komba (paquete komba2): navegador gráfico para el protocolo SMB, que escanea la red buscando máquinas que compartan recursos, permitiendo montar y desmontar unidades.

     

  • LinNeighborhood (bnro.de/~schmidjo/, paquete linneighborhood): navegador SMB para el entorno gráfico que escanea la red y permite montar y desmontar unidades.