El servidor Samba es una colección de utilidades que nos permiten compartir ficheros e impresoras con clientes y servidores windows desde nuestro entorno Linux de forma transparente para cualquier usuario Windows o Linux.
No solamente podemos compartir archivos en la red, sino que también tiene la posibilidad de convertirse en un servidor de dominio principal o secundario (con la ayuda de LDAP), o también llamada PDC o BDC en windows respectivamente, aunque no vamos a entrar en este tema, ya que no es el objetivo de este artículo.
Antes de empezar, indicar que esta configuración de Samba ha sido probada en Debian Sarge, Etch y Lenny, y en principio hasta Ubuntu 9.04 inclusive. No puedo garantizar que funcione en versiones mas recientes, como Debian Squeeze o Ubuntu 10.10, pero es posible que funcione perfectamente o con ligeros cambios.
Manos a la obra, Vamos a instalar el servidor Samba desde el synaptic o desde linea de comandos como root de la forma:
# apt-get install samba
A continuación se instalará el servidor con todas las dependencias necesarias. Si no lo instala, también es interesante que se instale el paquete smbclient y el smbfs, necesarios para poder montar desde nuestro Linux unidades de red compartidas en equipos Windows.
Una vez instalado tenemos que realizar la configuración de las opciones generales de Samba personalizandolo.
En nuestro caso vamos a tocar las siguientes variables como root en el archivo smb.conf de la forma:
# nano /etc/samba/smb.conf
workgroup = MIWORKGROUP
dos charset = 850
unix charset = ISO-8859-15
display charset = ISO-8859-15
realm = NOMBRE_SERVIDOR
server string = %hwins support = no
interfaces = 111.22.33.0/24 eth0domain logons = no
domain master = no
local master = no
Se especifica el grupo de trabajo (workgroup), correspondiente a la red que nos estamos moviendo. Este es el aquivalente existente de los grupos de trabajo window.
Los charset son la codificación de caracteres con la que se va a mostrar en la red y guardar en el servidor, los nombres de los archivos que manejemos. Es posible que «dos charset» no sea estrictamente necesario (dependiendo de la versión de Debian o Ubuntu que se maneje puede estar obsoleto).
realm y server string es el nombre del servidor samba y como se va a mostrar dicho nombre en la red respectivamente.
interfaces, son el rango de IP’s al cual el servidor Samba responderá a solicitudes y sobre que tarjeta (eth0, eth1, etc…).
El /24 indica que vamos a atender a cualquier clientes cuya IP de máquina este dentro del rango 111.22.33.1 hasta 111.22.33.255. También se puede especificar una o varias IP’s concreta.
domain logons, domain master, local master y wins es para poder activar nuestro servidor samba, para comportarse como un servidor de dominio de red, pero como no es nuestra intención, dejamos estas lineas como hemos especificado antes.
Vamos a poner un caso práctico para dar acceso al servidor samba a varios usuarios en las siguientes condiciones:
Directorios compartidos Samba:
Directorio local Nombre Directorio en la red
——————- —————————/media/datos/conta Contabilidad
/media/datos/pro ProyectosUsuarios y permisos de acceso:
Usuario Acceso a Carpeta Permisos
——— —————- ———-pepito
Contabilidad Lectura y Escritura
Proyectos Solo Lecturajuanito
Contabilidad Sin acceso
Proyectos Lectura y EscrituraResto
Todas Solo Lectura a todas las carpetas
usuario
Crear el grupo todos para asignar al Resto usuario
Con este planteamiento, vamos a dar de alta los usuarios en el sistema de la forma:
# adduser pepito
# adduser juanito
# adduser <resto_usuarios>
Al ejecutar este comando nos pedirá una serie de datos por cada usuario, los cuales no son obligatorios a excepción del password que nos va a pedir por cada usuario. Este password no necesariamente tiene que ser el mismo que se establezca para acceder como usuario Samba, ya que Samba tiene su propia gestión de contraseñas distinta e independiente del usuario en el sistema.
Antes hemos especificado que el resto de usuarios van a tener acceso de solo lectura a todas las carpetas compartidas, por tanto como tiene un común denominador, vamos a crear un grupo para estos usuarios y asociaremos a todos ellos este grupo, a excepción de los usuarios pepito y juanito que tienes sus peculiaridades.
Para asociar un grupo a un usuario, primero tenemos que crear ese grupo y después asignar este a cada uno de los usuarios que queramos que formen parte, de la forma:
# addgroup todos
# addgroup <nombre_usuario> todos
Al poner addgroup [nombre_usuario] todos lo que hacemos es asignar al usuario que indiquemos el grupo todos. Este último comando hay que realizarlo por cada usuario que queramos que pertenezca a dicho grupo.
Para finalizar el alta de usuarios, tenemos que dar de alta estos en el servidor samba de la forma:
# smbpasswd -a pepito
# smbpasswd -a juanito
# smbpasswd -a <resto_usuarios>
Aquí nos volverá a pedir password, que puede ser diferente al que se dio de alta al crear el usuario en el sistema.
Con todo esto ya tenemos Samba instalado y los usuario dados de alta, pero esto no es suficiente. Necesitamos definir en el fichero smb.conf, las carpetas que queremos compartir y a que usuarios y/o grupos damos acceso a estas.
Siguiendo nuestro ejemplo la definición se realizaría de la siguiente forma:
Se recomienda meter estas lineas de codigo al final del fichero de configuración.
# nano /etc/samba/smb.conf
[Contabilidad]
comment = Contabilidad y Facturación clientes
path = /media/datos/conta
invalid users = juanito
valid users = @todos
admin users = pepito
read only = No
browseable = Yes[Proyectos]
comment = Proyectos de I+D
path = /media/datos/pro
valid users = pepito, @todos
admin users = juanito
read only = No
browseable = Yes
– invalid users -> Es donde se especifica que usuario o grupos no tendrán acceso al recurso.
– Valid users -> Especifica los usuarios o grupos que tendrán acceso de solo lectura al recurso.
– admin users -> Especifica los usuarios o grupos que tendrán acceso de escritura y lectura al recurso.
– read only -> Acceso de solo lectura al recurso.
– browseable -> La carpeta será visible o no en la red. Esto no implica que se tenga o no acceso a la misma, sino que será una carpeta oculta a los ojos de los que no sepan de su existencia.
invalid users prevalece sobre las condiciones valid users y admin users, es decir, que si un usuario o grupo esta dado de alta en alguna de las dos condiciones anteriores y a la vez en invalid users, ese usuario o grupo no tendrá acceso al recurso compartido. Igualmente si un usuario o grupo no figura en ninguna de las tres condiciones, tampoco tendrá acceso al recurso.
Teniendo en cuenta esto y siguiendo el ejemplo dado, podríamos suprimir la linea «invalid users = juanito» y el acceso al recurso «Contabilidad» sobre este usuario sería el mismo, este o no este la linea. Simplemente se ha incluido esta linea para dar una explicación mas completa.
Un caso práctico de valid users sería si juanito perteneciese al grupo @todos (que no es el caso) y quisieramos excluir solamente a juanito del acceso al recurso «Contabilidad«.
También existen otras variables como:
create mask -> Establece mascara por defecto para la creación de archivos. Ejemplo: 0700
directory mask -> Establece mascara por defecto para la creación de directorios.
Estas siguen las mismas pautas que el comando chmod.
Por último ya solo nos queda reiniciar el servidor Samba como root de la forma:
# /etc/init.d/samba restart
Ya solo queda probar que accedemos a los recursos de red desde Window o Linux hacia el servidor Samba de la forma habitual en cada caso.