Samba DC como um segundo controlador no domínio AD do Windows 2012R2 e pastas móveis para clientes no Windows e Linux

imagem

A percepção de que eu estava no mix de importação não veio imediatamente. Somente quando novos suprimentos de um PC começaram a chegar de forma estável da organização-mãe com a distribuição Alt Linux a bordo, eu suspeitei que algo estivesse errado.

No entanto, no processo de passar pelas etapas de aceitação do inevitável, me envolvi e até comecei a gostar um pouco do processo. E, em algum momento, pensei que, a esse ritmo, mais cedo ou mais tarde teria que desistir da decisão de organizar o serviço de diretório da Microsoft e avançar para algo mais exótico. Portanto, a fim de preparar antecipadamente o inevitável e, se possível, capturar mais armadilhas, foi decidido implantar uma bancada de testes, que inclui:

  • DC1 - Windows Server 2012R2
  • DC2 - Servidor Alt 8.2
  • Servidor de arquivos - Windows Server 2012R2
  • PC1 - Windows 7
  • PC2 - Estação de trabalho Alt 8.2

Tarefas do estande:


  1. Implante um domínio com base em w2k12r2. Crie um conjunto mínimo de políticas de grupo (semelhantes às usadas na infraestrutura de trabalho), incluindo uma política para transferir pastas de trabalho do usuário (Downloads / Documentos / Área de Trabalho). No final, eu quero que, quando um usuário altere seu local de trabalho do Windows para Linux e vice-versa, ele tenha acesso confortável aos seus documentos de trabalho.
  2. Entrando no Samba DC pelo segundo controlador. Verificando o serviço de diretório e a replicação de DNS
  3. Configurando clientes Linux com pastas móveis

Implementação:


  1. Instale e insira um novo controlador

    Com a instalação do MS Windows 2012R2, tudo é simples e menos claro. Na Internet, há um manual 1001 para implantar um domínio no Windows usando a GUI e o Powershell, por isso não vou repeti-lo novamente, deixarei apenas um link desativado. documentação para curiosos e para quem deseja refrescar sua memória.

    No entanto, há um ponto importante neste parágrafo. Até o momento, o Samba não pode trabalhar com esquemas de catálogo acima de 2008R2.

    Título de spoiler
    Em vez disso, os desenvolvedores desse suporte são declarados como experimentais. Mas, na prática, uma tentativa de inserir o samba como um segundo controlador de domínio em um domínio existente do Windows com o esquema 69 o encontrará com o seguinte erro
    DsAddEntry falhou com o status WERR_ACCESS_DENIED info (8567, 'WERR_DS_INCOMPATIBLE_VERSION')


    O problema é que o Windows 2012 e o 2012R2 usam ferramentas WMI para trabalhar com domínios e florestas, cujo suporte estável é anunciado apenas para o Samba versão 4.11, que deve sair antes do final deste ano.
    Daqui resulta que a única opção para introduzir o samba no domínio do AD implantado em um servidor 2012R2 é reduzir o esquema de 69 para 47. Obviamente, isso não é necessário na infraestrutura de trabalho sem uma boa razão, mas temos um banco de testes aqui, por que motivo na verdade não.

    Colocamos o Alt Server 8.2. Durante a instalação, selecione o perfil "Servidor Samba-DC (Controlador AD)". No servidor implantado, fazemos uma atualização completa do sistema e instalamos o pacote task-samba-dc, que extrairá tudo o que você precisa

    # apt-get install task-samba-dc 

    Se task-samba-dc subitamente, contrariamente às garantias da documentação, Alta se recusa a instalar tudo o que for necessário.
     # apt-get install python-module-samba-DC samba-DC-common samba-DC-winbind-clients samba-DC-winbind samba-DC-common-libs libpytalloc-devel 


    Em seguida, prossiga para configurar o Kerberos e receba um ticket. Abra o arquivo krb5.conf, vá para a seção [libdefaults] e leve-o para o seguinte formulário:

     # vim /etc/krb5.conf 

      dns_lookup_kdc = true dns_lookup_realm = true default_realm = TEST.LOCAL 

    Solicitar um ingresso

     # kinit administrator Password for administrator@TEST.LOCAL: 

    Verificando a lista de tickets Kerberos recebidos

     # 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 

    Agora exclua ou renomeie a configuração existente do samba.

     # mv smb.conf smb.conf.bak1 

    Por fim, inserimos o segundo controlador no domínio do AD:

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

    A entrada bem-sucedida será seguida pelo seguinte log
     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 


    Um registro sobre o novo controlador de domínio no domínio TEST.LOCAL deve aparecer no snap-in ADUC e um novo registro A correspondente ao DC2 deve aparecer no gerenciador de DNS.
  2. Replicação entre controladores

    Para começar, confira o Serviço de Replicação de Diretório (DRS)

     # samba-tool drs showrepl 

    Todas as tentativas de replicação na saída devem ser bem-sucedidas. Na lista de objetos KCC, dentro de 15 minutos após a entrada, nosso DC1 no Windows deve aparecer
     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! 


    Aviso "Nenhum NC replicado para o Connection!" pode ser ignorado com segurança. Parece que, ao registrar um novo controlador de domínio, o samba define incorretamente alguns sinalizadores de replicação.

    Verificar a replicação LDAP também é uma boa ideia.

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

    O comando acima comparará os valores de atributo dos objetos de todo o diretório no DC1 e DC2.

    Exemplo de replicação bem-sucedida
     * 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 

    Em alguns casos, os atributos de objetos em diferentes controladores podem diferir e a saída do comando informará sobre isso. Mas nem sempre, isso será um sinal de um problema de replicação.

    A próxima etapa é configurar manualmente a replicação estável do diretório SysVol.
    O fato é que o samba ainda não suporta o DFS-R, no entanto, pois não suportava o FRS anterior. Portanto, para a replicação entre o DC Samba e o Windows, a única solução funcional atualmente é a replicação unidirecional usando o utilitário Robocopy das Ferramentas do Windows Server 2003 Resource Kit .

    Os desenvolvedores do Samba, para evitar problemas de compatibilidade, recomendam primeiro instalar o kit utilitário em uma estação de trabalho comum e, em seguida, copie o Robocopy para o controlador na pasta "C: \ Arquivos de Programas (x86) \ Windows Resource Kits \ Tools \"

    Após a instalação, no agendador de tarefas no controlador do Windows, criamos uma tarefa para replicação com os seguintes parâmetros:

    - Executar para todos os usuários
    - Disparador para executar diariamente a cada 5 minutos durante o dia
    - Nas ações que prescrevemos o caminho para o utilitário robocopy, indicamos como argumentos:

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

    Em um caso específico, copie o conteúdo do diretório SysVol do DC1 para o DC2.
  3. Pastas de usuário portáteis usando a configuração pam_mount

    Empiricamente, encontrei duas opções viáveis ​​para resolver esse problema com sua ajuda.

    1. Montagem completa da pasta de perfil da rede na seção / home

      Uma opção simples. Funciona bem se os nomes de pasta Meus Documentos, Downloads e Área de Trabalho forem iguais nos dois sistemas operacionais. Entende-se que um PC Linux já foi inserido no domínio e os usuários efetuam login em suas contas de domínio usando sssd como mecanismo de autenticação e autorização.

       # 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"/> 

      onde:

      • uid = "100000000-2000000000" - o intervalo de UID atribuído aos usuários do domínio do SSSD
      • server = "dfs" - nome do servidor de arquivos
      • path = "Profile_Users /% (USER)" - um recurso no servidor de arquivos com o perfil de usuário hospedado
      • mountpoint = "~" - caminho de montagem para a pasta inicial do usuário

      O login do usuário é passado para a variável de macro "% (USER)" usada por pam_mount para conectar nosso recurso de rede, na forma em que é inserido no gerenciador de exibição. Portanto, é importante que o logon do DM seja inserido sem uma indicação explícita do nome do domínio.

      No sssd.conf, isso é resolvido comentando ou configurando o valor False para a opção use_fully_qualified_names , que ativa o modo de nome completo (incluindo domínio) para usuários e grupos.
    2. O segundo método é menos direto e desajeitado e, na minha opinião, mais conveniente e preferido. A diferença da primeira apenas na configuração 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"/> 

      Ou seja, simplesmente montamos cada uma de nossas pastas separadamente no diretório correspondente

Conclusões

Durante mais de meio mês de trabalho em uma bancada de testes, esse pacote sobreviveu com êxito a vários desligamentos alternativos de longo e curto prazo de ambos os controladores, praticamente sem conseqüências para os clientes (uma vez que um cliente no Windows7 perdeu a confiança).

Em geral, tive uma impressão bastante agradável de trabalhar com este produto, apesar de todas as nuances que tive que enfrentar tanto no artigo quanto nos bastidores.

Existem armadilhas, existem muitas e, no decorrer do trabalho com o samba, elas terão que ser capturadas em grandes quantidades. No entanto, até o momento, não há outras soluções que permitam organizar um ambiente híbrido usando serviços de diretório e sem o Windows.

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


All Articles