Samba en Slackware Linux


Autor: Augusto Sotelo L.




Mis pretenciones en este howtito son mas bien basicas, ya que solo deceo entregarles mi experiencia configurando samba en Linux Slackware ( nuestra gloriosa distribucion ) que se encuentra en una pequeña lan con dos cliente Windows XP.

Para comenzar dire que debemos tener instalado el paquete samba-3.0.1-i486-1aw.tgz ( la ultima version de samba actualmente), el cual podremos encontrar en http://www.linuxpackages.net/. Como Slackware Linux ya trae instalado el paquete Samba, lo mas recomendable es actualizarnos a la ultima version. Para saber cual es exactamente la ultima version de Samba podemos visitar http://www.samba.org/.

Una vez que tengamos el paquete descargado podremos instalarlo en nuestro sistema utilizando el siguiente comando:

# installpkg samba-3.0.1-i486-1aw.tgz

Ahora, como mencione posteriormente probablemente ya tengamos en nuestro sistema instalado una de las versiones de Samba, pero como nosotros deceamos tener la ultima version por razones de seguridad simplemente actualizamos el paquete ya instalado con el siguiente comando:

# upgradepkg samba-3.0.1-i486-1aw.tgz

Ahora bien, si nos encontramos en el supuesto caso que NO encontramos la ultima version en tgz para ser llegada e instalado o actualizada, siempre tenemos la opcion de descargarnos el codigo fuente desde http://www.samba.org/ para compilarlos nosotros mismos. No dare mayor detalle de como compilar samba desde la fuente, pero a grandes rasgoz es asi:

$ tar zxfv samba-a.b.c-iy86.tar.gz
$ cd samba-a.b.c-iy86
$ ./configure
$ make
$ su
password:
# make install o checkinstall <<-- Aqui resaltare que lo mejor es ejecutar checkinstall

NOTA: Si tú lector no sabes que es o que hace el comando checkinstall siempre podras recurrir a la "Guía de Slackware 9.0" que se encuentra en esta misma pagina.

Si alguno de ustedes decea saber con mayor detalle alguna opción determinada durante el proceso de compilación del paquete Samba, siempre podemos recurrir a leer el README o la documentacion que se encuentra en la pagina de Samba.

Ahora vamos a lo contundente. Es en esta etapa donde describire basicamente la función de algunas utilidades que nos facilitaran el camino. Es aquí donde me referiré a los demonios smbd y nmbd.

El demonio smbd es el encargado de manejar los recursos compartidos (como lo son directorios, impresoras, etc.) a los clientes Windows. Este demonio provee tanto servicios de impresion como espacio para los clientes utilizando el protocolo SMB ( o CIFS). Esto es compatible con el protocolo LanManager ( que significa manejador de red), proveyendo LanManager para los clientes. El termino LanManager es como una definicion que engloba todos los protocolos usados por SAMBA para poder comunicarce con los diferentes SO ( Sistemas Operativos) que este soporta. Esto incluye MSCLIENT 3.0 para DOS, Windows para Workgroup( grupo de trabajo), Windows 95/98/ME, Windows NT, WIndows 2000, OS/2, DAVE para Machintosh y smbfs para Linux.

El demonio nmbd es un servidor que comprende y puede responder a NetBIOS las peticiones del servicio de nombre IP como las producidas por los clientes SMB/CIFS, tales como Windows 95/98/ME, Windows NT, Windows 2000, Windows XP y los clientes LanManager. Ademas de esto el  demonio nmbd tambien participa en los protocolos de exploramiento, con lo que hacen la vista
"vecindario de red" en Windows

Ahora describire algunas utilidades que son parte del paquete "samba-3.0.1-i486-1aw.tgz".

smbclient: Es un cliente que puede comunicarce con el servidor SMB/CIFS, ofreciendo una interfaz similar a la del pprograma ftp. Entre algunas de las operaciones que incluye podemos encontrar la obtencion de los archivos que se encuentran en la maquina local, la transferencia de archivos desde el servidor a la maquina local, recuperando la informacion del servidor, etc..

smbtar: E
s un shell script muy pequeño en la parte superior de smbcliente(1) que descarga SMB compartidos directamente para guardar.

nmblookup:
Es usado para realizar peticiones de nombres NetBIOS y mapear asi a la direccion IP en la red de trabajo usando NetBIOS sobre peticiones TCP/IP. Las opciones permiten que las peticiones de nombres vayan directamente a un area de una direccion IP broadcast o a una maquina en particular. Todas las peticiones son realizadas  sobre UDP.

