educación, informática y demás

2310 - SAMBA

Directorios personales de usuarios y usuarios de Samba

Para poder compartir los directorios personales de los usuarios se utiliza la sección [homes].

Si la sección está configurada, aparece en el fichero de configuración de samba, entonces se comparten los directorios personales de los usuarios del sistema a través de samba.

No obstante, para que puedan acceder a su directorio personal, los usuarios tienen que tener dada de alta su cuenta de usuario en la base de datos de usuarios de samba.

Base de datos de usuarios de samba

Samba utiliza una base de datos de usuario propia dónde se registran usuarios del sistema y sus contraseñas SMB. Solo los usuarios que tengan esta información en la base de datos de usuarios de samba podrán utilizar samba con credenciales de usuario.

En esta serie de casos prácticos vamos a utilizar fichero de contraseñas SMB locales en el sistema y lo vamos a gestionar con smbpasswd.

Una contraseña SMB asociada a una cuenta de usuario permite a dicho usuario autentificarse a través de Samba para acceder a recursos compartidos con credenciales de dicho usuario en el sistema. Esto nos permitirá compartir recursos a través de SMB/CIFS con samba accesibles con ACLs propias de acceso por usuarios, grupos, operaciones, etc.

Para que un usuario del sistema se autentifique a través de samba y pueda acceder como usuario autentificado a los recursos compartidos, tiene que tener una entrada creada con una contraseñas SMB en el fichero de cuentas de usuario de samba.

Para gestionar las contraseñas SMB de usuarios de forma sencilla podemos utilizar la herramienta smbpasswd (información de smbpasswd en el sitio oficial de samba en inglés)

Gestionando las cuentas de usuario de Samba

Un usuario local del sistema puede cambiar su contraseña SMB utilizando la herramienta smbpasswd de forma independiente.

Para nosotros, administradores, gestionaremos las cuentas de usuario SMB a través de smpasswd como usuario root.

Script de regalo

Por lo pronto, en nuestro sistema tenemos, al menos, estas cuentas de usuario.

Añadir cuentas de usuario de samba

Ahora vamos a añadir algunas de ellas a la base de datos de usuarios y contraseñas de samba.

Para añadir cuentas de usuario utilizamos la opción -a.

Mostrando información de las cuentas de usuario de samba

¿Qué usuarios hay en la base de datos de samba?. Para mostrar las cuentas de usuario creadas en samba podemos utilizar el comando pdbedit con la opción -L.

Podemos usar pdbedit como root para gestionar la base de datos de usuarios de Samba. En nuestro caso utilizamos la opción -L para listar el contenido de la base de datos de usuarios de samba.

Podemos obtener más información en la página de manual de pdbedit.

Opción -L

Deshabilitar usuarios de samba

Con esta opción no borramos la cuenta de usuario de la base de datos de usuraios de samba pero no permitimos que ese usuario pueda acreditarse a través de samba con su nombre de usuario y contraseña.

De esta forma impedimos que un usuario concreto pueda acceder a recursos compartidos a través de samba. Recuerda, si tenemos recursos compartidos con acceso de invitado o anónimo, este usuario podrá acceder a dichos recursos como invitado.

Vamos a deshabilitar la cuenta de usuario de samba de ramonam.

Vamos a ver si podemos mostrar información sobre ramonam con este cambio

La letra D en las flags del usuario indica que la cuenta de usuario está deshabilitada.

Eliminando una cuenta de usuario

Supongamos que no queremos que un usuario del sistema tenga cuenta en la base de datos de samba. Podemos eliminar la cuenta de usuario con la opción -x

Vamos a eliminar la cuenta de usuario de samba del usuario monicamz. Este usuario continuará teniendo una cuenta de usuario local en el sistema, pero no tendrá cuenta de usuario de samba.

Vamos a ver si el usuario monicamz está presente en la base de datos de usuarios de samba.

Accediendo a los directorios personales de los usuarios

Ya hemos configurado una serie de cuentas de usuario del sistema para que puedan acceder a través de samba con sus credenciales de usuarioa. Ahora toca probar dicho acceso.

