Samba DC como segundo controlador en el dominio AD de Windows 2012R2 y carpetas móviles para clientes en Windows y Linux

imagen

La constatación de que estaba en la mezcla de importación no llegó de inmediato. Solo cuando los nuevos suministros de una PC comenzaron a llegar de manera estable desde la organización matriz con la distribución Alt Linux a bordo, sospeché que algo andaba mal.

Sin embargo, en el proceso de pasar por las etapas de aceptar lo inevitable, me involucré e incluso comencé a disfrutar un poco del proceso. Y en algún momento pensé que, a ese ritmo, tarde o temprano tendría que renunciar a la decisión de organizar el servicio de directorio de Microsoft y avanzar hacia algo más exótico. Por lo tanto, para prepararse de antemano para lo inevitable y, si es posible, para atrapar más dificultades, se decidió implementar un banco de pruebas, que incluye:

  • DC1 - Windows Server 2012R2
  • DC2 - Servidor Alt 8.2
  • Servidor de archivos - Windows Server 2012R2
  • PC1 - Windows 7
  • PC2 - Alt Workstation 8.2

Tareas del stand:


  1. Implemente un dominio basado en w2k12r2. Cree un conjunto mínimo de políticas grupales (similares a las utilizadas en la infraestructura de trabajo), incluida una política para transferir carpetas de trabajo de usuarios (Descargas / Documentos / Escritorio). Al final, quiero que cuando un usuario cambie su lugar de trabajo de Windows a Linux y viceversa, tenga un acceso cómodo a sus documentos de trabajo.
  2. Entrando a Samba DC por el segundo controlador. Comprobación del servicio de directorio y la replicación de DNS
  3. Configuración de clientes Linux con carpetas móviles

