Samba DC como segundo controlador en el dominio AD Windows 2012R2 y carpetas redirigidas para clientes en Windows y Linux

Samba DC como segundo controlador en el dominio AD Windows 2012R2 y carpetas redirigidas para clientes en Windows y Linux
La realización de que me había metido en un proceso de sustitución no llegó de inmediato. Solo cuando comenzaron a llegar estaciones de trabajo de la organización superior con la distribución de 'Alt Linux' a bordo, sospeché que algo andaba mal.

Sin embargo, a medida que avanzaba por las etapas de aceptación de lo inevitable, me involucré y, de hecho, comencé a disfrutar un poco del proceso. En algún momento pensé que a este ritmo tarde o temprano tendría que separarme de las soluciones de organización del servicio de directorios de Microsoft y moverme hacia algo más exótico. Por lo tanto, para prepararme con anticipación para lo inevitable y tratar de captar tantos obstáculos ocultos como fuera posible, se decidió desplegar un entorno de prueba que incluyera:

  • DC1 — Windows Server 2012R2
  • DC2 — Alt Server 8.2
  • File Server — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Alt Estación de Trabajo 8.2

Tareas del entorno:

  1. Desplegar un dominio basado en w2k12r2. Crear un conjunto mínimo de políticas de grupo (similar a las utilizadas en la infraestructura de trabajo), incluidas las políticas de redirección de carpetas de usuario (Descargas / Documentos / Escritorio). Al final, mi objetivo es que cuando un usuario cambie de un puesto de trabajo en Windows a Linux y viceversa, tenga acceso cómodo a sus documentos de trabajo.
  2. Introducción de Samba DC como segundo controlador. Verificación de la replicación del servicio de directorios y DNS
  3. Configuración de clientes Linux para trabajar con carpetas redirigidas

