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
Autodidata, me aprofundei em sistemas operacionais baseados em UNIX®, principalmente Linux. Também procuro trazer assuntos correlacionados direta ou indiretamente, como automação, robótica e embarcados.