Para ello, vamos a habilitar la sección homes, que es la sección que permite compartir los directorios personales de las cuentas de usuario del sistema dónde está el servidor Samba de forma sencilla.

De hecho, por defecto en esta versión de Samba, esta sección está habilitada en el fichero de configuración por defecto.

Esta sección tiene una serie de parámetros de configuración ya establecidos. De estos parámetros conocemos el parámetro comment y el read only. El primero, porque es obvio, añade un comentario al recurso compartido. El segundo read only, aparte de su significa lógico, ya lo hemos visto en otra entrada de este caso práctico.

Vamos a ver rápidamente qué hace cada uno de estos parámetros de configuración para ir aprendiendo poco a poco los parámetros que tenemos disponibles para configurar las secciones de recursos compartidos que crearemos más adelante. Esta información la tenéis en la sección dedicada a Samba, en concreto en el apartado Análisis de parámetros de configuración.

browsable

Con este parámetro podemos ocultar o mostrar el nombre del recurso compartido en la lista de recursos compartidos en el equipo.

Al estar establecido como NO no se mostrará el recurso compartido homes.

create mask y directory mask

Cuando creamos un fichero en linux, por ejemplo un fichero de texto plano, el sistema operativo tiene que asignarle un propietario, un grupo y unos permisos para propietario, grupos y resto de usuarios. Esto lo hace el sistema operativo en base a la configuración por defecto del propio sistema.

Sin embargo, cuando creamos un directorio o un fichero a través de samba, ¿Qué permisos se le aplican?. Gracias a estos dos parámetros podemos establecer qué permisos se asignarán a un fichero o directorio al crearlo a través de samba (cuando copiamos un fichero o creamos /copiamos un directorio)

Mask hace referencia a la máscara en bits de los permisos para fichero (create mask) y para directorio (directory mask).

El detalle está en el cero dentro de esta máscara. Todos los permisos que pongamos a cero en esta máscara estarán a cero en el sistema de ficheros destino. Si establecemos un bit a uno, el resultado final dependerá de los permisos que se utilicen por defecto en el sistema de ficheros destino.

valid users

Este parámetro nos permite determinar qué usuarios, con credenciales en samba, podrán acceder a este recurso compartido. Solo podrán acceder los que estén en esta lista.

Al tener establecido %S, que es el nombre del sistema, nos permite iniciar sesión con los usuarios de samba del sistema.

Accediendo al directorio personal de un usuario

Vamos a acceder al directorio personal de marinapg desde un sistema Windows 10.

Al acceder no aparece el directorio homes. Esto es así porque el parámetro browseable está establecido a no. ¿Entonces como accedemos al directorio personal de un usuario?

Nos pide las credenciales de un usuario para poder acceder al directorio personal de marinapg.

Podemos ver el contenido del directorio personal de marinapg.

Vamos a crear un directorio y un nuevo fichero.

¡No nos deja escribir a través de samba! Esto es así porque la sección homes está configurada con el parámetro de configuración read only = yes, por tanto nadie podrá escribir.

Podemos cambiar la configuración para permitir escrituras.

Para asegurarnos de que el cambio se aplica vamos a reiniciar el servicio

Vamos a probar ahora a crear un directorio y subir un fichero.

Vamos a crear un fichero dentro del directorio

Tanto el directorio como el fichero se han creado en el directorio personal de marinapg en la máquina 192.168.23.10, pero vamos a comprobarlo 🙂

Accediendo con una cuenta de usuario deshabilitada

Hemos deshabilitado la cuenta de ramonam, no debería dejarnos acceder a ningún recurso compartido con las credenciales de ramonam. Vamos a probarlo.

Nos pide las credenciales de un usuario que pueda acceder a este directorio

No nos deja entrar. El mensaje nos indica que puede que no tengamos permisos para acceder a ese recurso en la red.

Lo que sucede aquí es que la cuenta de usuario está deshabilitada.

Habilitando una cuenta de usuario

Vamos a habilitar la cuenta de ramonam y vamos a probar a acceder de nuevo. Para habilitar la cuenta de usuario en samba de ramonam vamos a usar smbpasswd con la opción -e seguida del nombre del usuario como root.

