Uma das funcionalidades mais bem-sucedidas do Windows Server é o Active Directory, o serviço utilizado por praticamente todo mundo que para serviços de autenticação e diretório.
É possível adicionar máquinas Linux a um domínio AD para que elas apareçam como computadores no diretório. Melhor ainda, você poderá usar credenciais do AD para logar no Linux e usar grupos para controlar permissões e acessos!
Este artigo mostrará o passo-a-passo para o Debian Buster, mas os mesmos passos servirão para o Ubuntu e quaisquer derivados (Mint, Zorin, Peppermint, etc).
Prerequisitos
Pra evitar dores de cabeça mais adiante, vamos nos certificar de que a configuração de rede está perfeita e que não há configurações antigas que possam interferir.
IMPORTANTE: Este tutorial vai refazer a configuração do Samba. Se você já usa o Samba nesta máquina para compartilhar recursos, faça uma cópia do arquivo /etc/samba/smb.conf antes de continuar, e depois reaplique as configurações de share no final do procedimento. Se tiver dúvidas, escreva nos comentários!
Testando a resolução de nomes
Vejamos se o DNS está configurado corretamente. Tenha em mãos o nome do controlador de domínio (DC) mais próximo. Neste exemplo, vamos chamá-lo de DC1.
Numa janela de terminal ou conexão SSH, digite:
ping -c5 dc1
Você deve ver o IP do DC respondendo. Confira também que o nome com domínio (FQDN) está correto. Por exemplo, se seu domínio for meunegocio.com.br, você deveria ver dc1.meunegocio.com.br
Agora vamos garantir que o servidor DNS está respondendo:
sudo apt install -y dnsutils nslookup dc1
A resposta deve incluir o IP do seu servidor DNS e o FQDN do DC, ou algo assim:
Server: 192.168.0.2 Address: 192.168.0.2#53
Name: dc1.meunegocio.com.br Address: 192.168.0.10
Se algum dos passos anteriores não funcionou, pare e resolva sua configuração de rede antes de continuar. Este artigo pode ser de ajuda.
Instalando o Samba
O Samba permite se conectar a redes Windows (SMB) e fornece os componentes necessários para entrar num domínio AD. Mas como queremos começar do zero, vamos garantir que não há resquícios de instalações anteriores. Começamos por matar os processos do Samba e excluir o arquivo de credenciais.
sudo su systemctl stop smbd systemctl stop nmbd systemctl stop winbind systemctl stop samba rm -f /var/*/samba/*.[t,l]db exit
Agora vamos instalar os pacotes necessários para o Samba:
sudo apt install -y samba attr winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config krb5-user samba-dsdb-modules samba-vfs-modules smbclient acl
Durante a instalação você pode ver a mensagem abaixo. Se utilizar WINS em sua rede e souber o que está fazendo, pode escolher Yes, mas normalmente você deve selecionar No, que é o que vamos fazer aqui.
A seguir vamos instalar um cliente NTP (Network Time Protocol) para garantir sincronização com o horário da rede, já que é crítico para o bom funcionamento do AD que os relógios estejam sincronizados. Um cliente NTP leve, simples e funcional é o Chrony.
Vamos instalar o Chrony:
sudo apt install chrony
Agora vamos configurar o chrony para usar o AD como fonte de hora. Para isto você deverá usar o FQDN do DC raiz de sua rede – aquele que está agindo como NTP server. Em nosso exemplo vamos usar o dc1.meunegocio.com.br, e em seguida vamos reiniciar o serviço.
sudo sed -i 's/2.debian.pool.ntp.org/dc1.meunegocio.com.br/g' /etc/chrony/chrony.conf sudo systemctl restart chronyd
Configuração do Samba
A configuração do Samba para autenticação com contas do AD requer que o arquivo smb.conf esteja configurado de forma precisa e consistente em seus hosts linux. Os detalhes aqui fazem a diferença.
Edite o smb.conf
sudo nano /etc/samba/smb.conf
Uma vez no nano, procure a seção [global] a linha workgroup = WORKGROUP. Coloque aqui o nome NETBIOS do seu domínio (a parte que aparece antes da barra quando o usuário vai logar). No exemplo usaremos MEUNEGOCIO.
Você vai adicionar várias linhas neste ponto. Na linha realm= use o nome FQDN do seu domínio – em letras maiúsculas (eu usei MEUNEGOCIO.COM.BR). Insira as outras linhas exatamente conforme o exemplo:
workgroup = MEUNEGOCIO realm = MEUNEGOCIO.COM.BR security = ADS winbind refresh tickets = yes winbind use default domain = yes winbind nested groups = yes winbind expand groups = 4 winbind offline logon = yes winbind refresh tickets = yes winbind normalize names = no vfs objects = acl_xattr map acl inherit = yes store dos attributes = yes
Ainda no smb.conf, desça até encontrar este trecho:
Esta seção define como o Samba vai fazer a mapeamento dos IDs de usuários AD para o Linux. É extremamente importante que todas as máquinas Linux do seu domínio tenham esta seção configurada da mesma forma.
Remova o ponto e vírgula (;) para descomentar as 2 primeiras linhas. mude o backend para autorid na primeira linha e mude o range na segunda linha conforme o exemplo. Descomente a linha template shell e inclua a linha template homedir.
Este trecho deve ficar exatamente assim:
#Some defaults for winbind (make sure you're not using the ranges #for something else.) idmap config * : backend = autorid idmap config * : range = 10000-24999999 ; idmap config YOURDOMAINHERE : backend = tdb ; idmap config YOURDOMAINHERE : range = 100000-999999 template shell = /bin/bash template homedir = /home/%U
Salve o arquivo smb.conf pressionando Ctrl-X e confirmando com Y
Configuração do Kerberos
Este é outro trecho que não é difícil, mas que exige uma configuração exata. Vamos começar editando o /etc/krb5.conf
sudo nano /etc/krb5.conf
Aqui você já deve ter a linha default_realm preenchida com o nome do seu domínio FQDN, em maiúsculas. Se não estiver, correto, aproveite pra corrigir.
Adicione as duas linhas dns_lookup… após o default_realm, para ficar similar ao abaixo:
[libdefaults] default_realm = MEUNEGOCIO.COM.BR dns_lookup_realm = false dns_lookup_kdc = true
Confira que as seguintes linhas estejam na seção [libdefaults] e, se não existirem, adicione:
kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true
Na seção [realms] remova os domínios existentes (ATHENA.MIT.EDU e outros) e crie uma entrada apenas para o seu domínio, lembrando de substituir com o nome do seu domínio e DC. Mantenha maiúsculas e minúsculas conforme o exemplo:
[realms] MEUNEGOCIO.COM.BR = { kdc = dc1.meunegocio.com.br admin_server = dc1.meunegocio.com.br default_domain = meunegocio.com.br }
Na seção [domain_realm] ajuste conforme o nome do seu domínio, mais uma vez respeitando maiúsculas e minúsculas. Note que a primeira linha começa com um ponto antes do nome do domínio.
[domain_realm] .meunegocio.com.br = MEUNEGOCIO.COM.BR meunegocio.com.br = MEUNEGOCIO.COM.BR
Agora salve o arquivo krb5.conf com Ctrl-X seguido de Y para confirmar.
Esta é uma boa hora para um reboot.
sudo reboot
Adicionando ao Domínio AD
Após o reboot e logar na máquina, é hora de adicionar a máquina ao domínio AD
Basta o comando abaixo. Especifique um usuário com permissão de adicionar máquinas ao domínio, no formato DOMINIO\\Usuario. Note as 2 barras para que o Linux não ignore o caractere.
sudo net ads join -U MEUNEGOCIO\\Administrador
A seguir digite a senha da conta de domínio.
Se tudo correu bem você vai ver algo como:
Using short domain name -- MEUNEGOCIO Joined 'SERVIDOR' to dns domain 'meunegocio.com.br'
Pronto! A Máquina já está no domínio. Vamos forçar a resolução de nomes a acontecer através do DNS mesmo para a máquina local, o que é uma recomendação do time do Samba. Fazemos isso comentando a linha 127.0.1.1 no arquivo /etc/hosts:
sudo sed -i 's/127.0.1.1/\#127.0.1.1/g' /etc/hosts
Agora podemos inicializar os serviços do samba. Vamos garantir estejam inicializando automaticamente no boot:
sudo systemctl enable smbd sudo systemctl enable nmbd sudo systemctl enable winbind sudo systemctl start smbd sudo systemctl start nmbd sudo systemctl start winbind
Vamos nos certificar que os serviços iniciaram corretamente. Para isso vamos filtrar a lista de processos do comando ps:
Este comando vai devolver os processos dos serviços smbd, nmbd e winbindd. Certifique-se de que pelo menos um de cada está presente. É normal ter mais de uma linha para um processo.
ps -e |grep -e [s,n]mbd -e winbind
Se todos os processos estão rodando, isto significa que não há erros nos arquivos de configuração e podemos continuar!
Configurações adicionais do Samba
Caso você já tinha algum compartilhamento SMB através do Samba nesta máquina e fez uma cópia do smb.conf nos passos anteriores, agora é a hora de restaurar os shares anteriormente configurados. Faça isto apenas se você configurou shares nesta máquina anteriormente. Se fez isso, sabe que precisará restaurar a seção com o nome do share embaixo da linha de comentários que diz ‘Share Definitions‘.
Configurando a Autenticação com contas do AD
Agora que nossa máquina é parte do domínio, vamos configurar o Linux para aceitar o AD como fornecedor de serviços de autenticação. Isto significa que você poderá fazer login nesta máquina linux usando contas do domínio, como no Windows!
Nós vamos usar o Winbind para esta tarefa, que é parte do Samba.
Para fazer isso vamos editar o arquivo /etc/nsswitch.conf e adicionar o termo winbind entre files e systemd. Poderíamos fazer isso pelo nano mas vamos mudar linhas passwd: e group: com o comando sed (isto é muito útil para automatizar configurações de sistema, por exemplo):
sudo sed -i '/[passwd,group]\:/ s/files systemd/files winbind systemd/g' /etc/nsswitch.conf
Se você abrir uma nova conexão via SSH a esta máquina e fizer o logon usando um usuário de domínio valido verá que funcionará! Mas ainda temos dois problemas:
- A pasta home do usuário não é criada automaticamente
- Qualquer usuário de domínio pode fazer login, o que não é o que você quer em servidores!
Vamos resolver a criação automática dos homedirs. Mais uma vez vamos fazer isso com uma única linha de comando para adicionar uma linha ao final do arquivo /etc/pam.d/common-account
echo session required pam_mkhomedir.so skel=/etc/skel/ umask=0077 | sudo tee -a /etc/pam.d/common-account
Agora, toda vez que um usuário fizer login pela primeira vez, uma pasta de usuário será criada em /home/(username).
Restringindo os grupos AD que podem fazer login na máquina
Agora que você abriu a porteira para qualquer usuário do domínio fazer login em seu servidor, você provavelmente vai querer resolver isto para só permitir que usuários de determinados grupos consigam fazer o login.
Se souber o que está fazendo e quiser permitir login sem restrição, como por exemplo numa workstation, pode pular este passo.
Definindo quem pode fazer login
Se você já tem um grupo de domínio que contém os usuários que quer permitir para login, poderá utilizá-lo a seguir. Por exemplo, digamos que o grupo ti_admin_servidor já é usado para dar acesso aos servidores Windows ao grupo de administração. Note que grupos sem espaço são mais fáceis de gerenciar no Linux, mas nomes com espaço também funcionam se delimitados por aspas.
Mas pode ser que você queira criar um grupo novo, digamos ti_admin_linux para separar quem tem acesso aos servidores Linux. Seja como for o caso, certifique-se de que o grupo exista no AD antes de continuar.
Neste exemplo, além dos grupos nativos de Linux, vamos permitir acesso a 2 grupos do Windows: ti_admin_linux e ti_operador_linux (este último usaremos para permitir acesso restrito ao servidor, por exemplo para poder fazer shutdown).
Criando a lista de acesso permitido
Vamos criar o arquivo /etc/login.group.allowed para conter a lista de grupos com login permitido. Uma vez que esteja ativado, apenas os grupos neste arquivo poderão fazer login, incluindo grupos nativos do Linux. Ou seja, se não prestar atenção você pode se ‘trancar’ pra fora da máquina, então vamos os cuidados necessários!
Primeiro crie o arquivo /etc/login.group.allowed para edição
sudo nano /etc/login.group.allowed
Adicione ao arquivo os grupos root, wheel e sudo, além dos grupos Windows que deseja permitir – um por linha, como no exemplo abaixo.
root wheel sudo ti_admin_linux ti_operador_linux
Certifique-se que está tudo certo e salve o arquivo com Ctrl-X e depois Y.
Agora vamos aplicar a verificação dos grupos. Para impedir que você seja acidentalmente ‘trancado pra fora’ de sua máquina se algo estiver errado, abra uma segunda conexão ssh à máquina. Daí eleve os privilégios para assumir os superpoderes de root:
sudo su
Confira que o prompt mudou de $ para #. Este é o jeito discreto do Linux de dizer que você é o cara.
Deixe a segunda conexão de root quietinha e volte à janela SSH principal.
Copie e cole este comando monstro (ele adiciona uma linha no inicio do arquivo /etc/pam.d/common-account):
sudo sed -i '1s/^/auth required pam_listfile.so onerr=fail item=group sense=allow file=\/etc\/login.group.allowed\n/' /etc/pam.d/common-account
Agora vamos testar!
Use o comando su (usuario) para testar a restrição. Vamos testar primeiro o usuario peao, que não está nos grupo ti_admin_linux ou ti_operador_linux.
su peao Password: su: Authentication failure
Como vemos o login foi negado, o que é o esperado. Vamos repetir com o usuário geek, que é membro de ti_admin_linux:
su geek Password: geek@servidor:~$
Desta vez o login foi permitido, como esperávamos. Como último teste, repita o passo acima usando o mesmo usuário linux que você está usando para logar na máquina até agora.
Agora que verificamos que tanto o login de contas linux como Windows funciona corretamente, você pode fechar a conexão aberta como root.
Configurando o nível de acesso dos usuários Windows
Até agora adicionamos a máquina ao domínio e configuramos grupos específicos de usuários para fazer o login – mas ainda não especificamos o grau de acesso que estes usuários terão ao sistema. qualquer um que logar será um usuário não privilegiado, e também não terá permissão para desligar ou reiniciar a máquina.
Neste passo vamos fazer duas coisas:
- Permitir ao grupo de administradores executar o comando sudo para tarefas administrativas
- Permitir ao grupo de operadores executar os comandos poweroff e reboot sem precisar digitar a senha novamente.
Para configurar ambos perfis vamos editar o arquivo sudoers, que controla o comportamento do comando sudo. Para isso há um comando específico, o visudo
sudo visudo
Inclua as seguintes linhas ao final arquivo:
%ti_admin_linux ALL=(ALL:ALL) ALL %ti_operador_linux ALL=NOPASSWD: /usr/sbin/shutdown, /usr/sbin/reboot, /usr/sbin/poweroff
A primeira linhas quer dizer que os membros do grupo ti_admin_linux podem rodar qualquer comando com sudo, exigindo confirmação de senha. A segunda linha dá permissão ao grupo ti_operador_linux a rodar sudo apenas nos comandos shutdown, poweroff e reboot, e não exigir confirmação de senha.
Salve o arquivo com Ctrl-X e depois Y.
As mudanças são imediatas.
Pronto! Você integrou sua máquina Linux ao seu domínio do Active Directory e definiu restrições de acesso usando contas do Windows.
Referências:
Um pensamento em “Adicionando o Linux a um domínio do AD para autenticação”
Não sei o quanto de tempo este post está no ar, mas gostaria de agradece quem publicou, salvou uma ISO… rsrsr
Gerenciar usuários pelo AD, e mais de meio caminho andado.
Parabéns, tudo funcionou muito bem.