SAMBA para compartir carpetas en una red hogareña

faktorqm
10/28/2008 - 08:54

Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que ordenadores con Linux, Mac OS X o Unix en general se vean como servidores o actúen como clientes en redes de Windows. Samba también permite validar usuarios haciendo de Controlador Principal de Dominio (PDC), como miembro de dominio e incluso como un dominio Active Directory para redes basadas en Windows; aparte de ser capaz de servir colas de impresión, directorios compartidos y autenticar con su propio archivo de usuarios.

Consideraciones previas:


Este tutorial está orientado exclusivamente a aquellos usuarios que son nuevos y principiantes en entornos GNU/Linux, para las distribuciones Ubuntu, Kubuntu y Xubuntu. Por lo tanto, este tutorial omite en reiteradas oportunidades aspectos de configuración avanzados y otro tipo de dificultades que no se consideran necesarias para una red hogareña ni para usuarios principiantes, así como aspectos técnicos y referidos a normas internacionales. También se considera que la red hogareña posee buen funcionamiento, buen mantenimiento y se ha utilizado anteriormente en otros sistemas operativos sin dificultades.

Convenciones:

Las líneas que disponen el signo "<" adelante se deben ser introducidas en la consola.
Las líneas que disponen el signo ">" adelante son las que se imprimen en la consola como salida del comando ejecutado.

Índice:

1.0- Introducción a samba:
1.1- El protocolo SMB.
1.2- Acerca de samba.
1.3- Composición del paquete SAMBA.
1.4- El archivo smb.conf.
1.5- Testparm, la utilidad de detección de errores de samba.
2.0- Compartir carpetas sin usuario ni contraseña.
3.0- Compartir carpetas utilizando usuario y contraseña.
4.0- FAQ - Preguntas frecuentes.
4.1- ¿Cómo hago para detener el servicio samba?
4.2- ¿Cómo hago para eliminar usuarios que creé?
4.3- ¡Mi Windows no me permite explorar el grupo de trabajo y estoy seguro de que hice correctamente este COMO!
5.0- Bibliografía.

1.0- Introducción a samba:

1.1- Introducción acerca del protocolo SMB:

