GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar y configurar samba en RHEL 8 / CentOS 8

Samba proporciona software de servidor y cliente para permitir el intercambio de archivos entre máquinas Linux y Windows. Instalarlo y configurarlo en RHEL 8 / CentOS 8 es bastante fácil. Siga leyendo para aprender cómo compartir un directorio con samba y cómo aplicarle el contexto SELinux apropiado.

En este tutorial aprenderás:

  • Cómo instalar samba en RHEL8
  • Cómo habilitar e iniciar los demonios smb y nmb
  • Cómo crear un recurso compartido de samba
  • Cómo configurar el cortafuegos para permitir el acceso a recursos compartidos de samba
  • Cómo configurar el contexto SELinux correcto para que samba funcione correctamente

Samba comparte en RHEL 8 / CentOS 8

Requisitos de software y convenciones utilizadas

Presentamos Samba

Samba, como se indica en la página de inicio del proyecto, es un software de código abierto, publicado bajo la GPL licencia, que nos permite compartir archivos y servicios de impresión usando SMB/CIFS protocolo.

El proyecto proporciona software de servidor y cliente para permitir la interoperabilidad con máquinas Windows, lo que representa la solución ideal en entornos mixtos. En este tutorial, veremos cómo instalar Samba en Red Hat Enterprise Linux 8, cómo configurar un recurso compartido de samba, cómo configurar el firewall para permitir el acceso a los recursos compartidos y cómo aplicar el contexto SELinux apropiado.

Instalación

Lo primero que tenemos que hacer es instalar samba en nuestra máquina. El paquete y las bibliotecas necesarias están disponibles en los repositorios oficiales de RHEL 8 / CentOS 8, por lo que podemos instalarlos simplemente usando yum o dnf. En esta versión de RHEL/CentOS, el primer comando es solo un "enlace" al segundo:

$ sudo dnf install samba samba-client

El paquete samba-client no es estrictamente necesario, pero las utilidades que proporciona pueden ser útiles. Una vez instalados los paquetes, tenemos que iniciar y habilitar el smb y el nmb demonios en el arranque. El primero es el demonio que se encarga de realizar las transferencias reales y las operaciones de uso compartido, mientras que el segundo realiza el NetBIOS Resoluciones de nombres, lo que permite que los recursos aparezcan al navegar por la red en Windows. Ahora podemos habilitar e iniciar ambos servicios systemd con solo un comando:

$ sudo systemctl enable --now {smb,nmb}

Configuración del cortafuegos

El siguiente paso es la configuración del cortafuegos. Debemos abrir los puertos apropiados, para que los recursos compartidos de samba puedan ser accesibles desde otras máquinas. El software de administración de firewall predeterminado en RHEL 8 / CentOS 8 es firewalld.

Por suerte para nosotros, no hay necesidad de abrir puertos manualmente:todo lo que tenemos que hacer es agregar el servicio “samba” a nuestra zona. Un "servicio" es solo una abstracción que nos permite permitir el tráfico a través de todos los puertos que necesita un servicio, haciendo referencia al nombre del servicio, en lugar de tener que configurar (y recordar) cada puerto que utiliza. En caso de que queramos recopilar información sobre un “servicio”, podemos ejecutar:

$ sudo firewall-cmd --info-service samba
samba
  ports: 137/udp 138/udp 139/tcp 445/tcp
  protocols:
  source-ports:
  modules: netbios-ns
  destination:

Del resultado del comando vemos que el servicio permitirá el tráfico a través de los puertos 173/udp, 138/udp, 139/tcp y 445/tcp. Para agregar permanentemente el servicio a la zona predeterminada, podemos ejecutar:

$ sudo firewall-cmd --permanent --add-service=samba

Al ejecutar el comando usamos --permanent switch para que nuestro cambio sea persistente. También asumimos el default zona a estar en uso. Si quisiéramos especificar otra zona para aplicar la acción, habríamos usado --zone y proporcionó el nombre de la zona como argumento (por ejemplo, –zone=external). Dado que nuestro cambio está configurado para ser permanente, para que sea efectivo, debemos volver a cargar la configuración del firewall:

$ sudo firewall-cmd --reload

Podemos verificar que el servicio “samba” ahora es parte de nuestra zona, ejecutando:

$ sudo firewall-cmd --list-services
cockpit dhcpv6-client http samba ssh

