En esta entrada veremos cómo instalar samba en CentOS 7, el servicio que permite compartir archivos e impresoras entre máquinas con sistemas operativos distintos.
Montar un servidor de archivos CentOS 7 es una opción rápida y sencilla, independientemente de si nos encontramos en ambientes de virtualización, red local, desarrollo, etc. en los que conviven sistemas Windows, Linux, etc.
Para seguir este tutorial necesitaremos lo siguiente:
- Un sistema CentOS 7 actualizado.
- Acceso desde consola con root o un usuario con permisos de sudo.
- Conexión a Internet para descargar los paquetes necesarios.
- Una red local para comprobar el funcionamiento del servicio.
Si estás leyendo esta guía es poque seguramente cumples todos los requisitos, así que vamos a por ello.
Contenido
Cómo instalar Samba en CentOS 7
Vamos a instalar Samba en CentOS 7 mediante el gestor yum desde los repositorios oficiales de CentOS. Una búsqueda entre los paquetes disponibles que contengan la palabra ‘samba‘ nos dará la pista del paquete que debemos instalar, el propio samba, que incluye el servicio, el cliente y herramientas. Previamente actualizaremos la información de los repositorios y los paquetes ya instalados:
~$ sudo yum update -y
Y a continuación instalaremos Samba desde consola:
~$ sudo yum install -y samba
Se instalará Samba con todas las dependencias necesarias. Los servicios que quedan instalados son el smb y el nmb, aunque no están iniciados ni arrancan con el sistema. Esto se comprueba fácilmente con el comando systemctl status:
~$ systemctl status smb nmb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:smbd(8) man:samba(7) man:smb.conf(5) ● nmb.service - Samba NMB Daemon Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:nmbd(8) man:samba(7) man:smb.conf(5)
Para que los servicios de Samba arranquen cada vez que se inicie el sistema tenemos que habilitarlos mediante systemctl enable:
~$ sudo systemctl enable smb nmb Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service. Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
Ahora los servicios están configurados para arrancar con el sistema, pero siguen sin estar iniciados aún. Habrá que esperar al próximo reinicio del sistema o iniciarlos manualmente mediante systemctl start:
~$ sudo systemctl start smb nmb
Ahora sí que tenemos los servicios iniciados. Es hora de adentrarnos en la configuración de Samba en CentOS 7.
Cómo configurar Samba en CentOS 7
Para configurar Samba en CentOS 7 trabajaremos con los archivos de configuración ubicados en la carpeta /etc/samba/, siendo el archivo principal /etc/samba/smb.conf.
La configuración por defecto que trae la versión 4.7.1 de Samba en CentOS 7 es funcional, pero siempre podemos realizar nuestros propios ajustes.
Antes de empezar a modificar el archivo de configuración es muy interesante realizar una copia de seguridad de la versión original del mismo.
~$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.ORIGINAL
Sección global de smb.conf
Dentro de la sección global de /etc/samba/smb.conf hay algunas opciones interesantes que podríamos configurar.
Empezamos con la directiva workgroup que define el grupo de trabajo al que pertenecerá nuestra máquina Centos 7. Este valor deberíamos hacerlo coincidir con el del resto de máquinas con las que estemos trabajando. Si lo hacemos coincidir con el grupo en el que trabajan las máquinas Windows veremos nuestra máquina CentOS junto a las del resto del grupo de trabajo al abrir la carpeta Red de Windows.
... [global] workgroup = WORKGROUP security = user ...
Por defecto el nombre de red Samba de la máquina será el mismo que el del sistema. Se puede cambiar fácilmente añadiendo en la misma sección una directiva netbios name con el valor del nombre con el que queremos que aparezca la máquina CentOS.
Crear recursos compartidos Samba en CentOS 7
Para crear recursos compartidos a través de Samba añadiremos la configuración adicional en el archivo principal de configuración.
Para este tutorial crearemos una carpeta de red de lectura y escritura, llamada proyecto, a la que sólo podrán acceder los usuarios que pertenezcan al grupo proyecto.
También crearemos otra carpeta de red de sólo lectura, llamada publica, a la que podrán acceder todos los usuarios.
Crearemos una carpeta /var/samba/ dentro de la que a su vez crearemos las carpetas proyecto/ y publica/ para compartir recursos. Crearemos el grupo proyecto y se lo asignaremos a la carpeta proyecto/ dándole permisos de escritura:
~$ sudo mkdir -p /var/samba/proyecto /var/samba/publica ~$ sudo groupadd proyecto ~$ sudo chgrp proyecto /var/samba/proyecto ~$ sudo chmod g+w /var/samba/proyecto
Ahora editaremos el archivo /etc/samba/smb.conf y al final del mismo añadiremos la configuración para estos nuevos recursos:
... [proyecto] path = /var/samba/proyecto valid users = @proyecto browseable = yes writeable = yes guest ok = no read only = no [publica] path = /var/samba/publica browseable = yes writeable = no guest ok = yes read only = yes
Las directivas de configuración de estos recursos son autoexplicativas:
- path: La ruta del recurso dentro del sistema.
- valid users: Los usuarios que pueden acceder al recurso. La @ indentifica un grupo de usuarios.
- browseable: Muestra el recurso al listarlo en un cliente gráfico o en consola.
- writeable: Permite creación y modificación de archivos.
- read only: Sólo lectura.
- guest ok: Usuarios invitados.
Añadir usuarios autorizados en Samba
Para que podamos acceder a los servicios de Samba en el servidor CentOS 7 es necesario registrar qué usuarios y con qué contraseñas podrán acceder. Para ello añadiremos estos usuarios con el comando smbpasswd. Además, como hemos creado un grupo para el recurso proyecto, tendremos que añadirlos a este grupo en el sistema:
~$ sudo usermod -aG proyecto chacho ~$ sudo smbpasswd -a chacho New SMB password: Retype new SMB password: Added user chacho. ~$
La contraseña que especifiquemos aquí no tiene por qué coincidir con la contraseña de usuario del sistema CentOS, pero tiene sentido que coincida.
Ya hemos terminado con la configuración de Samba. Podemos reiniciar el servicio:
~$ sudo systemctl restart smb
Pero si no has hecho cambios importantes en tu sistema CentOS 7 es casi seguro que no podrás acceder a los servicios de Samba desde otras máquinas. Es como si no funcionara nada… ¡sigue leyendo!
Cómo configurar el firewall para Samba en CentOS 7
Si has configurado antes algún servicio en CentOS 7 ya sabes que de cara a la red necesitamos configurar el firewall que viene activado por defecto. Por tanto debemos abrir los puertos del servicio Samba para que nuestro servidor CentOS se pueda comunicar con el resto de las máquinas de la red local.
A través del comando firewall-cmd configuraremos la excepción del servicio Samba y además haremos que los cambios tomen efecto de inmediato:
~$ sudo firewall-cmd --permanent --add-service=samba success ~$ sudo firewall-cmd --reload success ~$
¡Ahora tu máquina CentOS sí es visible en el entorno de red!
Pero es muy probable que al intentar entrar en un recurso, inexplicablemente se nos deniegue el acceso… No pasa nada, vamos con la solución.
Cómo configurar SELinux para Samba en CentOS 7
Es muy posible que quieras acceder a tu directorio de usuario de tu máquina CentOS 7 desde otra máquina, con posibilidad de leer archivos y tal vez también modificarlos o añadir nuevos.
Si has configurado Samba en otros Linux sabrás que la configuración para hacer esto es muy sencilla. Pero si lo intentas hacer en CentOS 7 con la seguridad extendida SELinux activada puede que hayas terminado con dolor de cabeza sin conseguir resultados.
Esto ocurre porque SELinux necesita que habilites específicamente el acceso a los directorios de usuario. Por muy bien que esté configurado Samba, si no das acceso a través de SELinux no funcionará.
Basta con usar el comando setsebool para hacer este pequeño ajuste:
~$ sudo setsebool -P samba_enable_home_dirs on
Y ya tendremos acceso remoto a nuestros archivos en el servidor Samba de CentOS 7. Los cambios son permanentes, por lo que la configuración seguirá activa tras cada inicio del sistema.
Configurar SELinux para el acceso a otros recursos de Samba
En el caso de los recursos compartidos adicionales que hemos creado en cualquier otra parte del sistema de archivos también habrá problemas con SELinux. Esto sucede porque los nuevos recursos carecerán del contexto necesario para que SELinux permita a Samba el acceso de lectura y escritura.
Para ver el contexto de las carpetas que acabamos de crear, las opciones avanzadas del comando ls nos pueden servir:
~$ ls -ldZ /var/samba/* drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /var/samba/proyecto drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /var/samba/publica
La solución es aplicar a cada recurso que creemos el contexto necesario, y esto lo haremos a través del comando chcon. Vamos a aplicar el contexto de recurso de Samba a estas carpetas y a todo su contenido:
~$ sudo chcon -t samba_share_t /var/samba/proyecto/ -R ~$ sudo chcon -t samba_share_t /var/samba/publica/ -R ~$
Es importante señalar que sólo porque la carpeta en cuestión tenga el contexto de recurso de Samba no significa que su contenido lo tenga. Por eso hemos usado el parámetro -R para aplicar chcon.
También hay que mecionar que mientras que el contenido que se cree a través de Samba sí se creará con el contexto adecuado, cualquier archivo o carpeta añadido posteriormente desde el sistema (por ejemplo, trabajando con archivos en consola) no tendrá ese contexto y no estará disponible a través de Samba hasta que apliquemos el contexto con chcon.
Siguiendo con el ejemplo, estas carpetas ya serían accesibles. De hecho, si volvemos a comprobar con el comando ls -ldZ el contexto, veremos que lo tienen aplicado:
~$ ls -ldZ /var/samba/* drwxr-xr-x. root root unconfined_u:object_r:samba_share_t:s0 /var/samba/proyecto drwxr-xr-x. root root unconfined_u:object_r:samba_share_t:s0 /var/samba/publica
Ha pasado de ser object_r a samba_share_t. Ahora ya es posible acceder a los recursos compartidos y trabajar con ellos tal y como los hemos configurado.
Conclusión
Ahora que ya sabes cómo instalar Samba en CentOS 7 te habrás dado cuenta de lo fácil que es compartir archivos y recursos de red entre distintos sistemas operativos. Lo más complicado a la hora de montar el servidor de archivos CentOS 7 es enfrentarse al firewall y a la seguridad extendida de SELinux, pero sabiendo que están ahí y cómo funcionan, en realidad todo se reduce a pasos rutinarios.
Si tienes cualquier duda, pregunta o sugerencia, o quieres informar de algún error, mejora del artículo o propuesta de nuevo contenido, déjame un comentario.
¡Apoya comoinstalar.me!
¿Ha sido de utilidad para ti esta pequeña guía? ¿Ha acabado con algún dolor de cabeza en la configuración de Samba en CentOS 7? Si te sientes agradecido, siempre puedes ayudar al mantenimiento de este sitio con una mínima contribución, y puedes hacerlo dejando una propina de 1 $ desde PayPal:
O, si te sientes especialmente agradecido, invitándonos a un café:
¡Gracias!
Hola, buenas noches a todos. Instalé exitosamente el Samba y logré compartir una carpeta de un programa contable exitosamente, obviamente gracias a este manual. Ahora me encuentro con un reto y es que instalé OpenVPN para conectar una sucursal y se conectó bien, pero cuando accedo a la carpeta compartida se ve todo el contenido pero no tengo acceso de escritura, en las sede principal no se presenta ese problema.
Muchas gracias, pasé horas buscando, pero con estos comandos pude solucionar un error que tenía.
Gracias de nuevo.
¡Me alegra saberlo, David!
También llegué donde puedo entrar a la carpeta pública de su ejemplo, pero al intentar copiar dentro de ella dice que se necesita permisos, desde Windows 10, y tiene todos los permisos configurados desde el servidor Centos7. ¿Alguna sugerencia?
Hola, tengo el mismo problema, ¿lograste solucionar?
Estimado realice la configuración de samba , pero solo puedo ver las carpetas en Windows 7,en los Windows 10 me aparece un mensaje que no tengo permisos de acceso que me contacte con el administrador,que configuración aparte debo realizar.
Cordial saludo;
en global hay que poner lo siguiente para que no te pida password map to guest = bad user quedando asi:
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
consulta, se puede configurar samba pero colocar permisos por usuarios mas y no por grupos ?
Esto esta bien para una red pequeña, pero que hacer en caso de que la red pertenezca a un dominio ?
Se puede configurar Samba para que el servidor CentOS 7 se comporte como controlador principal de un dominio o como miembro. Es cuestión de cambiar la configuración.
Puedo hacer otra entrada independiente dedicada a ese tema ya que intentar abarcar todas las posibilidades de configuración de Samba en una sola entrada titánica no sería práctico.
Hola, en el caso de que desees hacer montar un directorio que esté compartido en un Server Windows 2012 R2 (por ejemplo), debes primero crear un usuario en el dominio Microsoft el cual usarás para acceder al recurso compartido, o sea, usuario@domino.local.
En el Server de Linux validándote como root:
# mount -t cifs -o username=usuario //ipaddress_domain_server/recurso_compartido/ /mnt/sql
Donde /mnt/ es un directorio creado por Linux durante la instalación y sql es un directorio creado por usted mismo.
No olvide darle permisos de lectura/escritura al usuario del dominio en el recurso_compartido.