SMB (Server Message Block) es un protocolo creado en 1985 por IBM (International Business Machines). Algunas veces es referido también como CIFS (Common Internet File System, http://samba.org/cifs/) tras ser renombrado por Microsoft en 1998. Entre otras cosas, Microsoft añadió al protocolo soporte para enlaces simbólicos y duros así como también soporte para ficheros de gran tamaño. Por mera coincidencia esto ocurrió por la misma época en que Sun Microsystems hizo el lanzamiento de WebNFS (una versión extendida de NFS, Network File System, http://www.sun.com/software/webnfs/overview.xml).

SMB fue originalmente diseñado para trabajar a través del protoclo NetBIOS (Network Basic Input/Output System), el cual a su vez trabaja sobre NetBEUI (NetBIOS Extended User Interface, o Interfaz de Usuario Extendida de NetBIOS), IPX/SPX (Internet Packet Exchange/Sequenced Packet Exchange, o Intercambio de paquetes interred/Intercambio de paquetes secuenciales) o NBT (NetBios over TCP), aunque también puede trabajar directamente sobre TCP/IP (Transfer Control Protocol/Internet Protocol, o Protocolo de Control de Transmisión/Protocolo de Internet)

1.2- Introducción acerca de Samba:

SAMBA (http://www.samba.org/) es un conjunto de programas, originalmente creados por Andrew Tridgell y actualmente mantenidos por The SAMBA Team (http://www.samba.org/samba/team.html), bajo la Licencia Pública General GNU (http://www.gnu.org/), y que implementan en sistemas basados sobre UNIX el protocolo SMB. Sirve como reemplazo total para Windows NT, Warp, NFS o servidores Netware.

Este protocolo permite compartir varios recursos diferentes:

  • * El acceso a las impresoras conectadas físicamente a las máquinas.
  • * El acceso a los directorios compartidos.

El paquete SAMBA incluye utilidades para controlar el acceso de los archivos con la misma soltura que un WindowsNT. Veremos más adelante como configurarlo en detalle, pero es posible:

  • * Proteger por contraseña el acceso a un directorio compartido.
  • * Proteger con una contraseña personificada para cada usuario, y dotar de permisos de acceso individualizados.

1.3- Composición del paquete SAMBA:

Dos o tres demonios se encargan de ofrecer los servicios del conjunto de aplicaciones de Samba. El primero es el smbd, el segundo de ellos es el nmbd, y el tercero es el winbindd.

SMBD

es el demonio que se encarga de los recursos compartidos: ficheros, impresoras, etc, pero también del control del acceso a los recursos. Gestiona los permisos de los diferentes clientes una vez que estos han sido identificados.

NMBD

se ocupa de anunciar servicios. Es decir, se encarga de informar a las máquinas presentes en la red sobre cuales son los recursos disponibles. Este demonio maneja también la resolución de nombres de NetBIOS (Network Basic Input/Output System). Puede para ello comunicarse con un servidor WINS (Windows Internet Naming Service) presente en la red.

WINBINDD

es un demonio que se inicia cuando Samba es miembro de un dominio Windows NT4 o ADS o cuando tiene relaciones de confianza con otro dominio. Éste demonio se referirá al archivo smb.conf para buscar la presencia de los parametros IdMap (Identity Mapping), UID (User Identifier) y GID (Group Identifier). Si son encontrados, winbindd utilizará los valores especificados para la asignación UID y GID. Si estos parámetros no existen, winbindd se iniciará pero no será capaz de asignar ningún UID ni GID.

 Nota: La resolución de nombres consiste en obtener una equivalencia entre la dirección IP de cada computadora y el nombre de la máquina.

1.4- El archivo smb.conf:

Samba utiliza un único archivo de configuración, llamado smb.conf , sito en /etc/samba/ que posee todas las entradas de configuración en modo texto, al estilo de los viejos archivos .ini de Windows. Para explicar este archivo, nada mejor que trabajar sobre un ejemplo. A continuación, expongo un archivo de configuración muy muy básico, que como verán es bastante autocomprensible:

[global]
workgroup = migrupo
security = share
[compartido]
path = /home/publico
read only = no
guest ok = yes

Las palabras puestas entre corchetes ("[" y "]") significan lo que se llama una llave. Una llave sirve para establecer diferentes cosas. En este caso, utilizaremos 2 llaves, la " global " y la " compartido ". La llave global establece directivas sobre cómo debe comportarse samba. En este caso, le especificamos a samba como se llama el grupo de trabajo.

La otra llave ( compartido ) es una llave donde cada uno puede establecer su nombre como le parezca, es decir, cada llave que se encuentre abajo de global será el nombre de como verán los otros usuarios de la red un recurso compartido.

En este caso cuando alguien se conecte a nuestra PC verá un recurso compartido llamado "compartido", y no necesariamente se tiene que llamar igual que la carpeta ("publico").

Ahora revisemos un poco para qué sirve cada clave:

NOTA: Algunas no aparecen en este ejemplo, pero en archivos de configuración más avanzados es altamente probable que las encuentren.

"workgroup" : Esta clave define en que grupo de trabajo vamos a encontrarnos con los otros PC's de la red. Todos los PC's de la red deben tener el mismo nombre de grupo de trabajo, de lo contrario, no podrán compartir los recursos de red.

"security" : Esta clave nos permite elegir entre compartir carpetas sin contraseña, o sea, a nivel servicio, o a nivel usuario, mediante la utilización de un usuario y una contraseña.

"path" : Esta clave se utiliza para indicarle a samba la ruta de la carpeta que queremos compartir, independientemente del nombre que elijamos para compartirla. Recordar que para compartir una carpeta, primero debemos asegurarnos de poseer los permisos necesarios para efectuar las operaciones que consideremos oportunas. Si en una carpeta tenemos acceso de sólo lectura, y compartimos la carpeta para que los otros usuarios de la red puedan cambiar el contenido, no podrán debido a que la carpeta no tiene los permisos requeridos.

"read only" : Como su nombre lo indica, esta clave establece si la carpeta compartida debe ser de solo lectura o no. Los valores posibles son "no" y "yes".

"guest ok" : Esta clave es para habilitar lo que se llama el invitado, es para acceder sin usuario a una carpeta, y podamos verla. También supone un riesgo de seguridad esta clave, pero como estamos en un red hogareña, por el momento no nos interesa.

"netbios name" : Esta clave nos permite establecer el nombre de nuestra computadora en la red.

"comment" : Con esta clave, podremos agregarle un comentario a cada carpeta compartida.

"read list" : Es la lista de usuarios que tienen acceso de sólo lectura a este servicio. Los usuarios de esta lista NO poseerán el acceso de escritura, por que la opción de sólo lectura está activada.

"valid users" : Es la lista de usuarios que están permitidos para iniciar sesión en este servicio.

"write list" : Es la lista de usuarios que tienen acceso de escritura y lectura a este servicio. Los usuarios de esta lista SI poseerán el acceso de lectura, por lo tanto no es necesario ponerlo junto con "read list". Aquí se utilizan juntos con fines de aprendisaje.

"encrypt passwords" : Con esta clave le indicaremos a samba si queremos encriptar las contraseñas almacenadas en el sistema.

De esta forma, si yo cambio el archivo smb.conf de la siguiente manera:

[global]
workgroup = migrupo
security = share
[ejemplo]
path = /home/publico
read only = no
guest ok = yes 

Los otros usuarios de la red verán un recurso compartido llamado "ejemplo".
Si quiero compartir más de una carpeta, en este ejemplo llamada "datos", puedo hacer lo siguiente:

[global]
workgroup = migrupo
security = share
[publico] 
path = /home/publico
read only = no
guest ok = yes
[segunda] 
path = /media/datos
read only = yes
guest ok = yes  

y los nombres de los recursos compartidos serán "publico" y "segunda" .

Para modificar el nombre con el que aparecemos en la red, podemos agregar la siguiente línea en la llave global:

netbios name = <nombre>  

Donde <nombre> puede ser cualquiera que nos guste, recordar hacer testparm para evitar problemas por posibles restricciones en los nombres netBIOS.

Para cambiar la descripción de una carpeta, debajo de cada llave con el nombre de la carpeta podemos agregar:

comment = Los archivos de la mula  

Así, un smb.conf de ejemplo nos podria quedar:

[global]
workgroup = migrupo
netbios name = pc_ricardo
security = share
[compartido]
path = /home/publico
read only = no
guest ok = yes
[emule]
path = /home/ricardo/descargas
comment = Los archivos de la mula
read only = yes
guest ok = yes
[mp3]
path = /home/ricardo/mp3
comment = Musica
read only = yes
guest ok = yes  

1.5- testparm, la utilidad de corrección de errores de samba:

Para probar la configuración, existe un programa llamado TESTPARM que lee el archivo de configuración y reporta cualquier error de sintaxis. Cualquier parámetro de configuración aún no establecido será ajustado a su valor por defecto. Recuerde que su archivo de configuración puede estar sintácticamente correcto pero no apropiado para su uso, por ejemplo, si no creamos la carpeta "publico" en /home/ testparm EN NINGÚN CASO devolverá código de error.

Para estar seguros de que todo ande bien, adjunto la salida de testparm en mi computadora. Si no es idéntica la salida, no importa, cambia dependiendo de cada configuración.

< testparm 
> Load smb config files from /etc/samba/smb.conf
> Processing section "[compartido]"
> Loaded services file OK.
> Server role: ROLE_STANDALONE
> Press enter to see a dump of your service definitions
> [global]
> workgroup = migrupo
> security = share
> [compartido]
> path = /home/publico
> read only = no
> guest ok = yes

Ahora bien, MODIFIQUÉ A PROPÓSITO el archivo smb.conf para que vean como testparm nos devela a donde se encuentra el error. Le sustraje la última letra a la primera clave, "workgroup" fue reemplazado por "workgrou" y ésta es la salida generada por testparm:

< testparm
> Load smb config files from /etc/samba/smb.conf
> Unknown parameter encountered: "workgrou"      		
> Ignoring unknown parameter "workgrou"      		
> Processing section "[compartido]"
> Loaded services file OK.
> Server role: ROLE_STANDALONE
> Press enter to see a dump of your service definitions
> [global]
> security = share
> [compartido]
> path = /home/publico
> read only = no
> guest ok = yes

Fíjense cómo testparm nos avisa del error y automáticamente elimina la clave errónea, y, si levantáramos el servicio con este archivo de configuración, ignoraría las palabras clave sintácticamente incorrectas, provocando esto el mal funcionamiento, debido a que no estamos presentes en ningún grupo de trabajo.

Hasta aquí hemos repasado un poco de teoría, ahora vayamos a la práctica.

2- Cómo compartir carpetas sin contraseña:

Instalación de los paquetes correspondientes:

Debemos instalar desde los repositorios los siguientes paquetes para asegurarnos de poseer todas las herramientas necesarias para compartir archivos e impresoras de manera correcta:

< sudo apt-get install -udV samba samba-common samba-doc-pdf gsambad  
< sudo apt-get install samba samba-common samba-doc-pdf gsambad 

Los paquetes samba y samba-common son los básicos de samba, samba-doc-pdf como su nombre lo indica es la documentación del mismo en formato PDF (Portable Data Format) y gsambad es una utilidad de configuración gráfica de samba.
Una vez terminado el proceso (exitoso) de instalación, procedemos a configurar samba para poder comenzar a compartir.

Lo primero que tenemos que hacer, es generar una copia de back-up del archivo de configuración de samba. Luego, independientemente de qué sistemas operativos tengamos en las computadoras, establecer un grupo de trabajo (el mismo en todas) y un nombre para cada computadora (distinto en todas).

Para lograr lo primero hacemos:

 < sudo cp /etc/samba/smb.conf /etc/samba/smb_old_0.conf  

NOTA: El número se debe a que probablemente debamos configurar en reiteradas oportunidades este archivo, por lo tanto debemos generar distintos back-up's del mismo por razones de seguridad, de esta manera sabremos que el 0 (cero) es el predeterminado de instalación.

Para establecer el grupo de trabajo simplemente consta en ponerse de acuerdo sobre el nombre del mismo y poner el mismo en todas las computadoras, tengan el sistema operativo que tengan.

Ahora vamos a compartir una carpeta de ejemplo, la crearemos por una cuestión de comodidad en /home/

< sudo mkdir /home/publico  

Una vez creada la carpeta, debemos asignar los permisos necesarios para que los otros usuarios puedan acceder:

* Si queremos que los usuarios puedan escribir sobre la carpeta compartida ponemos:

< sudo chmod 755 /home/publico  

* Si queremos que SOLO PUEDAN LEER (no podrán escribir ni modificar ni borrar archivos) ponemos:

< sudo chmod 555 /home/publico  

Ahora bien, hecho esto pasamos a configurar directamente el archivo smb.conf. Por ahora, vamos a borrar completamente el contenido del archivo y vamos a copiar y a pegar exactamente esto:

para editar el archivo desde la interfaz gráfica: <sudo gedit /etc/samba/smb.conf
para editar el archivo desde la consola (terminal): <sudo nano /etc/samba/smb.conf

[global]
workgroup = migrupo
security = share
[compartido]
path = /home/publico
read only = no
guest ok = yes 

Guardamos el archivo y ahora hay que comprobar si el archivo de configuración es correcto, para esto escribimos "testparm" en la terminal. (Ver apartado 1.5- Testparm, la utilidad de detección de errores de samba.)
Si todo salió bien, ahora debemos reiniciar el servidor samba para que tome los cambios propuestos, para esto hacemos:

< sudo /etc/init.d/samba restart  

Debemos tener una salida como esta:

>* Stopping Samba daemons... [ OK ]
>* Starting Samba daemons... [ OK ]

Con todo lo anterior deberíamos ser capaces de entrar desde un equipo con windows o linux a la carpeta /home/publico sin necesidad de tener nombre de usuario ni password:

* Desde Windows colocamos en la barra de direcciones de alguna ventana:

\\<direccion>\publico

* Desde Linux (que tenga instalado el paquete samba-client) abrimos una carpeta y colocamos en la barra de direcciones:

smb://<direccion>/publico/

donde <direccion> es "la dirección IP privada" del equipo linux que contiene a la carpeta /home/publico. Desde sistemas operativos Windows también podemos acceder desde Entorno de red (o Mis sitios de red) por el explorador de Windows.

3- Cómo compartir carpetas con usuario y contraseña:

Supongamos ahora que tenemos en una casa, 3 computadoras, y 3 usuarios, pero queremos que cada usuario acceda a una carpeta distinta, entonces debemos crear los usuarios los cuales tendrán acceso al recurso compartido. Para esto hacemos:

< sudo useradd -s /sbin/nologin <nombre>  

Donde <nombre> va el nombre de usuario que utilizaremos para que el otro usuario pueda ingresar.

Ejemplo:

< sudo useradd -s /sbin/nologin juan
< sudo useradd -s /sbin/nologin martin

Una vez creados el/los usuario/s debemos asignarles una contraseña, y para esto hacemos: 

< sudo smbpasswd -a <nombre>  

Donde <nombre> va el nombre de usuario que utilizamos para los usuarios que creamos antes.

Ejemplo:

< sudo smbpasswd -a juan 
< sudo smbpasswd -a martin

Cuando ejecutemos estas líneas en la consola nos pedirá que ingresemos la contraseña, y luego la misma otra vez, así no cometemos errores de tipeo. Yo a propósito cometí un error con el segundo usuario para que vean la salida del programa.

< sudo smbpasswd -a juan 
> New SMB password:
> Retype new SMB password:
> Added user juan.
< sudo smbpasswd -a martin 
> New SMB password:
> Retype new SMB password:
> Mismatch - password unchanged.
> Unable to get new password.
< sudo smbpasswd -a martin 
> New SMB password:
> Retype new SMB password:
> Added user martin. 

Ahora debemos crear otra carpeta para compartirle al otro usuario, asignarle permisos de lectura y escritura a las dos carpetas, para poder manejar los permisos a nivel usuario (hasta ahora lo veníamos haciendo en modo servicio):

< sudo mkdir /home/prueba
< sudo chmod 755 /home/publico
< sudo chmod 755 /home/prueba

Una vez generados los usuarios y creadas las carpetas con los permisos, vamos a modificar el smb.conf, para esto hacemos:

< sudo cp /etc/samba/smb.conf /etc/samba/smb_old_1.conf 

Para editar el archivo desde la interfaz gráfica:

< sudo gedit /etc/samba/smb.conf 

Para editar el archivo desde la consola (terminal):

 < sudo nano /etc/samba/smb.conf 
[global]
workgroup = migrupo
netbios name = pc_ricardo
security = user
encrypt passwords = yes
[compartido]
path = /home/publico
comment = Carpeta de prueba de juan
valid users = juan
write list = juan
read list = juan
[tests] 
path = /home/prueba 
comment = Carpeta de prueba de martin
valid users = martin
write list = martin
read list = martin

Algo así nos quedaría para que ninguno tenga acceso a la otra carpeta que no deba. Guardamos y para que samba tome los cambios y testeamos que todo haya salido bien utilizando testparm:

< testparm 
> Load smb config files from /etc/samba/smb.conf
> Processing section "[compartido]"
> Processing section "[tests]"
> Loaded services file OK.
> Server role: ROLE_STANDALONE
> Press enter to see a dump of your service definitions
> [global]
> workgroup = migrupo
> netbios name = pc_ricardo
> [compartido]
> comment = Carpeta de prueba de juan
> path = /home/publico
> valid users = juan
> read list = juan
> write list = juan
> [tests]
> comment = Carpeta de prueba de martin
> path = /home/prueba
> valid users = martin
> read list = martin
> write list = martin

Ahora debemos reiniciar el servicio para que samba tome los cambios correctamente:

< sudo /etc/init.d/samba restart  

Muy bien, ahora el usuario "juan" sólo tiene acceso a la carpeta "compartido" y el usuario "martin" sólo tiene acceso a la carpeta "tests".

Ahora imaginemos que necesitamos que un tercer usuario ingrese a la carpeta de juan en modo SOLO LECTURA, NO a la de martin y que tenga acceso de lectura/escritura a su propia carpeta. Para esto hacemos:

< sudo mkdir /home/jorge
< sudo chmod 755 /home/jorge
< sudo useradd -s /sbin/nologin jorge
< sudo smbpasswd -a jorge
< sudo cp /etc/samba/smb.conf /etc/samba/smb_old_2.conf
< sudo nano /etc/samba/smb.conf

y modificamos el archivo de la siguiente manera:

[global]
workgroup = migrupo
netbios name = pc_ricardo
security = user
encrypt passwords = yes
[compartido]
path = /home/publico
comment = Carpeta de prueba de juan
valid users = juan, jorge
write list = juan
read list = juan, jorge
[tests]
path = /home/prueba
comment = Carpeta de prueba de martin
valid users = martin
write list = martin
read list = martin
[carpeta_tres]
path = /home/jorge
comment = Carpeta de prueba de jorge
valid users = jorge
write list = jorge
read list = jorge 

Guardamos el archivo y seguimos:

< testparm < sudo /etc/init.d/samba restart

Aquí podemos ver cómo con unas leves modificaciones ya habilitamos una nueva carpeta compartida y dimos acceso a un usuario a una carpeta que ya existía, sin modificar a los otros usuarios. Es importante prestar atención en que los usuarios van separados con COMAS en las listas de validación, lectura y escritura.

4.0- FAQ - Preguntas frecuentes.

4.1- ¿Cómo hago para detener el servicio samba?

 < sudo /etc/init.d/samba <orden>  

Donde <orden> puede ser:
start : inicia el servicio
stop : detiene el servicio
restart : reinicia el servicio (Si el servicio no estaba iniciado, lo inicia).

ejemplo:

 < sudo /etc/init.d/samba stop  

y la salida será:

>* Stopping Samba daemons... [ OK ]

4.2- ¿Cómo hago para eliminar usuarios que creé?

Para quitar la contraseña del servidor samba:

< sudo smbpasswd -x <nombre>  

Para quitar el usuario del sistema:

< sudo userdel <nombre> 

4.3- ¡Mi Windows no me permite explorar el grupo de trabajo y estoy seguro de que hice correctamente este COMO!

La respuesta es que muy posiblemente tengas un firewall activado. Acá adjunto la lista de puertos que usa samba para interactuar con el resto de la red. Debes asegurarte de que estos puertos estén abiertos para poder conectarte a tus recursos desde una PC con GNU/Linux.

Puerto 135/TCP - usado por el servicio smbd
Puerto 137/UDP - usado por el servicio nmbd
Puerto 138/UDP - usado por el servicio nmbd
Puerto 139/TCP - usado por el servicio smbd
Puerto 445/TCP - usado por el servicio smbd

Si no tienes un firewall activado, capaz tampoco tengas el servicio de compartir recursos de red. Así que puedes probar con compartir una carpeta cualquiera desde tu Windows para asegurarte de que tienes todo habilitado, y luego habilitar la escritura, así descartas problemas.

5- BIBLIOGRAFIA CONSULTADA:

Esta bibliografía ha sido consultada para poder generar este documento, en ningún caso se copió y se pegó información sin lectura previa, pero se adjuntan las fuentes consultadas por que sí se hace referencia a algunos documentos de donde fue extraída parte o toda la información, y creo oportunamente conveniente citar a los autores para no tener ningún tipo de inconvenientes ni apropiarme de información que por supuesto no me corresponde.

  • http://us4.samba.org/samba/docs/man/Samba-HOWTO-Collection/
  • http://www.insflug.org/COMOs/Samba-Como/Samba-Como.html
  • http://www.linuxparatodos.net/portal/staticpages/index.php?page=13-como-samba
  • http://bulma.net/body.phtml?nIdNoticia=1366&nIdPage=3
  • http://www.guia-ubuntu.org/index.php?title=Samba
Distribuir contenido