windows e linux dão as mãos

Adicionando o Linux a um domínio do AD para autenticação

Compartilhe

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:

  1. A pasta home do usuário não é criada automaticamente
  2. 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:

  1. Permitir ao grupo de administradores executar o comando sudo para tarefas administrativas
  2. 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:

Artigos Relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Um pensamento em “Adicionando o Linux a um domínio do AD para autenticação”