smbpasswd:
Este programa tiene funciones diferentes, dependiendo si es ejecutado por el usuario root o no. Cuando es ejecutado como usuario normal, este permite al usuario cambiar la clave usada en la sesiones SMB en cualquier maquina que almacene claves SMB.

Por defecto ( cuando es ejecutada sin argumentos) este programa intenta cambiar la clave SMB actual del usuario que lo ejecuto en la maquina local, ya que funciona de forma similar a como lo hace el programa passwd(1). smbpasswd difiere con el programa passwd en la forma de funcionar, sin embargo en eso este no obvtiene setuid root ( osea cero ), pero funciona en modo cliente-servido y se comunica con el demonio smbd(8). Como consecuencia el demonio smbd debe estar ejecutandoce en la maquina local. En las maquinas UNIX la password SMB encriptada es usualmente almacenada en el archivo smbpaswd(5).

Cuando es ejecutada como usuario normal sin ninguna opcion, smbpasswd incita teclear la antigua clave SMB y luego pregunta por la nueva clave dos veces, asegurandose así que la nueva clave este bien escrita. Ninguna clave sera mostrada en pantalla durante su escritura. Si tu tienes una clave SMB en blanco ( especificado por la opcion "NO PASSWORD" en el archivos smbpasswd), entonces simplemente presiona la tecla <ENTER> cuando se nos pregunte por nuestra antigua clave ( old password ).

El programa smbpasswd también puede ser usada por un usuario normal para cambiar la clave SMB en maquinas remotas, tales como Windows NT Primary Domain Controllers ( Controlador primario de dominio). Para una mayor informacion sobre esto chequea las opciones "-r" y -U".

Cuando es ejecutado por root, smbpasswd permite que los nuevos usuarios sean agregados o borrados del archivo smbpasswd, asi como tambien permite modificar las propiedades de los usuarios que se encuentren en este archivo. Además de esto, smbpasswd accede directamente al archivo smbpasswd, lo que habilita cambios para que sean hechos solo si el demonio smbd no esta siendo ejecutado.

smbstatus:
Este es un programa muy simple, el cual sencillamente nos lista las conexiones de samba actuales.

testparm:
Este es un simple programa de chequeo, el que verifica el archivo de configuracion del demonio smbd(8), para así poder correcgir errores internos. Si este programa no reporta problemas, tú puedes usar el archivo de configuracion con confianza, ya que el demonio smbd cargará satisfactoriamente el archivo de configuración.

NOTA: Esto NO garantiza para nada que los servicios especificados en el archivo de configuración se encontrarán habilitados u operables como se espera.

SI el nombre opcional del host y la dirección IP del host son especificadas desde la línea de comandos, este programa de prueba correrá a través del servicio de entradas, reportando si un host específico tiene acceso a cada servicio.

Si testparm encuentra un error en el archivo smb.conf este devolverá un codigo de salida 1 al programa que llama, sino, este devolverá un codigo de salida 0. Esto permite shell scripts para chequear la salida proveniente de testparm.

testprn:
Este sencillo programa de prueba determina si un nombre de impresora dado es válido para ser usado como servicio  proveido por smbd(8).

"Valido" en este contexto significa que " puede ser encontrado en el printcap especificado".

smbmount: Este programa monta un sistema de archivos SMB Linux. Es usualmente llamado como mount.smbfs por el comando mount(8) cuando es usada la opción "-t smbfs". Este comando solo funciona en Linux, y el kernel debe soportar el sistema de archivos smbfs.

swat:
Este es un programa que permite al administrador de Samba configurar el complejo archivo smb.conf() usando el navegador. Adicionalmente, la página de configuración de swat posee diversos links de ayuda para todas las opciones permitidas en el archivo smb.conf, haciendo así más sencilla la tarea del administrador, permitiendole ver con facilidad cualquier efecto que traiga un cambio que se haya realizado.

Este programa se ejecuta desde el archivo inetd.

Entonces lo primero es iniciar el servidor samba, para asi poder montar el  sistema de archivos de nuestro Windows XP en algun directorio que tengamos en mente ( yo uso /mnt/samba/winXP y /mnt/samba/win98 ). Esto lo podemos hacer de tres formas. La primera es  iniciandolo manualmente con los siguientes comandos:

# smbd -D
# nmbd -D


La segunda forma es editando el archivo /etc/inetd.conf y descomentar las siguientes lineas quitandoles el "#" que se les encuentra antepuesto:

