Provisionando Domínio em Linux

Nesta matéria explico como se faz o provisionamento de um domínio com o serviço Active Directory do SAMBA em Linux!


| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. 
Mais detalhes clicando aqui.


Esta é a terceira parte da sequência de artigos sobre o SAMBA como Active Directory aonde falo a respeito do provisionamento de um Domínio! Se perdeu a publicação anterior aonde explico o que é o Active Directory desenvolvido originalmente pela Microsoft, leia aqui!

1. Introdução

De maneira direta, o samba é o daemon de servidor que fornece compartilhamento de arquivos e impressão aos clientes. O servidor fornece serviços de diretório e espaço de arquivo para clientes – Active Directory – usando os protocolos SMB (ou CIFS) e outros protocolos relacionados, como DCE/RPC, LDAP e Kerberos.

Por padrão, quando o samba é instalado e configurado, você vai ter apenas os serviços SMBd e NMBd, que são o protocolo de compartilhamento de pastas e também o daemon que expõe nomes na rede. Porém o samba também traz nativamente o serviço samba-ad-dc.service que é mascarado e oculto por padrão. É ele quem vai tornar o SAMBA algo maior do que ele é, permitindo gerenciar redes de diretórios e se tornar uma imitação compatível com o Active Directory do Windows.

Inclusive o SAMBA é tão bom em ser o Active Directory® open source, que quando o vírus WannaCry se espalhou na internet anos atrás, infectando redes diversas através do protocolo SMB, o samba do Linux também possuía a mesma vulnerabilidade! Seu nome ficou carinhosamente conhecido como SambaCry.

Bem, e fica a dúvida: Como fazer tudo isso?
Vamos ao tutorial de hoje!

2. Atenção

Antes de prosseguir, tenha em mente que este tutorial requer algumas condições pra funcionar adequadamente.

  • Tenha conhecimento mediano em redes.
    Por mais que eu vá ensinar diversos passos aqui, o básico em redes, como o funcionamento e configuração de IP fixo, DHCP, DNS e etc é importante.
  • Utilize uma máquina virtual.
    Devido à natureza da configuração do SAMBA como controlador de domínio, tudo na máquina será afetado, principalmente o DNS. Recomendamos o QEMU KVM para isso, mas o VirtualBox e outras soluções também funcionarão bem. Apenas 1 núcleo de uns 2Ghz e 1 Gb de RAM são suficientes para o serviço funcionar a caráter de testes e estudos.
  • Utilize um IP fixo na LAN.
    O Controlador de Domínio só funciona bem com o IP fixado.
    Se o IP mudar, o Domínio vai parar de funcionar, incluindo seu DNS vinculado, até que o IP volte ao que era na configuração inicial. Nunca troque o IP do domínio depois que ele foi previamente definido!
  • Este tutorial considera a configuração de rede em IPv4.
    Não realizei testes e não sei como o Domínio vai se comportar em IPv6.
  • Nunca troque o hostname do servidor que será Active Directory depois que tudo funcionar.
    Tal qual o IP, o Domínio possui vínculo com o nome da máquina e vai parar enquanto o hostname não voltar ao que era na configuração inicial.
  • Este tutorial contempla uma configuração sobre Ubuntu Server 22.04 LTS.
    O que for explicado aqui pode ser replicado em outros sistemas Linux porém com as devidas adaptações de ferramentas e comandos utilizados. Além disso, use qualquer usuário aqui, inclusive administrador, porém NÃO USE o usuário inglês administrator, para evitar conflitos com o Domínio!
  • Qualquer erro visto durante o tutorial, opte por reinstalar o Sistema Operacional novamente!
    O SAMBA é amigável para ser instalado e configurado, mas se houverem erros de configuração do Kerberus que o façam deixar de funcionar, você pode corromper o banco de dados, fazendo o Domínio ficar inoperável. Nesse caso é preferível reinstalar tudo, porque não é tão simples remover os pacotes do samba devido à quantidade de arquivos de configuração que ele gera.
  • Atualize seu sistema antes de começar!
    sudo apt update && sudo apt upgrade

