bertvv.samba

Rol de Ansible bertvv.samba

Un rol de Ansible para configurar Samba como servidor de archivos.

Debido a la falta de tiempo y recursos, he entregado el mantenimiento de este rol a @vladgh. Ya no puedo dar seguimiento a problemas y PRs, ni asegurarme de que las nuevas versiones tengan una calidad suficientemente alta para ser realmente utilizables.

Gracias a todos los que mostraron su apoyo a lo largo de los años, a todos los colaboradores y especialmente a @vladgh por ofrecerse amablemente para hacerse cargo del mantenimiento.


Las responsabilidades de este rol son:

  • Instalar los paquetes necesarios
  • Configurar la configuración de SELinux (cuando SELinux está activo)
  • Crear directorios de compartición
  • Administrar usuarios y contraseñas de Samba
  • Gestionar el acceso a las comparticiones

Los siguientes elementos no son considerados preocupaciones de este rol, y debes configurarlos usando otro rol (por ejemplo, bertvv.rh-base):

  • Gestionar la configuración del firewall.
  • Crear usuarios del sistema. Los usuarios de Samba ya deben existir como usuarios del sistema.

¡Si te gusta/usa este rol, por favor considera darle una estrella! ¡Gracias!

CVE-2017-7494

Una vulnerabilidad de ejecución remota de código puede afectar tu instalación de Samba. Las versiones de Samba 3.5.0 y anteriores a 4.6.4 están afectadas. Si SELinux está habilitado en tu sistema, NO es vulnerable.

Este rol comprobará si la versión instalada de Samba está afectada por la vulnerabilidad y aplicará la solución propuesta: añadir nt pipe support = no a la sección [global] de la configuración. Ten en cuenta que esto desactiva la navegación de comparticiones por parte de los clientes de Windows.

Puedes desactivar explícitamente la solución si es necesario, configurando la variable de rol samba_mitigate_cve_2017_7494 en false.

Más información: https://access.redhat.com/security/cve/cve-2017-7494

Requisitos

No hay requisitos específicos.

Variables del rol

Variable Predeterminado Comentarios
samba_apple_extensions no Cuando es sí, habilita el soporte para extensiones SMB específicas de Apple. Requerido para que Time Machine funcione (ver más abajo)
samba_create_varwww_symlinks falso Cuando es cierto, se crean enlaces simbólicos en el directorio raíz web hacia las comparticiones. (var/www/ o /var/www/html, dependiendo de la plataforma)
samba_cups_server localhost:631 Valor para la opción global cups server (solo necesario cuando samba_printer_type es "cups")
samba_domain_master true Cuando es verdadero, smbd habilita la agrupación de listas de navegación a lo largo de WAN
samba_global_include - Archivo de configuración compatible con Samba con opciones que se cargarán en la sección [global] (ver más abajo)
samba_guest_account - Cuenta de invitado para usuarios desconocidos
samba_homes_include - Archivo de configuración compatible con Samba con opciones que se cargarán en la sección [homes] (ver más abajo)
samba_interfaces [] Lista de interfaces de red usadas para navegación, registro de nombres, etc.
samba_load_homes falso Cuando es cierto, los directorios de inicio de usuario son accesibles.
samba_load_printers falso Cuando es cierto, las impresoras conectadas al host son compartidas
samba_local_master true Cuando es cierto, nmbd intentará convertirse en el maestro local de la red
samba_log - Establece el archivo de registro. Si se deja indefinido, el registro se realiza a través de syslog.
samba_log_size 5000 Establece el tamaño máximo del archivo de registro.
samba_log_level 0 Establece el nivel de registro de Samba, 0 es el menos detallado y 10 es un montón de salida de depuración.
samba_map_to_guest bad user Comportamiento cuando usuarios no registrados acceden a las comparticiones.
samba_mitigate_cve_2017_7494 true La mitigación de CVE-2017-7494 rompe algunos clientes, como macOS High Sierra.
samba_netbios_name {{ ansible_hostname }} El nombre NetBIOS de este servidor.
samba_passdb_backend tdbsam Backend de base de datos de contraseñas.
samba_preferred_master true Cuando es cierto, indica que nmbd es un navegador maestro preferido para el grupo de trabajo.
samba_realm - Nombre de dominio del realm
samba_printer_type cups valor para la opción global printing y printcap name
samba_security user Configuración de seguridad de Samba
samba_server_max_protocol - Especifica una versión máxima de protocolo ofrecida por el servidor.
samba_server_min_protocol - Especifica una versión mínima de protocolo ofrecida por el servidor.
samba_server_string fileserver %m Cadena de comentarios para el servidor.
samba_shares_root /srv/shares Se crean directorios para las comparticiones bajo este directorio.
samba_shares [] Lista de diccionarios que contienen definiciones de compartición. Ver abajo para más detalles.
samba_users [] Lista de diccionarios que definen usuarios que pueden acceder a las comparticiones.
samba_wins_support true Cuando es cierto, Samba funcionará como servidor WINS
samba_workgroup WORKGROUP Nombre del grupo de trabajo del servidor.

