Colocando Linux no Domínio – Debian

linuxEste Artigo tem como objetivo realizar o ingresso de uma máquina Linux em um domínio. Diferente do Windows, o Linux requer uma atenção especial quanto trata-se de integração em um ambiente corporativo. Isso porque ele exige alguns fatores que devem ser levados em consideração na hora de integrá-lo. Aqui tentaremos abordar todos os aspectos necessários para realizarmos este procedimento de forma profissional, trazendo ao final do artigo uma integração correta.

Para que este procedimento seja possível, iremos utilizar três serviços essenciais, os quais são:

Kerberos: É um protocolo de rede usado para autenticação de usuários e/ou serviços de rede, como o Active Directory. utilizando um sistema criptografado, permitindo comunicações seguras e identificadas em redes, fazendo uso de tickets (chaves criptografadas).

Winbind: O Winbind é um daemon usado pelo PAM, NSSWITCH, Samba e podendo ser usado por outros serviços de rede e/ou sistema, fazendo a interface entre o PDC e o computador cliente rodando o serviço Winbindd, permitindo que máquinas com o sistema GNU/Linux comuniquem-se com DC Active Directory.

Samba: É um serviço cuja principal função é disponibilizar recursos compartilhados em uma rede, tais como arquivos e impressoras, além de também ser utilizado como controlador de domínio.


CONSIDERAÇÕES

Vamos levar em consideração que você já possui um ambiente com um servidor de domínio Windows Server / Samba com o Active Directory, DNS e DHCP instalados e funcionando. Neste exemplo estaremos utilizando o Debian 9.3.

Veja a disposição dos servidores na rede para explicação do artigo:

Domínio → oliveira.com
Servidor controlador de domínio → 192.168.2.1 serverdc.oliveira.com
Servidor DHCP → 192.168.2.1
Servidor DNS primário → 192.168.2.1
Desktop cliente → cltvirtual (Distribuição: Debian 9.3 Stretsh)

Nota: Para editar os arquivos de configuração você pode escolher qual editor padrão deseja usar. Neste artigo iremos utilizar o editor “vi” como padrão.


1) EDIÇÃO DO ARQUIVO /etc/hosts.

Em nossa máquina “cltvirtual” que pretendemos colocar no domínio, entre no arquivo /etc/hosts e adicione o complemento do domínio junto ao host da máquina cliente.

Opcional: Também adicione o endereço de ip do servidor controlador de domínio, este procedimento ajuda na resolução de nomes, pois já estamos setando diretamente quem será o controlador.

127.0.0.1 cltvirtual.oliveira.com cltvirtual localhost
192.168.2.1 serverdc.oliveira.com

Após realizarmos a alteração, execute o seguinte comando com parâmetro: “hostname -f“.  O resultado do comando irá mostrar o nome da máquina completo, junto com o domínio informado.


2) INSTALAÇÃO DE PACOTES NECESSÁRIOS.

apt-get install krb5-user krb5-config winbind samba samba-common smbclient cifs-utils libpam-krb5 libpam-winbind libnss-winbind ntp

Durante a instalação do “kerberos“, pode ser perguntado algo relacionado ao KDC, mas ignore e pressione ENTER. Trataremos deste assunto no decorrer do artigo.


3) SINCRONIZANDO DATA/HORA COM O CONTROLADOR DE DOMÍNIO.

Para que possamos ser autenticados pelo controlador de domínio é de primordial importância que estejamos sincronizados com a data e a hora do mesmo. No Linux é possível realizar este procedimento de forma automática, configurando um serviço de “NTP“.

Acesse o arquivo de configuração “/etc/ntp.conf” e nas linhas do arquivo onde o conteúdo começa com a palavra “pool“, comente estas linhas com uma cerquilha#“, e adicione o conteúdo conforme ilustrado abaixo, salve e saia do arquivo.