Nuevamente, si no se especifica ninguna zona, el comando se aplica a la zona predeterminada.

Configuración de un directorio compartido al que pueden acceder los invitados

Digamos que queremos compartir un directorio a través de samba, y queremos permitir el libre acceso a este directorio a los usuarios invitados, sin que tengan que proporcionar una contraseña. Para obtener el resultado deseado, debemos hacer algunos cambios en el /etc/samba/smb.conf archivo, y agregue una "estrofa" para nuestra parte. Abra el archivo con su editor favorito y en el [global] sección, agregue el texto resaltado:

[global]
        workgroup = SAMBA
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        map to guest = bad user

El map to guest = bad user instrucción, asignará los intentos de inicio de sesión con nombres de usuario incorrectos al usuario invitado predeterminado, que, de forma predeterminada, es nobody . Esto es necesario para permitir el acceso anónimo sin tener que proporcionar una contraseña.

Después de este cambio, debemos agregar una nueva estrofa dedicada a nuestro recurso compartido al final del archivo. Nombraremos el recurso compartido "linuxconfig":

[linuxconfig]
        path = /mnt/shared
        guest only = yes

Con la configuración anterior, declaramos que queremos compartir el contenido de /mnt/shared directorio, sin necesidad de autenticación de usuario. Esta configuración es obviamente arriesgada, y aquí se informa solo como un ejemplo:en un escenario del mundo real, es posible que desee al menos denegar el acceso de escritura a los invitados (puede hacerlo agregando writeable = no instrucción). Para que los cambios sean efectivos, debemos reiniciar los demonios:

$ sudo systemctl restart {smb,nmb}

Configurar un recurso compartido al que solo puedan acceder los usuarios registrados

Para proteger el acceso a un recurso con una solicitud de inicio de sesión, cuando samba se ejecuta como un servidor independiente, debemos agregar un usuario existente a la base de datos de samba. Las credenciales de este usuario serán necesarias para acceder al directorio compartido. Por razones de seguridad, es una buena práctica crear un usuario dedicado a la tarea, omitiendo la creación de su directorio de inicio y asignándole un shell falso:

$ sudo adduser -M sambauser -s /sbin/nologin

El -M la opción pasada al comando es la forma abreviada de --no-create-home , que se explica por sí mismo; el -s opción, en su lugar, especifiquemos un shell, en este caso uno inválido a propósito:/sbin/nologin . En este punto, el usuario ni siquiera necesita tener una contraseña configurada en nuestro sistema.

Una vez que se crea el usuario, debemos agregarlo a la base de datos de samba:podemos realizar la operación usando el smbpasswd comando:

$ sudo smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Added user sambauser.

Después de ejecutar el comando, se nos solicita que asignemos una contraseña para el usuario y también que la confirmemos:esta contraseña solo será válida en el contexto de samba, no tiene nada que ver con la cuenta de usuario en nuestro sistema. Para restringir el recurso compartido que creamos anteriormente, tenemos que hacer un pequeño cambio en la sección dedicada:

[linuxconfig]
        path = /mnt/shared
        guest ok = no

Podemos verificar que nuestra configuración es válida usando el testparm comando:

$ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Processing section "[linuxconfig]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Nuevamente, debemos reiniciar el smb y nmb demonios para que nuestros cambios sean efectivos. Ahora solo se podrá acceder al directorio compartido después de proporcionar las credenciales correctas.

Configurar SELinux para samba

SELinux a menudo se ve como una complicación y se desactiva de inmediato. Esto no es necesario:solo debemos aprender a configurarlo y aprovechar la mejora en seguridad que proporciona. Para que nuestro recurso compartido de samba funcione cuando SELinux está en modo de "aplicación", debemos asignar el contexto apropiado a nuestro directorio y archivos compartidos:

$ sudo chcon -R -t samba_share_t /mnt/shared

En el ejemplo anterior, usamos el chcon comando con -t opción, para cambiar el TYPE sección del contexto de SELinux a samba_share_t . También usamos el -R cambiar para hacer que el comando sea recursivo. Este cambio sobrevivirá a un reinicio, pero no a un reetiquetado del sistema si existe una política predeterminada para nuestro directorio y archivos, porque en tal caso se volvería a aplicar la configuración predeterminada.

Si queremos que nuestro cambio sobreviva a un evento de reetiquetado, debemos agregar nuestra regla a la política. Podemos hacer esto usando el semanage comando:

