Diferencia entre revisiones de «SAMBA»

De La Wiki de KiVi
(Página creada con « Aun con el posible chiste que resulte el nombre, [https://samba.org 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 in…»)
 
 
(No se muestran 5 ediciones intermedias del mismo usuario)
Línea 56: Línea 56:


valid users = @Grupo1      ## Y de los usuarios del grupo especificado
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
create mask = 664                ## Especifico la mascara de permisos para los usuarios UNIX
Línea 100: Línea 102:
Podemos listar los usuarios de la base de datos de samba con:
Podemos listar los usuarios de la base de datos de samba con:
  sudo pdbedit -L
  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:
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
  ls -ldZ /srv/Datos/Compartido
Si nos devuelve el valor:
Si nos devuelve el valor:
Línea 108: Línea 110:
Visualizar las conexiones compartidas con:
Visualizar las conexiones compartidas con:
  sudo smbstatus
  sudo smbstatus
<youtube>https://www.youtube.com/watch?v=yL3KoJlTeZ4</youtube>
== Usando cockpit ==
Primero instalamos el paquete correspondiente
<code>sudo dnf install cockpit-file-sharing</code>
Y reiniciamos el servicio:
<code>sudo systemctl restart cockpit</code>
Ahora solo hace falta acceder con el navegador web la IP y puerto correspondiente, por ejemplo:
<code><nowiki>https://192.168.100.241:9090</nowiki></code>
Al acceder nos pedirá añadir a nuestro fichero '''/etc/samba/smb.conf''' la línea en la sección '''[global]''':
<code>include = registry</code>
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:
<youtube>https://www.youtube.com/watch?v=iDPRCSiwrRI</youtube>
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.

Revisión actual - 08:00 22 ago 2024

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.