Definiendo usuarios

Para permitir que los usuarios accedan a las comparticiones, necesitan obtener una contraseña específicamente para Samba:

samba_users:
  - name: alice
    password: ecila
  - name: bob
    password: bob
  - name: charlie
    password: eilrahc

Desafortunadamente, las contraseñas deben estar en texto plano por ahora. Además, ten en cuenta que este rol no cambiará la contraseña de un usuario existente.

¡Estos usuarios ya deben tener una cuenta en el host! Crear usuarios del sistema no es una preocupación de este rol, así que debes hacerlo por separado. Una posibilidad es mi rol bertvv.rh-base. Un ejemplo:

rhbase_users:
  - name: alice
    comment: 'Alice'
    password: !!
    shell: /sbin/nologin
    groups:
      [...]

Este usuario no tiene permitido iniciar sesión en el sistema (por ejemplo, con SSH) y solo tendría acceso a las comparticiones de Samba.

Definiendo comparticiones

Definir comparticiones de Samba y configurar el control de acceso puede ser complicado, ya que implica no solo obtener la configuración de Samba correcta, sino también los permisos de usuario y archivo, y la configuración de SELinux. Este rol intenta simplificar el proceso.

Para especificar una compartición, debes darle al menos un nombre:

samba_shares:
  - name: readonlyshare

Esto creará una compartición con solo acceso de lectura para los usuarios registrados. Los invitados no podrán ver el contenido de la compartición.

Una buena forma de configurar el acceso de escritura para una compartición es crear un grupo de usuarios del sistema, agregar usuarios a ese grupo y asegurarte de que tengan acceso de escritura al directorio de la compartición. Este rol asume que los grupos ya están configurados y los usuarios son miembros de los grupos que controlan el acceso de escritura. Supongamos que tienes dos usuarios jack y teach, miembros del grupo pirates. Esta definición de compartición les dará acceso tanto de lectura como de escritura a los pirates:

samba_shares:
  - name: piratecove
    comment: 'Un lugar para que los piratas se reúnan'
    group: pirates
    write_list: +pirates

Los invitados no tienen acceso a esta compartición, los usuarios registrados pueden leer. Puedes ajustar aún más el control de acceso. El acceso de lectura puede ser extendido a los invitados (agregando public: yes) o restringido a usuarios o grupos específicos (agregando valid_users: +pirates). El acceso de escritura puede ser restringido a piratas individuales (por ejemplo, write_list: jack). Los archivos añadidos a la compartición se agregarán al grupo especificado y el acceso de escritura del grupo se otorgará de forma predeterminada.

Este es un ejemplo de configurar múltiples módulos de objetos VFS para compartir un volumen de glusterfs. Las opciones del módulo de objetos VFS son opcionales. Los módulos de objetos VFS necesarios deben estar presentes/instalados fuera de este rol. En este caso, samba-glusterfs fue instalado en CentOS. Consulta la documentación de Samba para saber cómo instalar o cuáles son los módulos de objetos VFS predeterminados.