$ sudo semanage fcontext -a -t samba_share_t "/mnt/shared(/.*)?"

Ya que usamos el (/.*)? regex, la regla se aplicará a todo el contenido del directorio "compartido" y al propio directorio. Podemos verificar que nuestra regla se haya agregado a la política enumerando las etiquetas en uso en nuestro sistema:

$ sudo semanage fcontext -l | grep /mnt/shared
/mnt/shared(/.*)?                                  all files          system_u:object_r:samba_share_t:s0

Ahora deberíamos tener una configuración de samba que funcione. Para modificar aún más la configuración de samba, es posible que también necesitemos manipular los valores booleanos de SELinux. Por ejemplo, al agregar usuarios existentes a samba, para permitir que se compartan sus directorios de inicio, debemos habilitar el booleano dedicado de SELinux. Para listar todos los booleanos relacionados con samba, podemos ejecutar:

$ sudo semanage boolean -l|grep samba
samba_create_home_dirs         (off  ,  off)  Allow samba to create home dirs
samba_domain_controller        (off  ,  off)  Allow samba to domain controller
samba_enable_home_dirs         (off  ,  off)  Allow samba to enable home dirs
samba_export_all_ro            (off  ,  off)  Allow samba to export all ro
samba_export_all_rw            (off  ,  off)  Allow samba to export all rw
samba_load_libgfapi            (off  ,  off)  Allow samba to load libgfapi
samba_portmapper               (off  ,  off)  Allow samba to portmapper
samba_run_unconfined           (off  ,  off)  Allow samba to run unconfined
samba_share_fusefs             (off  ,  off)  Allow samba to share fusefs
samba_share_nfs                (off  ,  off)  Allow samba to share nfs
sanlock_use_samba              (off  ,  off)  Allow sanlock to use samba
tmpreaper_use_samba            (off  ,  off)  Allow tmpreaper to use samba
use_samba_home_dirs            (off  ,  off)  Allow use to samba home dirs
virt_use_samba                 (off  ,  off)  Allow virt to use samba

En el resultado anterior, la segunda columna indica el valor actual del booleano, mientras que la tercera indica el valor predeterminado (ambos están desactivados, en este caso). El booleano que queremos activar, para habilitar el uso compartido de directorios de inicio, es samba_enable_home_dirs . Podemos realizar la operación usando el setsebool comando:

$ sudo setsebool samba_enable_home_dirs=1

Conclusiones

En este tutorial vimos cómo instalar samba en un sistema RHEL 8 / CentOS 8. También vimos cómo compartir un directorio, permitiendo el acceso a invitados o restringiéndolo a usuarios autenticados. También vimos cómo configurar el firewall para que el recurso compartido sea accesible desde otras máquinas en la red.

Finalmente, vimos cómo realizar los cambios necesarios para tener una configuración de samba que funcione con SELinux en modo de "aplicación". Si está interesado en SELinux, también puede leer nuestro artículo sobre el tema.


Cent OS
  1. Cómo instalar y configurar Nginx en CentOS 7

  2. Cómo instalar y configurar R en el sistema RHEL 8/CentOS 8 Linux

  3. CentOS/RHEL 7:Cómo instalar y configurar telnet

  4. Cómo instalar y configurar Samba en CentOS/RHEL

  5. Cómo instalar y configurar telnet en RHEL/CentOS 5,6

Cómo instalar y configurar el servidor VNC en CentOS 7 / RHEL 7

Cómo instalar y configurar Samba en CentOS 8

Cómo instalar Samba en RHEL y CentOS Stream

Cómo instalar y configurar Jenkins en CentOS 8 / RHEL 8

Cómo instalar y configurar MariaDB en CentOS/RHEL 7

Cómo instalar y configurar el servidor VNC en CentOS/RHEL 8

    Requisitos de software y convenciones de la línea de comandos de Linux
    Categoría Requisitos, convenciones o versión de software utilizada
    Sistema Red Hat Enterprise Linux 8
    Software Paquetes Samba, coreutils y policycoreutils-python-utils
    Otro Permiso para ejecutar el comando con privilegios de root.
    Convenciones # – requiere que los comandos de Linux dados se ejecuten con privilegios de root, ya sea directamente como usuario root o mediante el uso de sudo comando
    $ – requiere que los comandos de Linux dados se ejecuten como un usuario normal sin privilegios