#netbios-ssn    stream  tcp     nowait  root    /usr/sbin/smbd  smbd
#netbios-ns     dgram   udp     wait    root    /usr/sbin/nmbd  nmbd

Una vez editado y guardado el archivo debemos proceder a reinicar el proceso de inetd con el siguiente comando:

# killall -HUP inetd

La tercera forma de ejecutar el servidor Samba cada vez que nuestro sistema se inice es editando el script de incio del sistema rc.M que se encuentra ubicado en /etc/rc.d/. En este archivo debemos tener las siguientes lineas:

# Start Samba (a file/print server for Win95/NT machines).
# Samba can be started in /etc/inetd.conf instead.
if [ -x /etc/rc.d/rc.samba ]; then
  . /etc/rc.d/rc.samba start
fi

Además de esto debemos asegurarnos que el archivo /etc/rc.d/rc.samba tenga los permisos para ser ejecutado, esto lo hacemos con el siguiente comando:

# chmod 755 /etc/rc.d/rc.samba

Si por alguna razón deceamos que adicionalmente se nos monten y muestren el o los sistema(s) de archivo(s) remoto(s) debemos editar el archivo de incio rc.inet2 ubicado en /etc/rc.d/ y verificar que contenga las siguientes líneas:

# Mount remote (SMB) filesystems:
echo "Mounting remote (SMB) file systems:  /sbin/mount -a -t smbfs"
/sbin/mount -a -t smbfs
# Show the mounted volumes:
/sbin/mount -v -t smbfs
# Done mounting remote (SMB) filesystems.

El primer comando "mount" quiere decir que, todos los sistemas de archivos de tipo smbfs smencionados en el archivo /etc/fstab sean montados al inicio del sistema, ya que es ahí donde se ejecutan precisamente, excluyendo aquellos que contengan la opción "noauto". Y el segundo mount simplemente nos muestra los sistemas de archivos de tipo smbfs que se hayan montado con el comando antorior.

Es en este momento donde te estarás preguntado como podría ser esa línea que va en el fstab y bueno, he aquí la sintaxis :

[Archivo de sistema remoto a montar] [punto de montaje] [tipo del sistema de archivos] [opciones de montaje] [nº dump] [nº 0|1|2 fsck]

Para que todo quede más claro aquí les dejo un ejemplo:

//WINXP/SharedDocs    /mnt/samba/winxp/    smbfs    defaults    0   0  

o bien si nos pide password seria asi:

//WINXP/slacky /mnt/samba/winxp smbfs username=slacky,password=slackware,defaults,user 0 0

NOTA: Los directorios que vayamos a compartir deben tener los permisos "0755" y los archivos los permisos "0555", aunque esto es variable. Si tienes dudas sobre los permisos en Linux, puedes recurrir a la "Guía de Slackware 9.0" que se encuentra en este mismo sitio.

Ahora debemos editar o mas bien crear nuestro archivo de configuracion de Samba, el que se encuentra en el directorio /etc/samba/ y se llama "smb.conf".

La configuración de Samba puede ser hecha de dos formas. La primera es usar swat ( Samba Web Administration Tool ), utilidad que expliqué más arriba.. Para poder utilizar swat debemos editar nuestro archivo /etc/inetd.conf, descomentar la siguiente línea y reiniciar el demonio inetd como se muestra a continuación:

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

y luego :

# killall -HUP inetd

Luego simplemente debemos poner en nuestro navegardor "localhost:901" en donde se nos pedira user y password y luego podremos ver la utilidad swat.

La otra forma de configuración de Samba es editar directamente el archivo smb.conf, lo que describire en las siguiente líneas.

El archivo smb.conf se divine en tres secciones especiales, las cuales son [global], [homes] y [printers].

Los parametros definidos en la seccion [global] son los que se aplican al servidor Samba en su totalidad.

Los parámetros definidos en la seccion [homes] son aplicados cuando uno de los clientes intenta conectarse a un recurso compatirdo que NO existe en el servidor, pero existe en esta sección, Samba interpreta esta petición como si se tratara de un nombre de usuario, por lo que comparte el directorio del usuario en cuestión.

La sección [printers] trabaja de forma similar que [homes], pero para la(s) impresora(s). Esto permite que un usuario se conecte a cualquier impresora especificada en el archivo printcap.

A continuacion podrán observar un ejemplo del archivo "smb.conf" :

-- Inicio Archivo smb.conf --

# Opciones globales para el demonio smbd