samba_shares:
  - name: gluster-app_deploys
    comment: 'Para la compartición Samba del volumen app_deploys'
    vfs_objects:
      - name: audit
        options:
          - name: facility
            value: LOCAL1
          - name: priority
            value: NOTICE
      - name: glusterfs
        options:
          - name: volume
            value: app_deploys
          - name: logfile
            value: /var/log/samba/glusterfs-app_deploys.%M.log
          - name: loglevel
            value: 7
    path: /
    read_only: no
    guest_ok: yes
    write_list: tomcat
    group: tomcat

A continuación, se muestra una visión completa de las opciones de compartición. Solo name es requerido; el resto es opcional.

Opción Predeterminado Comentario
browseable - Controla si esta compartición aparece en el explorador de archivos.
comment - Una cadena de comentarios para la compartición.
create_mode 0664 Consulta la documentación de Samba para más detalles.
directory_mode 0775 Consulta la documentación de Samba para más detalles.
include_file - Archivo de configuración compatible con Samba con opciones que se incluirán para esta compartición (ver abajo).
force_create_mode 0664 Consulta la documentación de Samba para más detalles.
force_directory_mode 0775 Consulta la documentación de Samba para más detalles.
group users El grupo de usuarios se agregará a los archivos en la compartición.
guest_ok - Permitir acceso de invitado.
name (requerido) - El nombre de la compartición.
owner root Establece el propietario del directorio.
path /{{samba_shares_root}}/{{name}} La ruta al directorio de la compartición.
public no Controla el acceso de lectura para usuarios invitados.
setype samba_share_t El tipo SELinux del directorio de la compartición
valid_users - Controla el acceso de lectura para usuarios registrados. Usa la sintaxis de la opción correspondiente de Samba.
vfs_objects - Consulta la documentación de Samba para más detalles.
writable - Escribible para invitados.
write_list - Controla el acceso de escritura para usuarios registrados. Usa la sintaxis de la opción correspondiente de Samba.

Los valores para valid_users y write_list deben ser una lista separados por comas de usuarios. Los nombres precedidos con + o @ se interpretan como grupos. La documentación de la configuración de Samba tiene más detalles sobre estas opciones.

Agregar archivos de configuración arbitrarios

Puedes agregar configuraciones que no están soportadas por este rol directamente a través de archivos de configuración personalizados que se incluirán desde el archivo de configuración principal. Hay tres tipos de archivos de inclusión: para la sección global, para la sección de inicio y para comparticiones individuales. Coloca tus archivos de configuración personalizados en un subdirectorio templates, relativo a la ubicación de tu libro de jugadas maestro. Luego, especifícalos en las variables samba_global_include, samba_homes_include, o include_file en la definición de samba_shares.

Tus archivos de configuración personalizados se consideran plantillas Jinja, por lo que puedes usar variables de Ansible dentro de ellos. Los archivos de configuración serán validados para asegurar que son sintácticamente correctos.

Por ejemplo, para incluir templates/global-include.conf, establece:

samba_global_include: global-include.conf

Ten en cuenta que no es necesario especificar el directorio templates/.

Igualmente, para incluir templates/piratecove-include.conf, específico para la compartición piratecove (ver el ejemplo arriba), establece:

samba_shares:
  - name: piratecove
    comment: 'Un lugar para que los piratas se reúnan'
    group: pirates
    write_list: +pirates
    include_file: piratecove-include.conf

El libro de jugadas de prueba tiene algunos ejemplos. Los archivos de configuración personalizados se pueden encontrar en la rama docker-tests.

Dependencias

No hay dependencias.

Ejemplo de libro de jugadas

Consulta el libro de jugadas de prueba.

Pruebas

Este rol se prueba usando Ansible Molecule. Las pruebas se lanzan automáticamente en Travis CI después de cada commit y PR.