Ahora habiltiamos a ramonam, pero antes de habilitar vamos a mostrar información de la cuenta de usuario de samba de ramonam con el comando pdbedit -L -v ramonam.

Vamos a habilitar la cuenta y mostraremos de nuevo la información de la cuenta de usuario de ramonam en Samba.

Ahora ya está habilitada, probemos a acceder de nuevo a su directorio personal desde Windows.

Podemos acceder y tenemos permisos de escritura (recuerda hemos configurado read only = no)

Probando a acceder a un directorio personal de otro usuario

Vamos a probar a acceder al directorio personal del usuario anagp utilizando las credenciales de ramonam.

Primero vamos a echar un vistazo a los permisos del directorio personal del usuario. En este caso, cualquier usuario del sistema podría acceder a este directorio para realizar operaciones de lectura.

Desde windows vamos a probar a entraqr en el recurso compartido /anagp en 192.168.23.10 a través de samba: smb://192.168.23.10/anagp, pero utilizaremos las credenciales de otro usuario, por ejemplo ramonam.

Samba no nos deja acceder a un directorio personal de un usuario que sea distinto del usuario cuyas credenciales estamos utilizando. Si nos fijamos, según los permisos de acceso en el sistema de ficheros local del servidor si podríamos acceder a ese directorio como ramonam.

En local si podemos acceder…

Pero a través de samba en este tipo especial de recurso compartido con la sección [homes] no podemos acceder por lo que se ha comentado anteriormente.

Limitando el acceso a directorios personales

Hasta ahora, cualquier usuario del sistema puede acceder a su directorio personal a través de samba, siempre y cuando tenga cuenta de usuario en samba con contraseña SMB.

Pero, y si quisieramos limitar el acceso a algunos usuarios. Por ejemplo, solo queremos permitir el acceso a marinapg y los miembros del grupo educatica.

Para ello utilizaremos el parámetro de configuración valid users. Como no sabemos como utilizar estge parámetro podemos consultar la página de manual de smb.conf o consultar el apartado Análisis de parámetros de configuración dentro de la entrada dedicada a Samba.

Buscando en la ayuda de smb.conf nos encontramos con la descripción del parámetro invalid users y lo aprendemos.

Seguimos buscando.

Resumiendo la ayuda de ambos parámetros. Si no se define valid users o si está vacío, que es el valor por defecto, pueden acceder todos los usuarios del sistema con cuenta en Samba.

Si lo definimos, con algún elemento, entonces solo podrán acceder al recurso los usuarios que estén en la lista de valid users. Si usuario no está en la lista, no podrá acceder.

Si un usuario está en la lista de valid users e invalid users a la vez para un recurso, entonces no podrá acceder.

Si solo definimos invalid users, podrá acceder todos los usuarios de samba excepto los que estén en la lista.

Vamos a jugar un poco con estos parámetros para hacer un par de configuraciones sobre el recurso compartido de directorios personales de los usuarios del sistema.

en esta primera configuración lo que hemos hecho es que solo vamos a permitir el acceso a marinapg y a los miembros del grupo educatica. Además, nos cercioramos de que nunca podrá acceder a su directorio personal el usuario ramonam, aunque pertenezca a educatica.

Hemos utilizado una arroba para determinar que educatica es un grupo y no una cuenta de usuario. Al usar arroba, Samba buscará este grupo como grupo NIS y si no está, lo buscará como grupo local del sistema. Si tenemos claro que educatica es un grupo local del sistema, deberíamos utilizar un caracter «+» en lugar de la @

Vamos a probar si esto funciona… Pero antes vamos a asegurarnos de que alfredoff, anagp y ramonam pertenecen a educatica.

Hacemos un script que es lo que nos gusta…

Al ejecutarlo nos damos cuenta de que si no existe el grupo nos da un pequeño error. No pasa nada, porque queríamos un script rápido para salir del paso. Si no existe el grupo, lo creo a mano. Y lo volvemos a ejecutar.