3. Preparando o Terreno

Antes de começar o tutorial, tenha o seguinte preparado:

  • Faça uma instalação limpa do Ubuntu Server 22.04 LTS.
    Os detalhes e ajustes podem ficar a seu critério.
  • Instale os seguintes pacotes:
sudo apt install samba smbclient winbind libpam-winbind libnss-winbind krb5-kdc -y
sudo apt install libpam-krb5 samba-dsdb-modules samba-vfs-modules -y

Durante a instalação, o Kerberus vai fazer uma pergunta sobre o domínio. Deixe em branco e aperte Ok.
Vamos usar parte do Kerberus para comunicar com o controlador de domínio, portanto não se surpreenda se perceber que o serviço do kerberus está parado!

  • Defina um HostName, qual será o Domínio e o IP fixado.
    Neste tutorial vamos utilizar o seguinte exemplo:

Hostname: virtual00
Domínio: ad.linuxuniverse.local
IP Fixado: 192.168.0.10

Evite usar .com no final do Domínio! Pois se for um site legítimo, este site deixará de ser encontrado, uma vez que o domínio será o verdadeiro apontamento do domínio definido.

Tecnicamente você pode usar qualquer nome de hostname e também qualquer combinação de domínio, por exemplo LEGAL.MEUSITE.NET ou ainda ACTIVE.DIRECTORY.COM. Eu particularmente prefiro o padrão ad.NOME.local, mais fácil de lembrar e evita qualquer risco de incompatibilidade não prevista.

Defina o hostname:

$ sudo hostnamectl set-hostname virtual00

Edite o arquivo /etc/hosts e adicione a seguinte linha ao final dele:

192.168.0.10 virtual00 virtual00.ad.linuxuniverse.local

Salve com CTRL + O e Enter
Feche com CTRL = X

Assim o sistema vai conseguir resolver o DNS “ad.linuxuniverse.local” para o IP 192.168.0.10

Faça backup dos arquivos de configuração do SAMBA e do Kerberus:

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo mv /etc/krb5.conf /etc/krb5.conf.orig

Reinicie o computador.

4. Domínio

Se tudo estiver Ok, podemos provisionar o Domínio, ou seja, torná-lo configurado!
O comando completo e em modo interativo é:

sudo samba-tool domain provision --use-rfc2307 --interactive

Ou seja, com o parâmetro –use-rfc2307 o banco de dados será compatível com Active Directory – o que permitirá que Windows e até mesmo outros Domínios  da Microsoft se vinculem a este; e –interactive para você definir as opções em tempo real.

Serão feitas algumas perguntas, preencha de acordo:

  • Realm []: ad.linuxuniverse.local
  • Domain [AD]: ad
  • Server Role (dc, member, standalone) [dc]: dc
  • DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: PRESSIONE_ENTER_APENAS
    Aqui você pode usar o BIND9 para fornecer DNS. Este tutorial vai considerar um DNS externo – um modem, do Google ou mesmo um PiHole em outro equipamento – e portanto vamos usar o SAMBA_INTERNAL.
  • DNS forwarder IP address (write ‘none’ to disable forwarding) [127.0.0.53]: 8.8.4.4
    Aqui você pode colocar o DNS que achar melhor, seja do próprio modem, um outro servidor local ou ainda do Google, Cloudflare, etc. Não deixe default 127.0.0.53, ou o servidor ficará sem internet!

Será pedido para criar a senha do ADMINISTRATOR.
Se usou o usuário ADMINISTRADOR para gerenciar o Linux, agora terá o ADMINISTRATOR para gerenciar o Domínio.
A senha precisa ser forte, com caracteres especiais, maiúsculas, minúsculas e números. Um exemplo de senha aceita:
@#server1340

Aguarde.
Se tudo correu bem, você verá algo semelhante a isso no final:

Server Role: active directory domain controller
Hostname: virtual00
NetBIOS Domain: AD
DNS Domain: ad.linuxuniverse.local
DOMAIN SID: S-1-5-21-2060062981-3252955935-809771608

O Domínio está provisionado!

Porém nem tudo são rosas e ainda há detalhes a serem feitos para que funcione adequadamente.

5. Ajustes do Domínio

Copie a nova configuração gerada para o Kerberus para a pasta da configuração anterior:

$ sudo cp /var/lib/samba/private/krb5.conf /etc

Agora, se tentar contactar o domínio de qualquer forma, verá que está em estado de erro. Muito por quê o Ubuntu possui um serviço via SystemD que captura a porta :53 e ela deve ser exclusiva do Domínio. Para isso, faça o seguinte:

$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo unlink /etc/resolv.conf

Edite o arquivo /etc/resolv.conf e adicione isto a ele:

nameserver 192.168.0.10
search ad.linuxuniverse.local

Salve e feche.

Agora, precisamos habilitar o serviço do Samba para agir como Domínio e bloquear os serviços padrão SMB e NMB para isso, ou você terá conflitos diversos e nada vai funcionar!

$ sudo systemctl mask smbd nmbd winbind
$ sudo systemctl disable smbd nmbd winbind
$ sudo systemctl stop smbd nmbd winbind
$ sudo systemctl unmask samba-ad-dc
$ sudo systemctl start samba-ad-dc
$ sudo systemctl enable samba-ad-dc

Após isso, reinicie o sistema.
Se tudo correu bem, ao inicializar, o Domínio estará funcional!
Para verificar se isso é verdade, tente logar como administrator usando o comando kinit:

$ kinit administrator

Após inserir a senha, você verá uma mensagem semelhante a:

Warning: Your password will expire in 41 days on Sat 10 Set 2022 04:12:28 PM UTC

E é isso!
Você tem um Domínio provisionado e funcionando com todo suporte já mencionado anteriormente, como uma imitação fiel do Windows Server 2008 R2 em funcionalidade e compatível com Windows 10 e 11.

  • Existe um serviço no Ubuntu Server chamado systemd-networkd-wait-online.service e outro chamado NetworkManager-wait-online.service. Não desative-os! Eles vão pausar todo o processo de boot do Ubuntu para pegar rede, depois iniciar o Domínio. Sem eles, por mais que amarrem o boot e façam o sistema demorar as vezes 3 minutos pra ligar, o Domínio pode ficar sem resposta, exigindo ser iniciado manualmente.

6. FAQ

Existem algumas questões que podem ser pertinentes abordar aqui a respeito de situações que podem ser presenciadas:

  • O Domínio requer conectividade com a rede LAN para funcionar.
    Não exigido internet, porém sem rede LAN ele simplesmente entrará em estado de erro. Conecte o cabeamento e atribua um IP novamente á máquina, daí reinicie o serviço para funcionar:
    $ sudo systemctl restart samba-ad-dc
  • O Domínio não inicia.
    Verifique os logs de eventos do samba em /var/log e também pelo journalctl. Algum erro de configuração acima ou uma etapa de configuração pulada podem causar isso, tornando o domínio inoperável e causando erro ao usar o comando kinit para verificar.
  • O Domínio funciona mas não tem internet.
    Erro de DNS é uma das situações mais absurdamente comuns que podem ocorrer num domínio. Verifique qual DNS  foi atribuído em /etc/samba/smb.conf e se o sistema do Domínio consegue resposta com PING nele.
    Também verifique os arquivos /etc/resolv.conf e /etc/hosts se estão devidamente configurados. Erros de configuração aqui também podem cortar a internet para o servidor.

7. Conclusão

Este foi o tutorial de como provisionar seu primeiro domínio!

No próximo capítulo dessa série iremos abordar como tirar proveito disso: Como ingressar um sistema Windows e também como ingressar um sistema Linux a um Domínio na rede; e como dar comandos específicos e criar algumas regras para esse domínio, gerenciando as máquinas que a ele estiverem conectadas!

Fontes:
Wiki Official Samba
Archive from RicoSharp

Deixe um comentário