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

Samba DC como segundo controlador no domínio AD Windows 2012R2 e pastas móveis para clientes em Windows e Linux
A consciência de que eu tinha entrado em um processo de substituição de importações não veio de imediato. Somente quando as novas remessas de PCs começaram a chegar de forma estável com o distribuidor "Alt Linux" a bordo, eu desconfiei que algo estava errado.

No entanto, durante o processo de aceitação do inevitável, eu acabei me envolvendo e até comecei a desfrutar um pouco do processo. Em determinado momento, pensei que, com esse ritmo, cedo ou tarde eu teria que me despedir das soluções de organização do serviço de diretórios da Microsoft e me mover em direção a algo mais exótico. Portanto, para me preparar para o inevitável e, sempre que possível, identificar os obstáculos, foi decidido estabelecer um ambiente de teste que incluísse:

  • DC1 — Windows Server 2012R2
  • DC2 — Alt Server 8.2
  • File Server — Windows Server 2012R2
  • PC1 — Windows 7
  • PC2 — Alt Workstation 8.2

Tarefas do ambiente:

  1. Estabelecer um domínio baseado em w2k12r2. Criar um conjunto mínimo de políticas de grupo (semelhante às usadas na infraestrutura de trabalho), incluindo a política de migração das pastas de trabalho dos usuários (Downloads/Documentos/Área de Trabalho). Ao final, o objetivo é que, ao trocar de ambiente de trabalho de Windows para Linux e vice-versa, o usuário tenha acesso confortável aos seus documentos de trabalho.
  2. Introduzir Samba DC como segundo controlador. Verificar a replicação do serviço de diretório e DNS.
  3. Configurar clientes Linux para trabalhar com pastas móveis.

