Samba en Slackware

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.

Samba en Slackware

Autor, Augusto Sotelo L.



Tabla de contenidos

* Introducción
* Instalando Samba
* Descripción de smbd y nmbd
* Utilidades del paquete Samba
* Iniciando Samba
* Creando el archivo de configuración de Samba
* Configurando los clientes Windows
* Verificando los recursos compartidos
* Exportando el sistema de archivos smbfs
* Despedida

Introduccion

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.

Instalando Samba

Instalando Samba desde el paquete Slackware

Para comenzar dire que debemos tener instalado el paquete samba-2.2.8a-i386-1.tgz (version de samba en slackware-9.1), Si no es asi podremos encontrarlo en nuestro CD1 de Slackware-9.1 o en slackware-9.1/slackware/n/samba-2.2.8a-i386-1.tgz. Una vez que tengamos el paquete podremos instalarlo en nuestro sistema utilizando el siguiente comando:

root@shell:~# installpkg samba-2.2.8a-i386-1.tgz

Compilando el paquete Samba desde las fuentes

Ahora bien, si nos encontramos en el supuesto caso que queremos instalar Samba desde las fuentes, siempre tenemos la opcion de descargarnos el codigo fuente desde www.samba.org para compilarlos nosotros mismos. No dare mayor detalle de como compilar samba desde las fuentes, pero a grandes rasgoz es asi:

user@shell:~$ tar zxfv samba-a.b.c-iy86.tar.gz
user@shell:~$ cd samba-a.b.c-iy86
user@shell:~$ ./configure
user@shell:~$ make
user@shell:~$ su
password:
root@shell:~# 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 la sección documentación. 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.

Descripción de smbd y nmbd

Ahora vamos a lo contundente. Es en esta etapa donde describire basicamente algunos conceptos que nos facilitaran el camino. Es aquí donde me referiré a los demonios smbd y nmbd.

El demonio smbd

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

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.

Utilidades del paquete Samba

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 programa 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:

Es 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 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). "Válido" 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.

Iniciando Samba

Primera forma de iniciar Samba

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:

root@shell:~# smbd -D
root@shell:~# nmbd -D

Segunda forma de iniciar Samba

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:

root@shell:~# killall -HUP inetd

Tercera forma de iniciar Samba

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:

root@shell:~# chmod 755 /etc/rc.d/rc.samba

Creando el archivo de configuración de Samba

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".

Creando smb.conf con SWAT

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:

root@shell:~# killall -HUP inetd

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

Creando smb.conf a mano

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:

root@shell:~# testparm

Configurando los clientes Windows

Configurando el cliente Windows 98

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 Microsoft Windows 98 : 192.168.0.2
Dirección IP Cliente Microsoft Windows XP : 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.

Compartiendo directorios en el cliente Windows 98

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".

Configurando el cliente Windows XP

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 seguimos los pasos que mostraré: 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: <- DNS Secundario de mi ISP(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.

Verificando los recursos compartidos

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 ] [-d nivel_de_depuracion ]

Por ejemplo:

root@shell:~# 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 ).

Exportando el sistema de archivos smbfs

Montando smbfs en el inicio del sistema

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 mencionados 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.

Editando el /etc/fstab

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.

Montando smbfs con ayuda de smbmount

Si por alguna razón no decearamos automontar el sistema de archvios smbfs al inicio del sistema, podemos recurrir a la utilidad smbmount como se muestra a continuación:

root@shell:~# smbmount [servicio] [ punto de montaje [ -o opciones]

Por ejemplo:

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

Montando smbfs con mount

Siempre tendremos la opción de utilizar el conocido mount como se aprecia a continuación:

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

Por ejemplo:

root@shell:~# mount //WINXP/SharedDocs -t smbfs /mnt/samba/winxp/

Despedida

Bueno, eso es todo, espero que este documento 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 parámetros 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 herramienta 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.