También podríamos crear un script un poco más elaborado, pero esto nos llevaría más tiempo y a lo mejor no le vamos a sacar tanto partido. Muchas veces tenemos que valorar si merece la pena crear un script completo, pero más complejo y largo de desarrollar, o un script más corto que aunque nos haga llevar a cabo algunas tareas previas a mano, sea manejable, sencillo y rápido.

La versión elaborada es la siguiente:

Preguntamos al usuario por el grupo antes de crearlo por si hemos cometido un error al escribir el nombre del grupo. Podríamos comprobar si los usuarios existen o no y crear las cuentas de usaurio y…. Hasta aquí

Por ejemplo si ejecutamos el script y cometemos un error con el nombre del grupo, el script no lo crea directamente, y nos da tiempo de reacción.

Ahora vamos a ejecutarlo de forma adecuada

Ahora ramonam, alfredoff y anagp pertenecen a educatica. Estos tres usuario más marinapg están en la lista de valid users, sin embargo ramonam está en la lista de invalid users.

Vamos a probar a ver que pasa con los accesos. En esta ocasión vamos a utilizar la herrmienta smbclient como cliente de SMB/CIFS para conectarnos a un recurso compartido como SMB/CIFS en modo texto.

Para ello tenemos que especificar el usuario que vamos a utilizar para conectarnos al recurso con la opción -U y la ruta del recurso a continuación. En nuestro caso, el directorio personal del usuario marinapg.

Hemos accedido. Salimos y vamos a probar a acceder con anagp, pero antes de acceder vamos a crear un nuevo fichero de texto plano que subiremos al directorio personal de anagp.

Vamos a acceder al directorio personal de anagp a través de samba usando smbclient.

Nos da un error de acceso denegado. No sabemos por qué no nos deja acceder. Hemos configurado como usuarios válidos de los directorios personales de los usuarios al grupo educatica. Vamos a comprobar si anagp pertenece a dicho grupo.

Por tanto, ese no es el problema. Sabemos que para que un usuario pueda iniciar sesión con credenciales de usuario en samba tiene que estar dado de alta en la base de datos de usuarios de samba. Vamos a comprobar si anagp está en dicha base de datos con el comando pdbedit y opción -L.

No está en la base de datos de usuarios de samba, así que la añadimos para que pueda usar sus credenciales al acceder a un recurso compartido en samba.

Ahora si accedemos de nuevo debería dejarnos acceder.

Ahora si nos deja acceder a través de samba. Vamos a subir el fichero ReadMe.txt con el nuevo nombre leeme.txt al directorio personal de anagp.

¿Nos podemos mover del recurso compartido hacia atrás? Es decir, sabemos que estamos accediendo al directorio /home/anagp o lo intuimos, si ejecutaramos cd .. a lo mejor nos podemos mover por el sistema de ficheros.

No podemos movernos hacia atrás cuando nos conetamos a un recurso puesto que ese recurso es el raíz dentro de la conexión. Podemos ver como cambia el pompt en smbclient, el recurso es el raíz en el sistema de ficheros remoto, aunque estemos compartiendo un directorio cuya ruta en local en el servidor sea /home/anagp y si tenga directorio padre. Pasa lo mismo con otros servicios como ftp cuando accedemos al directorio público anónimo o utilizamos un chroot.

Nos queda comprobar si podemos acceder con el usuario ramonam, que está en la lista de invalid users, a pesar de pertenecer al grupo educatica.

Si lo quitamos de la lista de usuarios no permitidos en invalid users, podría acceder. Vamos a probarlo.

Ahora probemos a acceder con ramonam

Deshabilitando el acceso a directorios personales

Si queremos deshabilitar la compartición de los directorios personales de los usuarios del sistema, tan solo tenemos que comentar la sección [homes] y todos sus parámetros de configuración.

Si solo comentáramos la sección [homes] dejando los parámetros de configuración sin comentar, entonces estos parámetros de configuración se utilizarían en la sección anterior. Por eso, hay que comentarlos también. En este caso hemos optado por usar el comentario de línea samba: «;»

Si intentamos acceder no podremos

Dejar una respuesta