Implementação:

  1. Instalação e introdução do novo controlador.Com a instalação do MS Windows 2012R2, tudo é simples e mais ou menos claro. Na internet, existem 1001 manuais para estabelecer um domínio no Windows, tanto por meio do GUI quanto utilizando ferramentas do Powershell, portanto, não vou repetir desnecessariamente, deixarei apenas o link na documentação oficial, para os curiosos e aqueles que queiram refrescar a memória.

    No entanto, há um ponto importante neste item. Atualmente, o Samba não consegue trabalhar com esquemas de diretório superiores a 2008R2.

    Título do spoiler Na verdade, os desenvolvedores declararam esse suporte como experimental. Mas, na prática, a tentativa de inserir o Samba como segundo DC em um domínio Windows existente com o esquema 69 encontrará o seguinte erro

    DsAddEntry falhou com o status WERR_ACCESS_DENIED info (8567, ‘WERR_DS_INCOMPATIBLE_VERSION’)

    O problema é que o Windows 2012 e 2012R2 usam ferramentas WMI para trabalhar com domínios e florestas, cujo suporte estável foi anunciado apenas para a versão Samba 4.11, que deve ser lançada até o final deste ano.
    Portanto, a única opção para integrar a Samba ao domínio AD implantado em um servidor 2012R2 é rebaixar o esquema de 69 para 47. Naturalmente, em uma infraestrutura de produção, isso não deve ser feito sem boas razões, mas como temos um ambiente de teste, por que não?

    Instalamos o Alt Server 8.2. Durante a instalação, escolhemos o perfil "Servidor Samba-DC (controlador AD)". No servidor implantado, realizamos uma atualização completa do sistema e instalamos o pacote task-samba-dc, que trará tudo o que é necessário.

    # apt-get install task-samba-dc

    Caso o task-samba-dc, contrariamente às alegações da documentação da Alta, se recuse a instalar tudo o que é 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, passamos para a configuração do Kerberos e obtenção do ticket. Abrimos o arquivo krb5.conf, vamos à seção [libdefaults] e o modificamos para o seguinte formato:

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

    Solicitamos um ticket

    # kinit administrator
    Password for administrator@TEST.LOCAL:

    Verificamos a lista de tickets Kerberos obtidos

    # 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 removemos ou renomeamos a configuração existente da Samba.

    # mv smb.conf smb.conf.bak1

    E, finalmente, fazemos a entrada no domínio AD como um segundo controlador:

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

    A entrada bem-sucedida será acompanhada pelo seguinte log

    Encontrando um DC gravável para o domínio 'test.local'
    DC encontrado DC1.TEST.LOCAL
    Senha para [TESTadministrator]:
    Reconectando ao mestre de nomenclatura e31d7da6-8f56-4420-8473-80f2b3a31338._msdcs.TEST.LOCAL
    O nome DNS do novo mestre de nomenclatura é DC1.TEST.LOCAL
    O grupo de trabalho é TEST
    O reino é TEST.LOCAL
    Adicionando CN=DC2,OU=Controladores de Domínio,DC=TEST,DC=LOCAL
    Adicionando CN=DC2,CN=Servidores,CN=Nome-Primeiro-Site-Padrão,CN=Sites,CN=Configuração,DC=TEST,DC=LOCAL
    Adicionando CN=Configurações NTDS,CN=DC2,CN=Servidores,CN=Nome-Primeiro-Site-Padrão,CN=Sites,CN=Configuração,DC=TEST,DC=LOCAL
    Adicionando SPNs a CN=DC2,OU=Controladores de Domínio,DC=TEST,DC=LOCAL
    Definindo a senha da conta para DC2$
    Ativando a conta
    Chamando provisionamento básico
    Buscando endereços IPv4
    Buscando endereços IPv6
    Nenhum endereço IPv6 será atribuído
    Configurando share.ldb
    Configurando secrets.ldb
    Configurando o registro
    Configurando o banco de dados de privilégios
    Configurando banco de dados de idmap
    Configurando banco de dados SAM
    Configurando partições e configurações do sam.ldb
    Configurando o rootDSE do sam.ldb
    Carregando o esquema Samba 4 e AD
    Uma configuração Kerberos adequada para Samba AD foi gerada em /var/lib/samba/private/krb5.conf
    Provisionamento OK para o DN do domínio DC=TEST,DC=LOCAL
    Iniciando replicação
    Schema-DN[CN=Esquema,CN=Configuração,DC=TEST,DC=LOCAL] objetos[402/1426] valores_vinculados[0/0]
    Schema-DN[CN=Esquema,CN=Configuração,DC=TEST,DC=LOCAL] objetos[804/1426] valores_vinculados[0/0]
    Schema-DN[CN=Esquema,CN=Configuração,DC=TEST,DC=LOCAL] objetos[1206/1426] valores_vinculados[0/0]
    Schema-DN[CN=Esquema,CN=Configuração,DC=TEST,DC=LOCAL] objetos[1608/1426] valores_vinculados[0/0]
    Schema-DN[CN=Esquema,CN=Configuração,DC=TEST,DC=LOCAL] objetos[1743/1426] valores_vinculados[0/0]
    Analisando e aplicando objetos de esquema
    Partição[CN=Configuração,DC=TEST,DC=LOCAL] objetos[402/2240] valores_vinculados[0/24]
    Partição[CN=Configuração,DC=TEST,DC=LOCAL] objetos[804/2240] valores_vinculados[0/24]
    Partição[CN=Configuração,DC=TEST,DC=LOCAL] objetos[1206/2240] valores_vinculados[0/24]
    Partição[CN=Configuração,DC=TEST,DC=LOCAL] objetos[1608/2240] valores_vinculados[0/24]
    Partição[CN=Configuração,DC=TEST,DC=LOCAL] objetos[1772/2240] valores_vinculados[24/24]
    Replicando objetos críticos do DN base do domínio
    Partição[DC=TEST,DC=LOCAL] objetos[109/110] valores_vinculados[26/29]
    Partição[DC=TEST,DC=LOCAL] objetos[394/5008] valores_vinculados[29/29]
    Concluído com NC sempre replicado (base, configuração, esquema)
    Replicando DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partição[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objetos[42/42] valores_vinculados[0/0]
    Replicando DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partição[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objetos[20/20] valores_vinculados[0/0]
    Exop em[CN=Gerente RID$,CN=System,DC=TEST,DC=LOCAL] objetos[3] valores_vinculados[0]
    Confirmando banco de dados SAM
    Adicionando 1 registro DNS remoto para DC2.TEST.LOCAL
    Adicionando registro DNS A DC2.TEST.LOCAL para IPv4 IP: 192.168.90.201
    Adicionando registro DNS CNAME 6ff1df40-cbb5-41f0-b7b3-53a27dde8edf._msdcs.TEST.LOCAL para DC2.TEST.LOCAL
    Todos os outros registros DNS (como registros SRV _ldap) serão criados samba_dnsupdate na primeira inicialização
    Replicando novos registros DNS em DC=DomainDnsZones,DC=TEST,DC=LOCAL
    Partição[DC=DomainDnsZones,DC=TEST,DC=LOCAL] objetos[1/42] valores_vinculados[0/0]
    Replicando novos registros DNS em DC=ForestDnsZones,DC=TEST,DC=LOCAL
    Partição[DC=ForestDnsZones,DC=TEST,DC=LOCAL] objetos[1/20] valores_vinculados[0/0]
    Enviando DsReplicaUpdateRefs para todas as partes replicadas
    Definindo isSynchronized e dsServiceName
    Configurando o banco de dados de segredos
    Entrou no domínio TEST (SID S-1-5-21-3959064270-1572045903-2556826204) como um DC

    No console ADUC deve aparecer uma entrada para o novo DC no domínio TEST.LOCAL, e no gerenciador DNS — um novo registro A correspondente ao DC2.

  2. Replicação entre controladoresPara começar, vamos verificar o funcionamento do serviço de replicação de diretórios (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.

    Nome do Site Padrão-Primeiro-DC2
    	Opções DSA: 0x00000001
    	GUID do objeto DSA: 0e9f5bce-ff59-401e-bdbd-fc69df3fc6bf
    	ID de invocação DSA: 017997b5-d718-41d7-a3f3-e57ab5151b5c
    
    	==== VIZINHOS DE ENTRADA ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:56:31 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:56:31 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:56:32 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:56:32 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:56:32 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:56:32 2019 MSK
    
    	DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:56:32 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:56:32 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:56:33 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:56:33 2019 MSK
    
    	==== VIZINHOS DE SAÍDA ====
    
    	DC=ForestDnsZones,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em qui, 23 de maio 16:40:03 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em qui, 23 de maio 16:40:03 2019 MSK
    
    	DC=DomainDnsZones,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em qui, 23 de maio 16:40:03 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em qui, 23 de maio 16:40:03 2019 MSK
    
    	CN=Schema,CN=Configuration,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em qui, 23 de maio 16:40:08 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em qui, 23 de maio 16:40:08 2019 MSK
    
    	DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em qui, 23 de maio 16:40:08 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em qui, 23 de maio 16:40:08 2019 MSK
    
    	CN=Configuration,DC=test,DC=local
    	        Nome do Site Padrão-Primeiro-DC1 via RPC
    	                GUID do objeto DSA: 60fb339d-efa3-4585-a42d-04974e6601b7
    	                Última tentativa em seg, 27 de maio 12:12:17 2019 MSK foi bem-sucedida
    	                0 falha(s) consecutiva(s).
    	                Último sucesso em seg, 27 de maio 12:12:17 2019 MSK
    
    	==== OBJETOS DE CONEXÃO KCC ====
    
    	Conexão --
    	        Nome da conexão: 6d2652b3-e723-4af7-a19f-1ee48915753c
    	        Habilitado        : VERDADEIRO
    	        Nome DNS do servidor : DC1.test.local
    	        Nome DN do servidor  : CN=NTDS Settings,CN=DC1,CN=Servers,CN=Nome do Site Padrão-Primeiro,CN=Sites,CN=Configuration,DC=test,DC=local
    	                Tipo de transporte: RPC
    	                opções: 0x00000001
    	Aviso: Sem NC replicado para a Conexão!

    Aviso «Sem NC replicado para a Conexão!» pode ser ignorado sem problemas. Ele aparece porque, ao registrar um novo DC Samba, algumas flags de replicação são configuradas incorretamente.

    Seria bom também verificar a replicação do LDAP.

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

    O comando mencionado acima irá comparar os valores dos atributos dos objetos em todo o diretório no DC1 e DC2.

    Exemplo de replicação bem-sucedida

    * Comparando o contexto [DOMAIN]...
    
    	* Objetos a serem comparados: 249
    
    	* Resultado para [DOMAIN]: SUCESSO
    
    	* Comparando o contexto [CONFIGURATION]...
    
    	* Objetos a serem comparados: 1750
    
    	* Resultado para [CONFIGURATION]: SUCESSO
    
    	* Comparando o contexto [SCHEMA]...
    
    	* Objetos a serem comparados: 1739
    
    	* Resultado para [SCHEMA]: SUCESSO
    
    	* Comparando o contexto [DNSDOMAIN]...
    
    	* Objetos a serem comparados: 42
    
    	* Resultado para [DNSDOMAIN]: SUCESSO
    
    	* Comparando o contexto [DNSFOREST]...
    
    	* Objetos a serem comparados: 20
    
    	* Resultado para [DNSFOREST]: SUCESSO

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

    A próxima etapa é configurar manualmente a replicação estável do diretório SysVol.
    A questão é que o Samba ainda não suporta DFS-R, assim como não suportava o FRS anterior. Portanto, a única solução viável até hoje para a replicação entre DC Samba e Windows é a replicação unidirecional usando a ferramenta Robocopy do kit Windows Server 2003 Resource Kit Tools.

    Os desenvolvedores do Samba, para evitar problemas de compatibilidade, recomendam primeiro instalar o pacote de utilitários em uma estação de trabalho comum e, em seguida, copiar o Robocopy para o controlador na pasta "C:Program Files (x86)Windows Resource KitsTools"

    Após a instalação, no Agendador de Tarefas no controlador com Windows, criamos uma tarefa para executar a 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, informamos o caminho para o utilitário robocopy, e como argumentos indicamos:

    DC1SYSVOLtest.local DC2SYSVOLtest.local /mir /sec

    No caso específico, copiamos o conteúdo do diretório SysVol de DC1 para DC2.

  3. Pastas móveis de usuários usando a configuração pam_mountExperiencialmente, encontrei duas opções viáveis para resolver essa tarefa com isso.
    1. Montagem completa da pasta de perfil da rede na seção /home. Uma opção simples. Funciona bem se os nomes das pastas Documentos, Downloads e Área de Trabalho corresponderem em ambos os sistemas operacionais. Presume-se que o PC com Linux já esteja inserido no domínio e que os usuários façam login com suas contas de domínio, utilizando o 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» — intervalo de UID atribuído a usuários de domínio pelo SSSD
      • server=«dfs» — nome do servidor de arquivos
      • path=«Profile_Users/%(USER)» — recurso no servidor de arquivos onde o perfil do usuário está localizado
      • mountpoint=»~» — caminho de montagem na pasta inicial do usuário

      O login do usuário é passado para a macro «%(USER)», utilizada pelo pam_mount para conectar nosso recurso de rede, na forma em que foi inserido no gerenciador de exibição. Portanto, é importante que no DM o login seja inserido sem especificar explicitamente o nome do domínio.

      Em sssd.conf, isso é resolvido comentando ou definindo o valor False na opção use_fully_qualified_names, que ativa o modo de nomes completos (incluindo domínio) para usuários e grupos.

    2. O segundo método é menos direto e mais rudimentar, e, na minha opinião, é mais conveniente e preferível. A única diferença em relação ao primeiro é a configuração do pam_mount.
      # vim /etc/security/pam_mount.conf.xml

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

Como resultado, obtemos um serviço de "monitoramento como serviço", automatizado na linha de produção de integração contínua. O desenvolvedor ou testador precisa apenas definir a lista de métricas em um arquivo JSON, e tudo o mais acontece automaticamente. Obtemos um controle de qualidade transparente dos lançamentos: todas as notificações sobre desempenho, consumo de recursos ou regressões arquitetônicas.

Em meio mês de trabalho na bancada de testes, esta configuração sobreviveu a várias quedas longas e curtas de ambos os controladores, praticamente sem consequências para os clientes (uma vez, um cliente no Windows7 perdeu a confiança).

No geral, fiquei com impressões bastante agradáveis ao trabalhar com este produto, apesar de todos os detalhes que enfrentei tanto no artigo quanto "nos bastidores".

Existem muitos obstáculos a serem superados durante o trabalho com Samba, e você terá que lidar com uma grande quantidade deles. No entanto, atualmente não existem outras soluções que permitam organizar um ambiente híbrido, utilizando um serviço de diretórios sem depender do Windows.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster