SAMBA
Aun con el posible chiste que resulte el nombre, SAMBA permite a usuarios de Windows y otros clientes, conectar con ficheros y directorios compartidos desde un servidor LInux. Esto implementa en el servidor un protocolo SMB ( Server Message Block ).
En esta entrada explico cómo compartir un directorio o recurso de manera sencilla con otros equipos de la red.
Instala y permite Samba
Para hacer la instalación ejecutamos:
sudo dnf install samba sudo systemctl enable smb --now firewall-cmd --get-active-zones sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-service=samba sudo firewall-cmd --reload
Con esto instalamos el servicio, lo habilitamos en el inicio y añadimos la norma al cortafuegos.
Compartiendo un directorio
Podemos compartir un directorio por consola editando el fichero de configuración o utilizando la interficie web Cockpit.
Por consola
El proceso más excato siempre será por el terminal, primero asignaremos un usuario samba, para ello, suponemos que tenemos el usuario «suport» y queremos que tanga acceso a un directorio desde su equipo windows. Primero lo crearemos con:
sudo smbpasswd -a suport
Le asignamos la contraseña y pasamos a crear el directorio compartido:
sudo mkdir -p /srv/Datos/Compartido
Con esto creamos el directorio «Datos» dentro de /srv, el directorio que, por normativa, se refiere a los recursos de servicio.
Ahora le damos permisos al SELinux para poder modificar y aplicar las normas de recursos samba:
sudo semanage fcontext --add --type "samba_share_t" "/srv/Datos(/.*)?"
NOTA- SELinux és un gestor de permisos de Fedora y otras distribuciones muy potente y estricto creado por la NSA.
Por último, aplicamos de manera automática esta norma:
sudo restorecon -R /srv/Datos
El fichero por defecto de configuración de SAMBA es:
/etc/samba/smb.conf
Y un ejemplo de directorio compartido:
[Compartido] ## Nombre que se muestra del recurso compartido
comment = Compartido ## Comentario opcional
path = /srv/Datos/Compartido ## Ruta del directorio compartido
read only = No ## Especificacmos que NO es de solo lectura
writeable = Yes ## Especifiquemos que SI se puede escribir dentro
browseable = Yes ## Indica que es visible al explorador
guest ok = No ## Ningún usuario que NO esté validado en el sistema puede acceder
printable = no ## Similar al valor anterior, no se mostraría en pantalla
write ok = true ## Similar al valor "writeable"
force create mode = 664 ## Le fuerzo el modo de creación de ficheros a los clientes que se conecten
force directory mode = 775 ## Lo mismo para la creación de directorios
force group = Grupo1 ## Fuerzo el uso del directorio a un grupo
valid users = @Grupo1 ## Y de los usuarios del grupo especificado
read list = guest, nobody ##los usuarios invitados y no conocidos solo podrías leer y no modificar.
create mask = 664 ## Especifico la mascara de permisos para los usuarios UNIX
vfs objects = recycle ## Habilito la papelera de reciclaje
recycle:repository = /srv/Datos/PapeleraC ## Ubico la papelera de este recurso
recycle:exclude = *.tmp *.temp *.o ## Exclusión de los ficheros que NO se reciclan
recycle:versions = Yes ## Acepto versiones diferentes de la papelera
recycle:keeptree = Yes ## Conserva la información del arbol de directorios.
Siempre que añadamos alguna configuración, debemos reiniciar o recargar el servicio:
sudo systemctl restart smb
Compartiendo con varios usuarios
Ya hemos visto que hemos compartido un directorio con un usuario y que, además, hemos añadido unas líneas para forzar el directorio con un grupo de usuario llamado «Grupo1».
Recordemos que un usuario SAMBA también es un usuario de sistema, en lo que a permisos se refiere. Por lo que también se refleja en los grupos. Crearemos un grupo en el sistema y añadiremos al usuario.
sudo groupadd Grupo1 sudo usermod -G Grupo1 suport
Para hacerlo más práctico, creamos otros dos usuarios, uno que forme parte del grupo y otro que no.
sudo useradd usuario1 sudo useradd usuario2
Con esto hemos creado el usuario en el sistema.
sudo smbpasswd -a usuario1 sudo smbpasswd -a usuario2
Ahora lo añadimos al grupo:
sudo usermod -G Grupo1 usuario1
Y ya podemos comprobar que usuario1 y suport pueden acceder al recurso «Grupo1» mientras que usuario2 no.
Gestionando usuarios de Samba
Podemos modificar los usuarios con los comandos:
sudo smbpasswd usuario1 # para cambiar la contraseña
sudo smbpasswd -x usuario1 # para eliminar el usuario
sudo userdel -r usuario1 #para eliminarlo también del sistema.
Incidencias y logs
Como buenos administradores, tenemos que buscar la razón por la que el servicio no funcione correctamente. Todos los ficheros de informe generados por samba están en /var/log/samba. Para fer el registro del servicio en tiempo real podemos ejecutar.
tail -f /var/log/samba/log.smbd
Podemos incrementar el detalle de log modificando el fichero :
sudo nano /etc/samba/smb.conf
y en la sección [global] cambiamos el valor:
[global]
loglevel =5
Y reiniciamos el servicio:
sudo systemctl restart smb
Podemos saber las conexiones a samba con:
sudo smbstatus
Podemos listar los usuarios de la base de datos de samba con:
sudo pdbedit -L
Y una de las causas más comunes que un usuario no puede acceder a un recurso, o puede acceder, pero no ejecutarlo, es debido a la configuración de SELinux. Para comprobar el estado de dicho directorio podemos listar con:
ls -ldZ /srv/Datos/Compartido
Si nos devuelve el valor:
unconfined_u:object_r:samba_share_t:s0 unconfined_u:object_r:samba_share_t:s0 /srv/Datos/Compartido
Es que no ejecutamos el comando semanage como se explica en las primeras líneas y se debe definir el contexto y volver a ejecutar el «restorecon -R» sobre el directorio de nuevo.
Visualizar las conexiones compartidas con:
sudo smbstatus
Usando cockpit
Primero instalamos el paquete correspondiente
sudo dnf install cockpit-file-sharing
Y reiniciamos el servicio:
sudo systemctl restart cockpit
Ahora solo hace falta acceder con el navegador web la IP y puerto correspondiente, por ejemplo:
https://192.168.100.241:9090
Al acceder nos pedirá añadir a nuestro fichero /etc/samba/smb.conf la línea en la sección [global]:
include = registry
Esta entrada cambia el tipo de configuración a un registro compatible con Windows y que se administra por base de datos de cockpit y no tiene en cuenta la configuración del fichero de configuración del servidor.
Configurarlo por administrador es muy simple, solo hay que añadir el recurso y poca cosa más:
Pero si queremos hacer consultas o modificarlo por consola podemos hacerlo con los siguientes comandos:
- net conf list - lista la configuración aplicada
- net conf import - Importa la configuración de un fichero en formato smb.conf
- net conf listshares - Lista los nombres de los recursos compartidos
- net conf drop - Elimina toda la configuración, utilizar con cuidado!
- net conf showshare - Muestra la definición de una configuración, por ejemplo: sudo net conf showshare global.
- net conf delshare - Elimina una configuración, por ejemplo: sudo net conf delshare Logs.
- net conf setparm - Guarda un parámetro sobre un recurso compartido.
- net conf getparrm - Obtiene el valor de un parámetro sobre un recurso.
- net conf getincludes - Muestra los valores incluidos posibles de una definición compartida.
- net conf setincludes - Configura un valor incluido de un recurso compartido.
- net conf delincludes - Elimina los valores incluidos de un recurso.
Para realizar una copia se seguridad de esta configuración es muy sencillo, solo tenemos que redireccionar el listado de la configuración a un ficherom, por ejemplo:
sudo net conf list > /mnt/seg/smb.conf
Y para recuperar toda la configuración podemos ejecutar:
sudo net conf import /mnt/seg/smb.conf
Y, como la configuración es de tipo "registro", no hace falta reiniciar el servicio, el cambio es automático.
De esta misma forma, si tenemos una configuración ya preparada para como plantilla, solo hay que importarla.