Implementación:

  1. Instalación e introducción del nuevo controladorLa instalación de MS Windows 2012R2 es bastante sencilla y más o menos comprensible. En Internet hay 1001 manuales sobre el despliegue de dominios en Windows tanto usando GUI como mediante Powershell, así que no lo repetiré una vez más, solo dejaré el enlace a la documentación oficial, para aquellos curiosos que quieran refrescar su memoria.

    Sin embargo, hay un punto importante en este apartado. Hoy en día, Samba no puede trabajar con esquemas de directorio superiores a 2008R2.

    Título del spoiler Más bien, los desarrolladores han declarado dicho soporte como experimental. Pero en la práctica, intentar introducir Samba como segundo DC en un dominio Windows existente con un esquema 69 se encontrará con el siguiente error

    DsAddEntry falló con estado WERR_ACCESS_DENIED info (8567, ‘WERR_DS_INCOMPATIBLE_VERSION’)

    El problema es que Windows 2012 y 2012R2 utilizan herramientas WMI para trabajar con dominios y bosques, cuyo soporte estable se anunció solo para la versión Samba 4.11, que se lanzará antes de fin de año.
    De esto se deduce que la única opción para introducir Samba en el dominio AD desplegado en un servidor 2012R2 es degradar el esquema de 69 a 47. Por supuesto, en una infraestructura de trabajo no hay que hacerlo sin razones de peso, pero aquí tenemos un banco de pruebas, así que ¿por qué no?

    Instalamos Alt Server 8.2. Durante la instalación, seleccionamos el perfil 'Servidor Samba-DC (controlador AD)'. En el servidor desplegado, realizamos una actualización completa del sistema e instalamos el paquete task-samba-dc, que arrastrará todo lo necesario.

    # apt-get install task-samba-dc

    Si por alguna razón task-samba-dc, a pesar de las garantías de la documentación de Alt, se niega a instalar todo lo necesario.

    # apt-get install python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-common-libs libpytalloc-devel

    A continuación, pasamos a configurar Kerberos y obtener un ticket. Abrimos el archivo krb5.conf, vamos a la sección [libdefaults] y lo ajustamos de la siguiente manera:

    # vim /etc/krb5.conf
     dns_lookup_kdc = true
     dns_lookup_realm = true
     default_realm = TEST.LOCAL

    Solicitamos un ticket

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Verificamos la lista de tickets obtenidos de Kerberos

    # klist
    Ticket cache: KEYRING:persistent:0:0
    Default principal: administrator@TEST.LOCAL
    
    Valid starting       Expires              Service principal
    16.05.2019 11:51:38  16.05.2019 21:51:38  krbtgt/TEST.LOCAL@TEST.LOCAL
            renew until 23.05.2019 11:51:35

    Ahora eliminamos o renombramos el archivo de configuración existente de Samba.

    # mv smb.conf smb.conf.bak1

    Y finalmente, introducimos en el dominio AD como segundo controlador:

    # samba-tool domain join test.local DC -U"TESTadministrator"

    La inclusión exitosa vendrá acompañada del siguiente registro

    Buscando un DC escribible para el dominio 'test.local'
    Encontrado DC DC1.TEST.LOCAL
    Contraseña para [TESTadministrator]:
    Reconectando al maestro de nombres e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.LOCAL
    El nombre DNS del nuevo maestro de nombres es DC1.TEST.LOCAL
    el grupo de trabajo es TEST
    el ámbito es TEST.LOCAL
    Añadiendo CN=DC2,OU=Controladores de Dominio,DC=TEST,DC=LOCAL
    Añadiendo CN=DC2,CN=Servidores,CN=Nombre-Del-Sitio-Por-Defecto,CN=Sitios,CN=Configuración,DC=TEST,DC=LOCAL
    Añadiendo CN=Configuraciones NTDS,CN=DC2,CN=Servidores,CN=Nombre-Del-Sitio-Por-Defecto,CN=Sitios,CN=Configuración,DC=TEST,DC=LOCAL
    Añadiendo SPNs a CN=DC2,OU=Controladores de Dominio,DC=TEST,DC=LOCAL
    Estableciendo la contraseña de cuenta para DC2$
    Activando la cuenta
    Llamando a la provisión básica
    Buscando direcciones IPv4
    Buscando direcciones IPv6
    No se asignará ninguna dirección IPv6
    Configurando share.ldb
    Configurando secrets.ldb
    Configurando el registro
    Configurando la base de datos de privilegios
    Configurando la base de datos idmap
    Configurando la base de datos SAM
    Configurando las particiones y configuraciones de sam.ldb
    Configurando sam.ldb rootDSE
    Pre-cargando el esquema de Samba 4 y AD
    Se ha generado una configuración de Kerberos adecuada para Samba AD en /var/lib/samba/private/krb5.conf
    Provisión OK para el DN del dominio DC=TEST,DC=LOCAL
    Iniciando replicación
    Schema-DN[CN=Esquema,CN=Configuración,DC=TEST,DC=LOCAL] objetos[402/1426] valores_enlazados[0/0]
    Schema-DN[CN=Esquema,CN=Configuración,DC=TEST,DC=LOCAL] objetos[804/1426] valores_enlazados[0/0]
    Schema-DN[CN=Esquema,CN=Configuración,DC=TEST,DC=LOCAL] objetos[1206/1426] valores_enlazados[0/0]
    Schema-DN[CN=Esquema,CN=Configuración,DC=TEST,DC=LOCAL] objetos[1608/1426] valores_enlazados[0/0]
    Schema-DN[CN=Esquema,CN=Configuración,DC=TEST,DC=LOCAL] objetos[1743/1426] valores_enlazados[0/0]
    Analizando y aplicando objetos del esquema
    Partición[CN=Configuración,DC=TEST,DC=LOCAL] objetos[402/2240] valores_enlazados[0/24]
    Partición[CN=Configuración,DC=TEST,DC=LOCAL] objetos[804/2240] valores_enlazados[0/24]
    Partición[CN=Configuración,DC=TEST,DC=LOCAL] objetos[1206/2240] valores_enlazados[0/24]
    Partición[CN=Configuración,DC=TEST,DC=LOCAL] objetos[1608/2240] valores_enlazados[0/24]
    Partición[CN=Configuración,DC=TEST,DC=LOCAL] objetos[1772/2240] valores_enlazados[24/24]
    Replicando objetos críticos desde el DN base del dominio
    Partición[DC=TEST,DC=LOCAL] objetos[109/110] valores_enlazados[26/29]
    Partición[DC=TEST,DC=LOCAL] objetos[394/5008] valores_enlazados[29/29]
    Listo con NC replicado siempre (base, configuración, esquema)
    Replicando DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partición[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objetos[42/42] valores_enlazados[0/0]
    Replicando DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partición[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objetos[20/20] valores_enlazados[0/0]
    Exop en[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] objetos[3] valores_enlazados[0]
    Confirmando la base de datos SAM
    Añadiendo 1 registro DNS remoto para DC2.TEST.LOCAL
    Añadiendo registro DNS A DC2.TEST.LOCAL para IPv4 IP: 192.168.90.201
    Añadiendo registro DNS CNAME 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL para DC2.TEST.LOCAL
    Todos los demás registros DNS (como registros _ldap SRV) se crearán samba_dnsupdate al primer inicio
    Replicando nuevos registros DNS en DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partición[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objetos[1/42] valores_enlazados[0/0]
    Replicando nuevos registros DNS en DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partición[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objetos[1/20] valores_enlazados[0/0]
    Enviando DsReplicaUpdateRefs para todas las particiones replicadas
    Estableciendo isSynchronized y dsServiceName
    Configurando la base de datos de secretos
    Unido al dominio TEST (SID S-1-5-21-3959064270-1572045903-2556826204) como un DC

    En la herramienta ADUC debe aparecer un registro del nuevo DC en el dominio TEST.LOCAL, y en el administrador de DNS debe haber un nuevo registro A correspondiente a DC2.

  2. Replicación entre controladoresPrimero, verifiquemos el funcionamiento del servicio de replicación de directorios (DRS)
    # samba-tool drs showrepl

    Todos los intentos de replicación en la salida deben ser exitosos. En la lista de objetos KCC, nuestro DC1 en Windows debería aparecer dentro de los 15 minutos después de la entrada.

    Nombre del Sitio: Default-First-Site-NameDC2
    	Opciones DSA: 0x00000001
    	GUID del objeto DSA: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	ID de invocación DSA: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== VECINOS ENTRANTES ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:56:31 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:56:31 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:56:32 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:56:32 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:56:32 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:56:32 2019 MSK
    
    	DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:56:32 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:56:32 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:56:33 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:56:33 2019 MSK
    
    	==== VECINOS SALIENTES ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Jue May 23 16:40:03 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Jue May 23 16:40:03 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Jue May 23 16:40:03 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Jue May 23 16:40:03 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Jue May 23 16:40:08 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Jue May 23 16:40:08 2019 MSK
    
    	DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Jue May 23 16:40:08 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Jue May 23 16:40:08 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Default-First-Site-NameDC1 a través de RPC
    	                GUID del objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Último intento @ Lun May 27 12:12:17 2019 MSK fue exitoso
    	                0 fallo(s) consecutivo(s).
    	                Último éxito @ Lun May 27 12:12:17 2019 MSK
    
    	==== OBJETOS DE CONEXIÓN KCC ====
    
    	Conexión --
    	        Nombre de la conexión: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Habilitado        : VERDADERO
    	        Nombre DNS del servidor : DC1.test.local
    	        Nombre DN del servidor  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=local
    	                TipoDeTransporte: RPC
    	                opciones: 0x00000001
    	Advertencia: ¡No hay NC replicado para la conexión!

    Advertencia «¡No hay NC replicado para la Conexión!» se puede ignorar sin problemas. Aparece porque al registrar un nuevo DC, Samba establece incorrectamente algunas banderas de replicación.

    También sería bueno verificar la replicación de LDAP.

    # samba-tool ldapcmp ldap://dc1.test.local ldap://dc2.test.local -Uadministrator

    El comando mencionado anteriormente comparará los valores de los atributos de los objetos en el DC1 y DC2.

    Ejemplo de replicación exitosa

    * Comparando el contexto [DOMAIN]...
    
    	* Objetos a comparar: 249
    
    	* Resultado para [DOMAIN]: ÉXITO
    
    	* Comparando el contexto [CONFIGURATION]...
    
    	* Objetos a comparar: 1750
    
    	* Resultado para [CONFIGURATION]: ÉXITO
    
    	* Comparando el contexto [SCHEMA]...
    
    	* Objetos a comparar: 1739
    
    	* Resultado para [SCHEMA]: ÉXITO
    
    	* Comparando el contexto [DNSDOMAIN]...
    
    	* Objetos a comparar: 42
    
    	* Resultado para [DNSDOMAIN]: ÉXITO
    
    	* Comparando el contexto [DNSFOREST]...
    
    	* Objetos a comparar: 20
    
    	* Resultado para [DNSFOREST]: ÉXITO

    En algunos casos, los atributos de los objetos en diferentes controladores pueden diferir, y la salida del comando lo indicará. Pero no en todos los casos esto será un signo de problemas de replicación.

    El siguiente paso es configurar manualmente una replicación estable del directorio SysVol.
    El asunto es que Samba aún no soporta DFS-R, al igual que no soportaba el FRS anterior. Por lo tanto, para la replicación entre DC Samba y Windows, la única solución que funciona hoy en día es la replicación unidireccional mediante la herramienta Robocopy del paquete Windows Server 2003 Resource Kit Tools.

    Los desarrolladores de Samba, para evitar problemas de compatibilidad, recomiendan instalar primero el paquete de utilidades en una estación de trabajo normal, y después copiar Robocopy en el controlador en la carpeta «C:Program Files (x86)Windows Resource KitsTools»

    Después de la instalación, en el programador de tareas en el controlador con Windows, creamos una tarea para ejecutar la replicación con los siguientes parámetros:

    — Ejecutar para todos los usuarios
    — Disparador para ejecutar Diariamente cada 5 minutos durante el día
    — En acciones, especificamos la ruta a la herramienta robocopy, y como argumentos indicamos:

    DC1SYSVOLtest.local DC2SYSVOLtest.local /mir /sec

    En este caso específico, copiamos el contenido del directorio SysVol desde DC1 a DC2.

  3. Carpetas de usuario portátiles mediante la configuración pam_mountHe encontrado dos soluciones viables para esta tarea mediante ensayo y error.
    1. Montaje completo de la carpeta de perfil de la red en la sección /home. Una opción sencilla. Funciona perfectamente si los nombres de las carpetas Mis documentos, Descargas y Escritorio coinciden en ambos sistemas operativos. Se asume que la PC con Linux ya ha sido unida al dominio y los usuarios inician sesión con sus cuentas de dominio, utilizando sssd como mecanismo de autenticación y autorización.
      # vim /etc/security/pam_mount.conf.xml
      <volume uid="100000000-2000000000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)" mountpoint="~" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/>
      

      donde:

      • uid=«100000000-2000000000» — rango de UID asignado a los usuarios de dominio por SSSD
      • server=«dfs» — nombre del servidor de archivos
      • path=«Profile_Users/%(USER)» — recurso en el servidor de archivos que contiene el perfil del usuario
      • mountpoint=»~» — punto de montaje en la carpeta personal del usuario

      El nombre de usuario se pasa a la macrovariable «%(USER)», utilizada por pam_mount, para conectar nuestro recurso de red, tal como se ingresa en el gestor de pantalla. Por lo tanto, es importante que el inicio de sesión en el DM se realice sin especificar explícitamente el nombre de dominio.

      En sssd.conf, esto se resuelve comentando o estableciendo el valor False en la opción use_fully_qualified_names, que activa el modo de nombres completos (incluido el dominio) para usuarios y grupos.

    2. El segundo método es menos directo y más rudimentario, y en mi opinión más conveniente y preferible. La diferencia con el primero radica únicamente en la configuración de pam_mount.
      # vim /etc/security/pam_mount.conf.xml

      Es decir, simplemente montamos cada una de nuestras carpetas en el directorio correspondiente por separado.

Conclusiones

Durante medio mes de trabajo en el banco de pruebas, esta configuración sobrevivió exitosamente a varias desconexiones prolongadas y cortas de ambos controladores, prácticamente sin consecuencias para los clientes (una vez, un cliente en Windows 7 perdió la relación de confianza).

En general, tengo una impresión bastante positiva del trabajo con este producto, a pesar de todos los matices que enfrenté, tanto en el artículo como "tras bambalinas".

Hay muchas piedras en el camino, y habrá que pescarlas en gran cantidad durante el trabajo con Samba. Sin embargo, hoy en día no hay otras soluciones que permitan organizar un entorno híbrido, utilizando el servicio de directorio y sin usar Windows.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster