Neste artigo iremos falar sobre uma importante funcionalidade do Samba 4, a possibilidade de trabalhar como controlador de Domínio Secundário. Este artigo será dividido em duas etapas, pois o intuito e demonstrar como realizar uma migração completa de um Controlador de Domínio Windows para Samba, desde sua integração, replicação até elevação para controlador de domínio principal.
CONSIDERAÇÕES
Este é um assunto relativamente avançado, estou levando em consideração que já domine o assunto “Controlador de Domínio” e que também tenha aptidão com sistema Linux. Para este artigo vamos utilizar o Debian 10 Buster. “Versão mais atual no momento da elaboração deste artigo”.
1) INFORMAÇÕES INICIAL
Assim como no artigo anterior “Controlador de Domínio Samba 4”, precisamos levantar algumas informações primordiais para o sucesso de nossa configuração.
1.1) Definição de Partições.
Precisamos definir como trabalhará nosso particionamento, estaremos realizando uma configuração do zero, portanto é importante definir as partições de maneira correta. Para este exemplo, nosso controlador de domínio secundário possuirá os seguintes particionamentos:
HD 100 GB
/boot 1GB
/ 20GB
/home 20GB
/var 30GB
/swap 4GB
/dados 25GB
1.2) Definição de IP.
Precisamos também definir o IP fixo que será utilizado pelo nosso controlador de domínio secundário. Para isso, acesse o arquivo de configuração de sua rede e informe o ip que deseja utilizar. Em nosso caso o arquivo é /etc/network/interfaces.
#Interface statica
allow-hotplug ens18
iface ens18 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
gateway 192.168.3.5
dns-nameservers 192.168.3.1
dns-nameservers 192.168.3.2
dns-search oliveira.com
1.3) Definição de nome do servidor.
Precisamos também definir o nome do servidor controlador de domínio secundário. Para isso acesse o arquivo /etc/hostname com seu editor de texto de estimação, e defina um nome para o servidor. Essa informação já deve estar com o nome que definiu no momento da instalação do Linux. No nosso exemplo o servidor se chamará srvdc1.
1.4) Definição de nome do domínio.
Precisamos também informar o nome de domínio que iremos integrar. No nosso exemplo o domínio se chama oliveira.com.
2) CONFIGURAÇÃO DO ARQUIVO HOST.
Vamos definir as informações do arquivo de configuração /etc/hosts. Este arquivo também é utilizado para pesquisa e resolução de nomes. Vamos definir neste arquivo o nome e IP do servidor que estamos instalando de forma que ele também seja conhecido pelo seu número de IP de rede local.
Importante: Precisamos definir aqui tanto o IP de nosso servidor Primário, ele somente será tirado desta configuração quando realizarmos o rebaixamento de controlador.
127.0.0.1 localhost
127.0.1.1 srvdc1.oliveira.com srvdc1
192.168.3.1 srvdc1.oliveira.com srvdc1
192.168.3.2 serverdc.oliveira.com serverdc
3) CONFIGURANDO ARQUIVO DE RESOLUÇÃO.
Vamos definir as informações do arquivo de configuração /etc/resolv.conf, informando quem é o servidor DNS atual. No nosso caso por enquanto, o servidor controlador de domínio primário é o servidor DNS atual.
domain oliveira.com
search oliveira.com
nameserver 192.168.3.2
nameserver 192.168.3.1
4) DEFININDO PERMISSÕES NO FSTAB.
Precisamos definir no ponto de montagem /home (Onde ficará as pastas dos usuários em nosso exemplo) as permissões acl, user_xattr. Para isso, vamos editar o arquivo /etc/fstab e adicionar as informações ao ponto de montagem conforme exemplo abaixo.
# /home was on /dev/sda3 during installation
UUID=xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx /home ext4 defaults,acl,user_xattr 0
Após inserida as informações, precisamos remontar o ponto de montagem para que as alterações entrem em vigor.
mount -o remount /home
5) INSTALANDO PACOTES.
Agora que já definimos as informações e configurações necessárias, vamos instalar nosso Samba e mais alguns pacotes necessários. Para isso, execute os comandos ilustrados abaixo.
apt-get install samba krb5-user winbind smbclient ldap-utils ldb-tools acl attr ntp
Assim que começar a realizar a instalação aparecerá uma tela solicitando a autenticação de kerberos, podemos realizar esta configuração de imediato, ou em um segundo momento através do arquivo /etc/krb5.conf. Vamos continuar a configuração e inserir as informações solicitadas em tela.
Insira também o nome do servidor que responderá ao Kerberos. Em nosso caso o próprio servidor que estamos realizando a instalação.
Também informe o nome do servidor administrativo que realizará a gerencia e troca de senhas para o kerberos. Em nosso caso também será o mesmo servidor.
Feito isso nossos pacotes já estarão instalados, agora precisamos realizar as configurações necessárias.
6) CONFIGURANDO KERBEROS.
Entre no arquivo de configuração /etc/krb5.conf e defina as informações de seu domínio. Em nosso exemplo estamos utilizando o domínio oliveira.com, conforme ilustrado abaixo.
[libdefaults]
default_realm = OLIVEIRA.COM
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
fcc-mit-ticketflags = true
dns_lookup_realm = false
dns_lookup_kdc = true
#[realms]
# OLIVEIRA.COM = {
# kdc = srvdc1.oliveira.com
# default_domain = oliveira.com
# admin_server = srvdc1.oliveira.com
# }
#[domain_realm]
# .oliveira.com = OLIVEIRA.COM
# oliveira.com = OLIVEIRA.COM
7) CONFIGURANDO TICKET
Depois de configurado o kerberos, precisamos testar a comunicação com o controlador de domínio. Para isto, utilizaremos o comando “kinit” seguido pelo parâmetro “Nome de usuário que esteja cadastrado no domínio“, conforma ilustrado abaixo.
kinit rafael
Será solicitado a senha de usuário, digite a senha e pressione “ENTER“.
Após realizar o comando e o mesmo não retornar nenhuma mensagem de erro, é possível verificar o “ticket kerberos” gerado através do comando “klist” conforme ilustrado abaixo.
klist
Mostrando como resultado:
Ticket cache: FILE:/tmp/krb5cc_10001_j3SWTA
Default principal: rafael@OLIVEIRA.COM
Valid starting Expires Service principal
12-08-2019 09:40:32 12-08-2019 19:40:32 krbtgt/OLIVEIRA.COM@OLIVEIRA.COM
renew until 13/08/2019 09:40:17
8) CONFIGURAÇÃO NTP.
Precisamos configurar o pacote NTP de nosso novo servidor. Para isso, adicione as informações ao final do arquivo de configuração /etc/ntp.conf, conforme ilustrado abaixo.
# Relogio Local
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# Configurações adicionais para o Samba 4
ntpsigndsocket /var/lib/samba/ntp_signd/
restrict default mssntp
disable monitor
Após inserir as informações reinicialize o serviço ntp.
systemctl restart ntp
Obs: Utilize o comando ntpq -p para verificar se o ntp está funcionando.
9) CONFIGURANDO NSSWITCH.
Precisamos informar ao nosso servidor que desejamos trabalhar com o “winbind”. Esta configuração é utilizada para clientes de autenticação e não vi utilidade na configuração de nosso servidor controlador de domínio. Porém, para que o winbind esteja funcional e configurado de forma correta, caso venha a rebaixar o servidor controlador de domínio, e interessante já deixar essa opção pré configurada. Para isso, edite as duas linhas no arquivo /etc/nsswitch.conf conforme ilustrado abaixo.
passwd: compat winbind
group: compat winbind
10) PROMOVENDO CONTROLADOR DE DOMÍNIO SECUNDÁRIO – (READ ONLY).
Agora iremos promover nosso servidor à controlador de domínio secundário. Para isso, precisamos renomear nosso arquivo de configuração original do samba. Isso é necessário pois ao provisionar o samba, um novo arquivo smb.conf será criado.
mv /etc/samba/smb.conf /etc/samba/smb.conf.bkp
Feito isso, vamos parar todos os serviços samba e winbind.
systemctl stop smbd nmbd winbind
Agora vamos provisionar nosso samba à controlador de domínio secundário através do comando ilustrado abaixo. Neste primeiro momento vamos subir nosso servidor como RODC (Read Only Domain Controler), isso irá nos permitir testar nosso controlador.
samba-tool domain join oliveira.com RODC -U administrador --realm=OLIVEIRA.COM
Após executar o comando, será solicitado a senha do usuário informado, lembre-se de utilizar um usuário com poderes administrativos no domínio, feito isso aguarde até o final da execução do comando.
11) DESABILITANDO SERVIÇOS DE INICIALIZAÇÃO.
Com nosso samba funcionando como controlador de domínio, não podemos mais utiliza-lo como standalone. Precisamos então desabilitar os serviços do samba e winbind da inicialização do sistema.
systemctl disable smbd.service nmbd.service winbind.service
12) HABILITANDO SERVIÇOS DE INICIALIZAÇÃO.
Agora precisamos habilitar o serviço samba-ad-dc.service para inicializar junto com o sistema de boot. Porém é preciso realizar o desmascaramento do arquivo utilizando o comando systemctl unmask.
Obs: Quando um arquivo está mascarado é impossível inicializa-lo. Maiores informações consulte o manual do comando systemctl, e pesquise por mask e unmask.
systemctl unmask samba-ad-dc.service
Agora vamos adicionar o serviço a inicialização do sistema.
systemctl enable samba-ad-dc.service
13) VERIFICAÇÃO DE INTEGRAÇÃO
Precisamos testar nossa integração, para isso acesse o “Usuários e Computadores do Active Directory” de seu servidor Windows e verifique se dentro da Unidade Organizacional “Domain Controllers“, possui uma nova conta de computador do nosso novo servidor.
Repare que na imagem mostra na coluna “Tipo de Controlador de Domínio” “Somente Leitura, GC”. Exatamente o que queríamos.
Para teste crie um novo usuário através do seu servidor Windows e verifique no servidor Linux se consegue visualizar o usuário criado. No exemplo do artigo irei criar um novo usuário chamado “joaoteste”.
samba-tool user list | grep joaoteste
ou
pdbedit - L | grep joaoteste
OBS: Caso não traga a informação do usuário criado, restart o seu serviço samba-ad-dc.service.
Vamos também realizar a criação de um novo usuário, porém a partir do nosso Linux, neste exemplo irei criar o usuário chamado “mariateste“.
samba-tool user add mariateste
Após executar o comando e digitado a senha para o novo usuário, repare que recebemos um erro. Este erro é esperado pois nosso servidor esta configurado como “Read Only Active Directory“, ou seja, está configurado como somente leitura, e não é possível criar nada a partir dele. O erro pode ser observador abaixo.
ERROR(ldb): Failed to add user 'mariateste': - Invalid LDB reply type 1
14) PROMOVENDO CONTROLADOR DE DOMÍNIO SECUNDÁRIO – (MEMBRO).
Agora que já homologamos nosso novo servidor como READ ONLY, vamos torna-lo um membro ativo do Active Directory. Para isso vamos parar o serviço do samba, e executar o novo comando de integração.
systemctl stop samba-ad-dc.service
samba-tool domain join oliveira.com DC -U administrador --realm=OLIVEIRA.COM
Após executar o comando é possível receber a seguinte mensagem de erro: “Not removing account SRVDC1$ which looks like a Samba DC account matching the password we already have. To override, remove secrets.ldb and secrets.tdb“
OBS: Este erro aconteceu porque já havíamos ingressado o servidor Linux ao domínio como RODC.
Como o próprio erro já diz, remova os dois arquivos e execute novamente o comando.
mv /var/lib/samba/private/secrets.ldb /var/lib/samba/private/secrets.ldb.old
mv /var/lib/samba/private/secrets.tdb /var/lib/samba/private/secrets.tdb.old
Agora acesse o servidor windows e verifique se o novo servidor deixou de ser RODC e se tornou DC (Membro) do domínio, como ilustrado abaixo.
15) AJUSTANDO DNS
Precisamos agora adicionar ao nosso DNS o novo servidor para resolução de nomes. Para isso vamos executar o comando como ilustrado abaixo.
OBS: Somente será necessário se não existir apontamento no DNS atual para o novo servidor. Verifique se o servidor ja existe na tabela de DNS antes de executar o comando.
samba-tool dns add 192.168.3.2 oliveira.com srvdc1 A 192.168.3.1 -U administrador
16) TESTES DE HOMOLOGAÇÃO.
Estamos chegando ao final de nossa integração, porém precisamos realizar mais alguns testes.
16.1) DNS
Através do comando abaixo podemos identificar quais são os domain controllers disponíveis na rede.
ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationid=*)' --cross-ncs
Também um outro teste que podemos fazer é pegar do resultado do comando acima o “ObjectGUID” do nosso controlador de domínio Linux, e realizar uma consulta DNS a partir desta numeração, como ilustrado abaixo.
host -t CNAME 4f19bc23-339b-4c4f-bd7c-d14f5e444307._msdcs.oliveira.com
Resultado:
f19bc23-339b-4c4f-bd7c-d14f5e444307._msdcs.oliveira.com is an alias for srvdc1.oliveira.com.
16.2) Replicação de Domínio.
Também precisamos verificar se nosso domínio esta replicando corretamente. Para isso execute os comandos ilustrado abaixo.
samba-tool drs kcc -U Administrador
samba-tool drs showrepl
Estes comandos trarão uma seria de informações para verificação.
16.3) Adicionando novo usuário.
Vamos novamente adicionar o usuário “mariateste” através de nosso servidor Linux, desta vez será possível criar o usuário sem nenhum erro.
samba-tool user create mariateste
Acesse novamente o Usuários e Computadores do Active Directory dentro de seu servidor Windows e constate o usuário criado.
17) DICAS FINAIS
- Antes de desligar seu servidor primário para realizar testes, lembre-se de informar ao seu servidor DHCP o endereço de seu DNS de consulta secundário.
- Ideal que seu servidor DHCP esteja, junto ao controlador de dominio, firewall ou router, evite deixar no swtich.
- Caso possua alguma máquina ou servidor linux no domínio, lembre-se de alterar os arquivos resolv.conf, hosts e krb5.conf apontando para o novo pdc.
CONCLUSÃO
Através deste artigo foi possível demonstrar a integração de um Servidor Linux utilizando Samba 4 com um servidor Windows rodando o Active Directory. No próximo artigo estaremos aprendendo como realizar a transferência de roles para o samba 4, além de despromover o servidor windows.
Se você gostou deste post e através dele pude lhe ajudar, o que acha de aproximarmos nosso contato? Siga meu blog e me adicione no Linkedin, aproveite para classificar algumas das minhas competências/recomendações, este simples gesto faz toda a diferença.
Att,
Rafael Oliveira
SysAdmin
28 respostas
Boa Tarde, excelente artigo, porem no meu esta dando um erro:
Failed to commit objects: WERR_DS_DRA_RECYCLED_TARGET
dai nao entra no dominio.
o que pode ser esse erro ?
Fala Ricardo! bom dia! Já tem um tempo que escrevi este artigo, tente realizar os passos novamente, tb não fiz testes em novas versões do Debian, mas creio que a ideia continua a mesma. att.
Boa Tarde
Excelente artigo, porem o meu quando tento adicionar no dominio como RODC (ja tentei como AD também) da a seguinte mensagem:
failed to commit objects: WERR_DS_DRA_RECYCLED_TARGET
saberiam me dizer o que pode estar errado ?