Implementación


  1. Instalar e ingresar un nuevo controlador

    Con la instalación de MS Windows 2012R2, todo es simple y menos claro. En Internet hay un manual 1001 para implementar un dominio en Windows utilizando la GUI y Powershell, por lo que no lo repetiré nuevamente, solo dejaré un enlace desactivado. documentación para los curiosos y aquellos que desean refrescar su memoria.

    Sin embargo, hay un punto importante en este párrafo. Hasta la fecha, Samba no puede trabajar con esquemas de catálogo superiores a 2008R2.

    Encabezado de spoiler
    Por el contrario, los desarrolladores de este soporte se declaran como experimentales. Pero en la práctica, un intento de ingresar a samba como un segundo DC en un dominio de Windows existente con el esquema 69 se encontrará con el siguiente error
    DsAddEntry falló con el estado WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')


    El problema es que Windows 2012 y 2012R2 usan herramientas WMI para trabajar con dominios y bosques, cuyo soporte estable se anuncia solo para Samba versión 4.11, que se lanzará antes de finales de este año.
    Se deduce que la única opción para introducir samba al dominio AD implementado en un servidor 2012R2 es reducir el esquema de 69 a 47. Por supuesto, esto no es necesario en la infraestructura de trabajo sin una buena razón, pero tenemos un banco de pruebas aquí, entonces ¿por qué? En realidad no.

    Ponemos Alt Server 8.2. Durante la instalación, seleccione el perfil "Servidor Samba-DC (Controlador AD)". En el servidor implementado, realizamos una actualización completa del sistema e instalamos el paquete task-samba-dc, que extraerá todo lo que necesita

    # apt-get install task-samba-dc 

    Si task-samba-dc de repente, contrario a las garantías de la documentación, Alta 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, proceda a configurar Kerberos y reciba un ticket. Abra el archivo krb5.conf, vaya a la sección [libdefaults] y llévelo al siguiente formulario:

     # vim /etc/krb5.conf 

      dns_lookup_kdc = true dns_lookup_realm = true default_realm = TEST.LOCAL 

    Solicitar un boleto

     # kinit administrator Password for administrator@TEST.LOCAL: 

    Verificación de la lista de tickets Kerberos recibidos

     # 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 elimine o cambie el nombre de la configuración de samba existente.

     # mv smb.conf smb.conf.bak1 

    Finalmente, ingresamos el segundo controlador en el dominio AD:

     # samba-tool domain join test.local DC -U"TEST\administrator" 

    La entrada exitosa será seguida por el siguiente registro
     Finding a writeable DC for domain 'test.local' Found DC DC1.TEST.LOCAL Password for [TEST\administrator]: Reconnecting to naming master e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST. LOCAL DNS name of new naming master is DC1.TEST.LOCAL workgroup is TEST realm is TEST.LOCAL Adding CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL Adding CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC =TEST,DC=LOCAL Adding CN=NTDS Settings,CN=DC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN =Configuration,DC=TEST,DC=LOCAL Adding SPNs to CN=DC2,OU=Domain Controllers,DC=TEST,DC=LOCAL Setting account password for DC2$ Enabling account Calling bare provision Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up share.ldb Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema A Kerberos configuration suitable for Samba AD has been generated at /var/lib/sa mba/private/krb5.conf Provision OK for domain DN DC=TEST,DC=LOCAL Starting replication Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[402/1426] linked _values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[804/1426] linked _values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1206/1426] linke d_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1608/1426] linke d_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=TEST,DC=LOCAL] objects[1743/1426] linke d_values[0/0] Analyze and apply schema objects Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[402/2240] linked_values[0/ 24] Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[804/2240] linked_values[0/ 24] Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1206/2240] linked_values[0 /24] Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1608/2240] linked_values[0 /24] Partition[CN=Configuration,DC=TEST,DC=LOCAL] objects[1772/2240] linked_values[2 4/24] Replicating critical objects from the base DN of the domain Partition[DC=TEST,DC=LOCAL] objects[109/110] linked_values[26/29] Partition[DC=TEST,DC=LOCAL] objects[394/5008] linked_values[29/29] Done with always replicated NC (base, config, schema) Replicating DC=DomainDnsZones,DC=TEST,DC=LOCAL Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objects[42/42] linked_values[0/0] Replicating DC=ForestDnsZones,DC=TEST,DC=LOCAL Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objects[20/20] linked_values[0/0] Exop on[CN=RID Manager$,CN=System,DC=TEST,DC=LOCAL] objects[3] linked_values[0] Committing SAM database Adding 1 remote DNS records for DC2.TEST.LOCAL Adding DNS A record DC2.TEST.LOCAL for IPv4 IP: 192.168.90.201 Adding DNS CNAME record 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL for DC2.TEST.LOCAL All other DNS records (like _ldap SRV records) will be created samba_dnsupdate on first startup Replicating new DNS records in DC=DomainDnsZones,DC=TEST,DC=LOCAL Partition[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objects[1/42] linked_values[0/0] Replicating new DNS records in DC=ForestDnsZones,DC=TEST,DC=LOCAL Partition[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objects[1/20] linked_values[0/0] Sending DsReplicaUpdateRefs for all the replicated partitions Setting isSynchronized and dsServiceName Setting up secrets database Joined domain TEST (SID S-1-5-21-3959064270-1572045903-2556826204) as a DC 


    Debería aparecer un registro sobre el nuevo DC en el dominio TEST.LOCAL en el complemento ADUC, y debería aparecer un nuevo registro A correspondiente a DC2 en el administrador de DNS.
  2. Replicación entre controladores

    Para comenzar, consulte el 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, dentro de los 15 minutos posteriores a la entrada, debería aparecer nuestro DC1 en Windows
     Default-First-Site-Name\DC2 DSA Options: 0x00000001 DSA object GUID: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf DSA invocationId: 017997b5-d718-41d7-a3f3-e57ab5151b5c ==== INBOUND NEIGHBORS ==== DC=ForestDnsZones,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:56:31 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:56:31 2019 MSK DC=DomainDnsZones,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:56:32 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:56:32 2019 MSK CN=Schema,CN=Configuration,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:56:32 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:56:32 2019 MSK DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:56:32 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:56:32 2019 MSK CN=Configuration,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:56:33 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:56:33 2019 MSK ==== OUTBOUND NEIGHBORS ==== DC=ForestDnsZones,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Thu May 23 16:40:03 2019 MSK was successful 0 consecutive failure(s). Last success @ Thu May 23 16:40:03 2019 MSK DC=DomainDnsZones,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Thu May 23 16:40:03 2019 MSK was successful 0 consecutive failure(s). Last success @ Thu May 23 16:40:03 2019 MSK CN=Schema,CN=Configuration,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Thu May 23 16:40:08 2019 MSK was successful 0 consecutive failure(s). Last success @ Thu May 23 16:40:08 2019 MSK DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Thu May 23 16:40:08 2019 MSK was successful 0 consecutive failure(s). Last success @ Thu May 23 16:40:08 2019 MSK CN=Configuration,DC=test,DC=local Default-First-Site-Name\DC1 via RPC DSA object GUID: 60fb339d-efa3-4585-a42d-04974e6601b7 Last attempt @ Mon May 27 12:12:17 2019 MSK was successful 0 consecutive failure(s). Last success @ Mon May 27 12:12:17 2019 MSK ==== KCC CONNECTION OBJECTS ==== Connection -- Connection name: 6d2652b3-e723-4af7-a19f-1ee48915753c Enabled : TRUE Server DNS name : DC1.test.local Server DN name : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=local TransportType: RPC options: 0x00000001 Warning: No NC replicated for Connection! 


    Advertencia "¡No hay NC replicado para Connection!" Puede ser ignorado con seguridad. Parece debido al hecho de que al registrar un nuevo DC, samba establece incorrectamente algunos indicadores de replicación.

    Verificar la replicación LDAP también es una buena idea.

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

    El comando anterior comparará los valores de los atributos de los objetos de todo el directorio en DC1 y DC2.

    Ejemplo de replicación exitosa
     * Comparing [DOMAIN] context... * Objects to be compared: 249 * Result for [DOMAIN]: SUCCESS * Comparing [CONFIGURATION] context... * Objects to be compared: 1750 * Result for [CONFIGURATION]: SUCCESS * Comparing [SCHEMA] context... * Objects to be compared: 1739 * Result for [SCHEMA]: SUCCESS * Comparing [DNSDOMAIN] context... * Objects to be compared: 42 * Result for [DNSDOMAIN]: SUCCESS * Comparing [DNSFOREST] context... * Objects to be compared: 20 * Result for [DNSFOREST]: SUCCESS 

    En algunos casos, los atributos de los objetos en diferentes controladores pueden diferir, y la salida del comando le informará al respecto. Pero no en todos los casos, esto será un signo de un problema de replicación.

    El siguiente paso es configurar manualmente la replicación estable del directorio SysVol.
    Sin embargo, el hecho es que samba aún no es compatible con DFS-R, ya que no era compatible con 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 utilizando la utilidad Robocopy de las herramientas del Kit de recursos de Windows Server 2003 .

    Los desarrolladores de Samba, para evitar problemas de compatibilidad, recomiendan instalar primero el kit de utilidad en una estación de trabajo normal y luego copiar Robocopy al controlador en la carpeta "C: \ Archivos de programa (x86) \ Windows Resource Kits \ Tools \"

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

    - Realizar para todos los usuarios
    - Disparador para ejecutar diariamente cada 5 minutos durante el día
    - En las acciones que prescribimos la ruta a la utilidad robocopy, indicamos como argumentos:

     \\DC1\SYSVOL\test.local\ \\DC2\SYSVOL\test.local\ /mir /sec 

    En un caso específico, copie el contenido del directorio SysVol de DC1 a DC2.
  3. Carpetas de usuario portátiles que utilizan la configuración pam_mount

    Empíricamente, encontré dos opciones viables para resolver este problema con su ayuda.

    1. Montaje completo de la carpeta de perfil de la red a la sección / home

      Una opción simple Funciona bien si los nombres de carpeta Mis documentos, Descargas y Escritorio son los mismos en ambos sistemas operativos. Se entiende que ya se ha ingresado una PC con Linux en el dominio y los usuarios inician sesión en 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" - el rango de UID asignado a los usuarios del dominio desde SSSD
      • server = "dfs" - nombre del servidor de archivos
      • ruta = "Usuarios_perfil /% (USUARIO)" - un recurso en el servidor de archivos con el perfil de usuario alojado
      • mountpoint = "~" - ruta de montaje a la carpeta de inicio del usuario

      El inicio de sesión del usuario se pasa a la variable macro "% (USER)" utilizada por pam_mount para conectar nuestro recurso de red, en la forma en que se ingresa en el administrador de visualización. Por lo tanto, es importante que el inicio de sesión DM se ingrese sin una indicación explícita del nombre de dominio.

      En sssd.conf, esto se resuelve comentando o configurando el valor False en la opción use_fully_qualified_names , que activa el modo de nombre completo (incluido el dominio) para usuarios y grupos.
    2. El segundo método es menos directo y torpe, y en mi opinión es más conveniente y preferido. La diferencia con el primero solo en la configuración de pam_mount

       # vim /etc/security/pam_mount.conf.xml 

       <volume uid="100000000-2000200000" 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"/> <volume uid="100000000-2000200000" fstype="cifs" server="dfs" path="Profile_Users/%(USER)/Downloads" mountpoint="~/" options="sec=krb5,cruid=%(USERUID),nounix,uid=%(USERUID),gid=%(USERGID),file_mode=0664,dir_mode=0775"/> <volume uid="100000000-2000200000" 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"/> 

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

Conclusiones

Durante medio mes de trabajo en un banco de pruebas, este paquete sobrevivió con éxito a varios apagones alternos a largo y corto plazo de ambos controladores, sin prácticamente consecuencias para los clientes (una vez que un cliente en Windows 7 perdió la confianza).

En general, tuve una impresión bastante agradable de trabajar con este producto, incluso a pesar de todos los matices que tuve que enfrentar tanto en el artículo como detrás de escena.

Hay dificultades, hay muchas, y en el curso del trabajo con samba, deberán capturarse en grandes cantidades. Sin embargo, hasta la fecha, no hay otras soluciones que le permitan organizar un entorno híbrido utilizando servicios de directorio y sin utilizar Windows.

Source: https://habr.com/ru/post/450572/


All Articles