[global]
workgroup = Mshome
server string = samba %v
netbios name = Slackware
encrypt passwords = yes
security = share

log level = 2
max log size = 50
log file = /var/log/samba/%m.log
debug timestamp = yes

use client driver = yes
load printers = yes
printing = cups
printcap = cups

# Directorio a compartir en el servidor Samba

[testing]
path = /var/samba/test/
writeable = no
guest ok = yes
browseable = yes
read only = yes

# Impresoras para compartir en la red

[printers]
path = /var/spool/samba
browseable = no
public  = yes
guest ok = yes
writeable = no
printable = yes

-- Fin archivo smb.conf --

Con el archivo listo podremos proceder a verificar si tenemos o no errores en nuestro archivo de configuración con el siguiente comando:

# testparm

Ahora debemos proceder a la configuración de nuestro cliente Windows 98 siguiendo los pasos que describire a continuación:

Las opciones que utilizaremos a continuación seran resumidas brevemente:

Dirección IP Slackware      : 192.168.0.1
Dirección IP cliente win98 : 192.168.0.2
Dirección IP cliente winXP: 192.168.0.3
Mascara de red                    : 255.255.255.0

Hemos de tener nuestra tarjeta de red devidamente instalada en el sistema, lo cual se puede verificar en Proiedades de "MI PC" -> Administrador de dispositivos. Luego debemos entrar en propiedades de "Entorno de red", en la pestaña "Configuracion" debemos tener los protoclos NetBEUI y TCP/IP instalados. Luego seleccionamos el protocolo TCP/IP de nuestra tarjeta de red y hacemos click en el botoncito de mas abajo que dice "Propiedades", luego se nos abrira una  ventana llamada "Propiedades de TCP/IP", en donde elegimos la pestaña llama "Direccion IP" y marcamos la opcion "Espesificar una direccion IP", donde obviamente pondremos la direccion IP que tendra nuestra tarjeta de red, que es 192.168.0.2, y luego nuestra mascara de subred que será 255.255.255.0. Luego de esto nos vamos a la pestaña llama "Puerta de enlace" en donde tecleamos la ip de la tarjeta de red de nuestro servidor Linux y luego le damos click al boton Agregar. Para concluir debemos ir a la pestana llamada "Configuracion DNS" y seleccionamos la  opcion Activar DNS, es aqui donde escribimos un nombre para el campo "Host", el cual puede ser win98 ( ingenioso he? ) y luego en  el campo inferior a "Orden de busqueda del servidor DNS" tecleamos el dns primario de nuestro ISP, que en mi caso es 206.137.97.254 ( Entel  :|) y luego click  en el boton "Agregar" y luego en "Aceptar" y "Aceptar" .  Luego de eso todo estara listo en nuestro cliente, solo nos falta reiniciar ( es windows :| ) y nuestro cliente estara en condiciones de funcionar perfectamente.

Con la configuración finalizada de nuestro Windows 98 podemos proceder a compatir un directorio de la siguiente manera:

Click en boton derecho sobre el directorio ( o carpeta como dicen) que deceamos compatir, ahora seleccionamos la opcion "Compartir..." lo que nos dejara dentro de la pestaña Compartir, mostrandonos ahi los campos que debemos llenar, como lo son "Nombre del recurso compartido" y "Comentario". Ademas debemos escoger un "Tipo de accesso" al recurso, el cual puede ser "solo lectura","completo" o "depende de la contraseña.  La opcion "Solo lectura" depende de una contraseña si nosotros lo deceamos, del mismo modo la alternativa "Completo" depende de una contraseña si lo deceamos, pero la opcion "Depende de la contraseña" es algo diferente, ya que se podria decir que es la mezcla de la primera y segunda opcion, lo que significa que dependiendo de la contraseña que ingresemos al tratar de utilizar el recurso, el tipo de acceso sera de "solo lectura" o "completo".

Y ahora debemos configurar nuestro cliente Windows XP siguiendo estos pasos:

Start -> Control Panel -> Network and Internet conections -> Set up or change your home or small office network -> next -> next -> This computer connect to the internet through another computer on my network or through a residential gaterway (segunda opcion), mas claridad click on "view an example" -> next

Luego debemos rellenar los campos "Computer description", "Computer name" y despues next.

Ahora debes rellenar "Workgroup name" y click en next.

Luego se nos muestra un resumen con las opciones y campos que hemos rellenado y click en next para aplicar la configuración al sistema. Posteriormente  de esperar un momento nos aparecerá la última pantalla ( you´re almost done..).