Esta configuración de Molecule:

  • Ejecuta Yamllint y Ansible Lint
  • Crea un contenedor Docker
  • Ejecuta una verificación de sintaxis
  • Aplica el rol con un libro de jugadas de prueba
  • Ejecuta pruebas de aceptación con BATS

Este proceso se repite para las distribuciones de Linux soportadas.

Entorno de prueba local

Si deseas configurar un entorno de prueba local, puedes usar esta configuración reproducible basada en Vagrant+VirtualBox: https://github.com/bertvv/ansible-testenv. Pasos para instalar las herramientas necesarias manualmente:

  1. Docker, BATS y smbclient deben estar instalados en tu máquina (se asume que estás usando Linux). No deberían estar en ejecución contenedores Docker cuando inicies la prueba.
  2. Como recomienda Molecule, crea un entorno virtual de Python.
  3. Instala las herramientas de software python3 -m pip install molecule docker yamllint ansible-lint.
  4. Navega a la raíz del directorio del rol y ejecuta molecule test.

Molecule elimina automáticamente los contenedores después de una prueba. Si deseas verificar los contenedores tú mismo, ejecuta molecule converge seguido de molecule login --host HOSTNAME.

Los contenedores Docker se basan en imágenes creadas por Jeff Geerling, específicamente para pruebas de Ansible (busca imágenes nombradas geerlingguy/docker-DISTRO-ansible). Puedes usar cualquiera de sus imágenes, pero solo se admiten las distribuciones mencionadas en meta/main.yml.

La configuración predeterminada iniciará un contenedor CentOS 7. Elige otra distribución configurando la variable MOLECULE_DISTRO con el comando, por ejemplo:

MOLECULE_DISTRO=debian9 molecule test

o

MOLECULE_DISTRO=debian9 molecule converge

Puedes ejecutar las pruebas de aceptación en ambos servidores con molecule verify o manualmente con

SUT_IP=172.17.0.2 bats molecule/default/files/samba.bats

Necesitas inicializar la variable SUT_IP, la dirección IP del sistema bajo prueba. El servidor, smb1, debería tener la dirección IP 172.17.0.2.

Contribuir

Se agradecen problemas, solicitudes de características e ideas, y pueden ser publicadas en la sección de Problemas.

Las solicitudes de extracción también son muy bienvenidas. La mejor manera de enviar una PR es creando primero un fork de este proyecto de Github, luego crear una rama de tema para el cambio sugerido y subir esa rama a tu propio fork. Github puede luego crear fácilmente un PR basado en esa rama. ¡No olvides añadirte a la lista de colaboradores a continuación!

Licencia

Licencia BSD de 2 cláusulas, consulta LICENSE.md.

Colaboradores

Este rol solo pudo haber sido realizado gracias a las contribuciones de las personas enumeradas a continuación. Si tienes una idea para mejorarlo aún más, ¡no dudes en participar!

Se pueden publicar problemas, solicitudes de características, ideas, sugerencias, etc. en la sección de Problemas.

Las solicitudes de extracción también son muy bienvenidas. Por favor, crea una rama de tema para tus cambios propuestos. Si no lo haces, esto creará conflictos en tu fork después de la fusión. No dudes en añadirte a la lista de colaboradores a continuación en tu PR.

Ben Tomasik,
Bengt Giger,
Bert Van Vreckem (mantenedor),
Birgit Croux,
DarkStar1973,
George Hartzell,
Ian Young,
Jonas Heinrich,
Jonathan Underwood,
Karl Goetz,
morbidick,
Paul Montero,
Slavek Jurkowski,
Sven Eeckeman,
Tiemo Kieft,
Tobias Wolter,
Tomohiko Ozawa,
Robin Ophalvens.

Acerca del proyecto

This role installs and configures Samba as a file server. Deprecated, please use vladgh.samba instead.

Instalar
ansible-galaxy install bertvv.samba
Licencia
other
Descargas
268k
Propietario
Hi! My contribs are often related to my job (teaching Linux), but are mostly done in my free time. I can't always respond quickly to PRs and Issues. Sorry!