# pool 0.debian.pool.ntp.org iburst
# pool 1.debian.pool.ntp.org iburst
# pool 2.debian.pool.ntp.org iburst
# pool 3.debian.pool.ntp.org iburst
#Controlador de Dominio
server 192.168.2.1
restrict 192.168.2.1

Realizar o restart do serviço “NTP“. Como estamos utilizando Debian 8, o mesmo já possui um novo sysinit chamado “systemD“, para que possamos restartar um serviço devemos utilizar o seguinte comando:

(Restarta o serviço)

systemctl restart ntp.service 

ou (Para e inicia o serviço)

systemctl stop ntp.service
systemctl start ntp.service

(Verifica status do serviço)

systemctl status ntp.service

Caso esteja utilizando versões anteriores do Debian, ou uma outra distribuição que esteja baseada em outro sysinit como por exemplo o “systemV” antecessor do “systemD“, utilize o seguinte comando:

(Reinicia o serviço)

/etc/init.d/ntp restart

ou (Para e inicia o serviço)

/etc/init.d/ntp stop
/etc/init.d/ntp start

Nota: Para sistemas que possuem outros sysinit’s como o Ubuntu que possue o “upstart“, consulte a página da distribuição para maiores esclarecimentos.


4) EDIÇÃO DO ARQUIVO “/etc/resolv.conf”.

No ambiente apresentado estamos considerando que a máquina cliente “cltvirtual” esta recebendo IP através de um serviço DHCP startado no servidor controlador de domínio “serverdc“. Caso não esteja utilizando o serviço DHCP, é possível setar os servidores de nomes “DNS” no arquivo “/etc/resolv.conf” conforme ilustrado abaixo.

# Generated by NetworkManager
search oliveira.com
nameserver 192.168.2.1

5) CONFIGURAÇÃO KERBEROS.

Para que o usuário consiga autenticar-se no controlador de domínio iremos utilizar um protocolo de autenticação de redes chamado kerberos. O controlador de domínio com o serviço de Active Directory instalado já possui por default um KDC (Controlador de domínio Kerberos) apto para autenticar este tipo de protocolo. Iremos então editar o arquivo “/etc/krb5.conf” e realizar as configurações conforme ilustrado abaixo. Salve e saia do arquivo.

[logging]
Default = FILE:/var/log/krb5.log

[libdefaults]
ticket_lifetime = 24000
clock-skew = 300
default_realm = OLIVEIRA.COM
dns_lookup_realm = true
dns_lookup_kdc = true

[realms]
OLIVEIRA.COM = {
kdc = serverdc.oliveira.com
default_domain = oliveira.com
admin_server = serverdc.oliveira.com
}

[domain_realm]
.oliveira.com = OLIVEIRA.COM
oliveira.com = OLIVEIRA.COM

[login]
krb4_convert = true
krb4_get_tickets = false

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
31-01-2017 18:15:56 01-02-2017 00:55:49 krbtgt/OLIVEIRA.COM@OLIVEIRA.COM

6) CONFIGURANDO O SAMBA.

Também antes de ingressarmos a máquina cliente “cltvirtual” no domínio é necessário realizar algumas configurações preliminares no Samba. Neste artigo já estamos utilizando o Samba 4, alguns parâmetros estão sendo disponibilizados, mesmo que não sejam necessários para o artigo em questão. Estes padrões são úteis caso deseje compartilhar informações de sua máquina cliente, ou transforma-la em um servidor de arquivos. Faça uma copia de segurança do arquivo “/etc/samba/smb.conf” de sua máquina e crie um novo arquivo conforme conteúdo ilustrado abaixo.

[global]
workgroup = OLIVEIRA
server string = Maquina Cliente
netbios name = CLTVIRTUAL
realm = OLIVEIRA.COM
#veto files = /*.exe/*.bat/*.inf/*.pif/

#==================== Log do Samba =======================.
log file = /var/log/samba/samba.log
os level = 2
preferred master = no
max log size = 50
debug level = 1

#==================== Autenticação =======================.
security = ads
encrypt passwords = yes
# password server = 192.168.2.1
allow trusted domains = yes

#================ Configuração WINBIND ===================.
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind refresh tickets = yes
template shell = /bin/bash
template homedir = /home/%D/%U
client use spnego = yes
domain master = no

#================ Configuração LINKSIMBOLICO =============. 
unix extensions = no
wide links = yes

Após configurado o arquivo “smb.conf“, reinicie o serviço do Samba e do Winbind.

OBS: Iremos utilizar o padrão “systemD” conforme ilustrado no item 3 deste artigo.

(Restarta o serviço)

systemctl restart winbind.service
systemctl restart smbd.service

ou (Para e inicia o serviço)

systemctl stop winbind.service
systemctl start winbind.service
systemctl stop smbd.service
systemctl start smbd.service

(Verifica status do serviço)

systemctl status winbind.service
systemctl status smbd.service

7) CORRIGINDO ERRO WINBIND.

Diferentemente do Debian 8 – Jessie, no Debian 9 – Stretsh, vamos precisar realizar um procedimento diferenciado, você deve ter reparado que ao reiniciar os serviços, o Winbind não iniciou. Para corrigir o problema precisamos realizar uma pequena alteração em nosso /etc/samba/smb.conf.

Acesse novamente o arquivo smb.conf e altere a seguinte linha conforme ilustrado abaixo.

security = ads

Para

security = user

Salve, saia do arquivo e reinicie os serviços Samba e Winbind.

systemctl restart winbind.service
systemctl restart smbd.service

Repare que agora os dois serviços foram iniciados com sucesso. Feito isso, volte nas configurações do arquivo smb.conf e retorne a configuração conforme ilustrado abaixo.

security = user

Para

security = ads

Salve e sai do arquivo, porém desta vez, reinicie somente o Samba conforme ilustrado abaixo.

systemctl restart smbd.service 

Feito isso já podemos passar para o próximo passo e ingressar nossa máquina cliente no domínio.


8) INGRESSANDO A MÁQUINA CLIENTE NO DOMÍNIO.

Agora que nossas configurações estão corretas, podemos ingressar a máquina no domínio conforme comando ilustrado abaixo.

net ads join -U administrador

Nota: A conta passada para este comando precisa ter poderes de ingressar máquinas no domínio. Em nosso exemplo, foi utilizado a conta “administrador” do domínio.

Após executar o arquivo será retornado uma informação parecida com a ilustrada abaixo.

Using short domain name - OLIVEIRA
Joined 'CLTVIRTUAL' to realm 'OLIVEIRA.COM'

Agora vamos testar se o controlador de domínio está respondendo. Utilizando os seguintes comandos:

net ads testjoin

Se tudo correr bem o sistema responderá:

Join is OK

Também vamos testar utilizando o seguinte comando:

wbinfo -t

Se tudo correr bem o sistema responderá:

checking the trust secret for domain OLIVEIRA via RPC calls succeeded

Feito isto, precisamos testar e verificar se já conseguimos buscar os grupos e usuários do controlador de domínio conforme o seguinte comando a seguir:

(Lista de usuários do domínio)

wbinfo -u

(Lista de grupos do domínio)

wbinfo -g

Nota: Caso não seja possível trazer alguma das duas listas informadas, reinicie o “winbind” novamente. Se mesmo assim não conseguir executar os comandos com sucesso, volte o artigo e analise os passos anteriores refazendo a configuração, provavelmente algo passou despercebido.

Também é possível utilizar outros dois comandos para realizar a verificação, mas a diferença é que trazem a informação dos usuários e grupos locais, seguidos dos usuários e grupos do domínio.

(Lista usuários Local/Domínio)

getent passwd

(Lista grupos Local/Domínio)

getent group

Caso queira retirar a máquina do domínio utilize o seguinte comando:

net ads leave -U administrador

Nota: Após a integração da máquina cliente ao domínio, os serviços Samba e Winbind poderão ser reiniciados sem nenhum problema.


9) EDIÇÃO DO ARQUIVO “/etc/nsswitch.conf”.

Como agora estamos trabalhando com usuários e grupos do domínio, precisamos informar ao sistema que desejamos trabalhar com o “winbind” para procurar nossas informações de login. Para isso, é necessário editar duas linhas no arquivo “/etc/nsswitch.conf“, conforme ilustrado abaixo.

7 passwd:         compat winbind
8 group:          compat winbind

Após editar o arquivo, realize o restart do serviço “Winbind” e “Samba” conforme demonstrado no item “6” deste artigo.

Seu sistema já esta no domínio e apto para uso.


10) DETALHES DEBIAN.

Para as distribuições Debian é necessário realizar uma alteração no arquivo “/etc/pam.d/common-session“. Esta alteração faz o diretório home de cada usuário ser criado automaticamente no inicio de cada sessão após a autenticação do usuário, setando as permissões para os arquivos e diretórios com a “umask 0022” e obtendo do diretório “/etc/skel” seus sub-diretórios e arquivos padrões.

Após o linha que contém:

session required pam_unix.so

Inclua:

session required pam_mkhomedir.so umask=0022 skel=/etc/skel

CONCLUSÃO

Neste artigo foi demostrado como colocar uma máquina baseada na distribuição Debian 9 – Stretch no domínio de forma correta.

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

Você pode compartilhar esse artigo.

Siga o Blog Via E-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 46 outros assinantes

Sobre o Autor

Rafael Oliveira Maria - Linux

Rafael Oliveira

Bacharel em Sistemas de Informação, SysAdmin, Professor, Blogueiro e Entusiasta Linux.

Certificados:

LPIC-1-Large
LPIC-2
LinuxPlus Logo Certified
itil-foundation-digital-badge

Gostou do conteúdo? Ajude-me a manter o blog.

PicPay - Linux

Aceitamos pagamentos e doações via PicPay link picpay.me/rafaeloliveimar

35 respostas

  1. Alguém pode me ajudar nesse problema? quando vou replicar o DC para o ADDC
    root@srvdc01:/home/suporte# samba-tool drs replicate srvdc01.domain.net domain.com CN=Schema,CN=Configuration,DC=my,DC=domain,DC=name
    Failed to connect host 127.0.0.1 on port 135 – NT_STATUS_CONNECTION_REFUSED
    Failed to connect host 127.0.0.1 (srvdc01.domain.com) on port 135 – NT_STATUS_CONNECTION_REFUSED.
    Failed to connect host 192.168.x.xx on port 135 – NT_STATUS_CONNECTION_REFUSED
    Failed to connect host 192.168.x.xx (srvdc01.domain.com) on port 135 – NT_STATUS_CONNECTION_REFUSED.
    ERROR(): DRS connection to srvdc01.domain.com failed – drsException: DRS connection to srvdc01.domain.com failed: (3221226038, ‘The transport-connection attempt was refused by the remote system.’)
    File “/usr/lib/python2.7/dist-packages/samba/netcmd/drs.py”, line 47, in drsuapi_connect
    (ctx.drsuapi, ctx.drsuapi_handle, ctx.bind_supported_extensions) = drs_utils.drsuapi_connect(ctx.server, ctx.lp, ctx.creds)
    File “/usr/lib/python2.7/dist-packages/samba/drs_utils.py”, line 59, in drsuapi_connect
    raise drsException(“DRS connection to %s failed: %s” % (server, e))

  2. Olá Rafael,
    Cara, preciso de um Help. Estou configurando um Debian 10, para usar no trabalho. Segui o processo, fiz os testes e retorna ok. kinit ok; klist ok; testjoin ok; wbinfo -t -u -g… Tudo ok.

    Porém, quando vou logar com usuário da rede, ele informa que a senha esta incorreta. Tem algum outro processo que preciso fazer, ou tem ideia do que pode estar ocorrendo?

    Revisei todos os passos, varias vezes kk

    E Obrigado pelo artigo, tudo muito bem detalhado. Parabéns!

    1. Fala Leo, cara nunca vi esse erro que está falando, no primeiro momento até pensei que não estava conseguindo pingar o AD, mas pelo jeito não é isso. Para tirar a dúvida loga com o usuário administrador do domínio. Também verifique se não tem nenhuma trava no usuário que está querendo logar derrepente ele está com permissão para logar em somente algumas máquinas. O que costuma tb dar problema e não configurar direito o Kerberos, mas pelo que me disso está tudo certo. Fora isso não tem nada de novo, os passos descritos no artigo são os necessários. Queria ti dar uma resposta diferente disso mas, tô achando que terá que dar mais uma revisada. rs

  3. Olá Rafael.. Tudo bem contigo ??

    Meu amigo. consegue me ajudar ??? já estou a semanas procurando e gostaria de umas orientações sua.

    Tenho um servidor debian 9 com meu Squid e um samba compilado e outra maquina windows com RSAT instalado para gerenciar o samba.

    Para que o Squid valide os usuários no AD, tenho que ter o servidor debian ingressado no dominio certo ?

    Com base no seu passo a passo fiz certinho porém dá o erro abaixo :

    Failed to join domain: failed to find DC for domain GRUPOFMO – {Operation Falied} The Requested operation was unsuccessful.

    Consegue me orientar porque dá esse erro?? Como eu tenho um samba compilado e instalado na pasta raiz /opt/samba e ele já tem o winbind dentro dele mas acho que a comunicação não está ocorrendo.

    Será que você consegue me ajudar ??? Ja tó mais de semanas quebrando a cabeça e não consigo resolver. Estou começando faz pouco tempo com linux e nenhum dicas das que tentei não dá certo. combino até contigo para você acessar meu pc remoto e me passar mais orientações e te pago se quiser…

    Me ajuda ???

    Desde já agradeço.

    1. Fala Daniel blz! Desculpa a demora em lhe responder, correria demais, e agora para complicar a nosso vida essa pandemia, mas vamos lá. Com relação ao seu problema deixa eu lhe dar uma sugestão, porque não utiliza o samba do repositório, ao invés de um compilado, se não tem muita experiência com Linux vai facilitar d+ a sua vida. Outra questão é utilizar o Debian 10 como sua distro padrão, quando escrevi este artigo estava na versão 9, mas funciona perfeitamente para o 10. Pelo que entendi você quer ter um servidor proxy utilizando o Squid e os usuários que utilizarem esse proxy sejam usuários do AD, que por sua vez estarão logados em estações windows. Pela mensagem de erro que postou refere-se ao nome do domínio FSMO não foi encontrado ou está incorreto, esse erro me parece configuração do krb5.conf, de uma olhada nos passos e confira cada etapa. Espero que consiga rodar seu servidor proxy. Abr. tmj.

  4. Muito obrigado pelo post. Parabéns!

    Após usar vários outros, foi o único que passou de primeira.

    Apenas ocorreio o erro:
    “checking the trust secret for domain DOMINIO via RPC calls failed”
    Ao executar wbinfo -t

    Resolvido assim:
    systemctl stop winbind.service
    net ads leave -U administrador
    cp -Rp /var/lib/samba /root/samba-tdb-bkp-$(date +%Y%m%d)
    rm /var/lib/samba/*.tdb
    net ads join -U administrador
    systemctl start winbind.service

    1. Show Heliton, neste caso ai era só recriar o ticket que resolvia, bom pelo menos comigo resolveu rs. Que bom que foi útil o artigo, a ideia era essa mesma tentar tornar mais simples as coisas. Vou anotar aqui sua dica, Top. abr.

  5. Não consigo logar meu usuário, todo o resto funcionou corretamente, mas ao tentar logar, ele me dá uma mensagem de erro, porém, tudo funcionou normalmente durante as configurações e outros testes

Ficou com dúvida? Alguma Sugestão ou Elogio? Deixe seu comentário!