En mi caso aqui escogere la opcion "Just finish the wizard, I don´t need run the wizard on other computers" (la última opción) y hacemos click en siguiente y finalmente hacemos click en finish y todo estará listo.

Ahora debemos configurar debidamente nuestra ethernet , para esto siguimos los pasos que mostrare:

Start -> Control Panel -> Network and Internet Connections -> Network Connections boton derecho sobre la conexion que tengamos creada en esta seccion, para asi poder reconfigurarla . seleccionamos "properties" -> selecciona el item "Internet Protocol (TCP/IP)" y luego click en el boton que dice "Properties" -> seleccionas la opcion llamada " Use the following IP address " y rellenas los campos pertinentes. A continuacion la configuracion que yo uso:


IP address : 192.168.0.3                            <-- IP de la ethernet en el Windows XP
Subnet mask: 255.255.255.0                     <-- Mascara de subred para el Windows XP
Default gaterway: 192.168.0.1                 <-- IP del Gaterway ( IP ethernet Slackware )

Luego Selecciono la segunda opción de la segunda mitad llamada " Use the following DNS server address y relleno el primer campo, que como en mi caso mi ISP ( porveedor servicio Internet ) es Entel, usaré sus DNS como mostraré a continuación:

Preferred DNS server: 206.137.97.254    <-- DNS primario de mi ISP
Alternate DNS server:                              <-- Lo dejo en blanco

Luego click en "OK" y nuevamente click en "OK" ( mi dedo se gasta tantos click :( ..)

NOTA: Por si alguien tiene dudas cabe mencionar que la mascara de red o subred  SIEMPRE debe ser la misma para todas las maquinas, en el caso de este documento es 255.255.255.0 para aquellos que no lo habían notado :D .

Ahora que nuestro cliente Windows XP se encuentra configurado procedemos a exportar los recursos compartidos, para esto podemos utilizar los comandos smbmount o mount.

Una cosa muy importante antes de exportar los recursos es saber que recursos podemos exportar y cuales no, pues para esto hay un programa llamado smbclient que nos muestra junto con el host de uno de los cliente su(s) directorio(s) compartido(s). Su sintaxis es basicamente la siguiente:

smbclient [nombre del servicio] [password] [-b <tamaño del buffer>] [-d nivel_de_depuracion ]

Por ejemplo:

# smbclient -L win98

Lo que generara una salida mas o menos como esta:

        Sharename              Type       Comment
        ---------                     ----          -------
        FLOPPY                 Disk        disket
        CDROM                 Disk        unidad de cdrom
        SHAREDDOCS     Disk     
        IPC$                         IPC         Comunicación remota entre procesos

        Server                     Comment
        ---------                     -------
        SLACKWARE       samba 3.0.1
        WIN98                    windows 98 segunda edicion

        Workgroup              Master
        ---------                      -------
        MSHOME              WIN98


Como bien describí mís arriba podemos ver los recursos compartidos del host "win98" junto con sus respectivos comentarios y otros detalles como su grupo de trabajo ( MSHOME ).

El comando smbmount se utiliza de la siguiente forma:

# smbmount [servicio] [ punto de montaje [ -o opciones]

Por ejemplo:

# smbmount //WINXP/SharedDocs/ /mnt/samba/winxp -o username=pepe,fmask=700,ro
Password:   <-- ingresamos password del recurso

EL uso de mount es el siguiente:

mount [Recurso a exportar] [tipo de archivo de sistema a exportar] [ punto de montaje]

Por ejemplo:

# mount //WINXP/SharedDocs -t smbfs /mnt/samba/winxp/

Bueno, eso es todo, espero que este howtito te haya ayudado en todo lo que tiene relación con Samba de forma básica, también cabe destacar que esta completamente orientado a Linux Slackware, ya que es así el enfoque que le dí, pero lo que varía de una distribución como Redhat o Debian a Slackware es la simple estructura de sus directorios. Si tienes dudas o si deceas saber más sobre parametros que utilicé en este documento u alguna otra opcion relacionada con lo que leiste a lo largo de él, tienes a tu disposición el man, info, google, la misma herramiento de administracion de Samba ( swat ) trae una gran cantidad de ayuda y definiciones, y si esto no te es suficiente siempre podras recurrir a Google o ver la documentacion de Samba en su sitio web http://www.samba.org/. Mi intención NO es la de detallar alguno de los comandos, archivos o conceptos que han sido utilizados a lo largo de este documento.