Linux integrado ao Microsoft Active Directory

Se você é um profissional de infraestrutura de redes ou de segurança, sabe da importância em manter um ambiente de computadores e usuários gerenciados por uma solução centralizada. Neste cenário, uma das ferramentas mais utilizadas é o Microsoft Active Directory (o famoso “AD”), que permite fazer o gerenciamento de usuários, computadores e permissões de acesso aos recursos da rede.

O AD é um serviço do Microsoft Windows Server e, logicamente, o Windows (versão Professional do 7 ou 10, por exemplo) é totalmente integrado à ele. O macOS (OS X) também possui uma opção nativa para esta integração. Com alguns cliques você adiciona um usuário e integra, facilmente, um Windows (PC) ou um Mac a uma rede gerenciada pelo AD.

Para integrar um computador com Linux ao AD, a dificuldade era sempre maior. Era preciso fazer a instalação de vários pacotes e efetuar uma série de alterações em arquivos e configurações do sistema. No final, nem sempre dava totalmente certo (eu, por exemplo, sempre tive problemas com a opção de “múltiplos logins” – funcionalidade comum em um notebook). Esta dificuldade virou passado com o projeto CID (Closed In Directory), um pacote (conjunto de scripts) que permite a inserção e gerenciamento de sistemas Linux no AD.

Neste artigo, demonstrarei como integrar o sistema Linux Ubuntu 18.04 ao Microsoft Active Directory do Windows Server 2016 usando o CID 1.0.5 e 1.0.6, do baiano Eduardo Moraes.

Ambiente e configuração da rede

No ambiente utilizado, o DHCP da rede já entrega a todos os dispositivos conectados (seja via cabo ou wireless) as configurações de rede padrão, sendo o DNS primário o endereço IP do servidor principal (PDC) do Active Directory (Windows Server) e o DNS secundário (opcional), o endereço IP do servidor auxiliar do Active Directory (BDC), conforme pode ser observado abaixo:

Informações da conexão de rede wireless do Ubuntu

Preparando o Linux Ubuntu

Inicialmente, como boa prática, a recomendação é efetuar uma atualização geral do sistema operacional e seus pacotes. Para isso, use os comandos abaixo:
# sudo apt-get update
# sudo apt-get upgrade

Feito isso, adicione o repositório do CID:
# sudo add-apt-repository ppa:emoraes25/cid && apt update
*Tecle Enter para confirmar.

Instalando o CID

Com o repositório adicionado ao sistema operacional, basta um comando para instalar o CID e todos os pacotes necessários (samba, kerberos, winbind e outros) para a correta integração de um host Linux ao AD:

# sudo apt install cid cid-gtk

Durante o processo, o instalador do Kerberos solicitará o domínio da sua rede (domínio do Active Directory). Insira este dado com todas as letras maiúsculas, conforme exemplo abaixo:

Neste exemplo usamos o domínio fictício “dom.local” e o host “151 / br151”

Inserindo o Linux no domínio do Active Directory

Após a conclusão do processo de instalação, você poderá abrir o CID via linha de comando (# cid-gtk), ou através da interface gráfica:

cid-gtk

No CID, insira as informações do domínio da sua rede, como por exemplo:
Select: Join the Domain
Domain: dom.local (utilizado neste exemplo)
OU: vazio (unidade organizacional do AD)
User: administrator (use algum usuário administrador do seu AD, sem @ ou /)
Passwd: ******* (senha do usuário administrador do seu AD)
Mode: default

Aguarde o processo de inserção (joining) e a mensagem confirmando que o host foi corretamente inserido no domínio (WELCOME to the domain “dom.local”). Ao clicar em OK o CID concluirá algumas configurações, que podem demorar alguns minutos. Aguarde a mensagem de sucesso e então reinicie seu sistema (processo obrigatório).

Feito isso, já será possível logar no Linux com os usuários disponíveis no AD (Uhuuu!). A cada login com um novo usuário, o sistema criará um perfil exclusivo (interface e estrutura de diretórios) para este usuário, assim como no Windows e Mac.

Confirmando a inserção do host

Abrindo o CID você poderá confirmar que o host está integrado ao AD, além de ter acesso a outras funções interessantes.

No exemplo, o host br151 está devidamente conectado ao dominio “dom.local

No Active Directory (Windows Server), o objeto do host estará na OU padrão Computers:

Computador cadastrado no Active Directory

Como permitir que um user comum do AD seja root no Linux

Uma função bem comum para usuários que são desenvolvedores (programadores) é permitir que ele seja administrador / root do seu próprio sistema operacional. Para isso, acesse o sistema Linux com algum usuário root ou administrador no AD e abra o CID. Na opção Manage domain accouts in local groups / Add account / User ou Group, entre com o nome do usuário que deseja tornar root do host.

CID – Gerenciando usuários do domínio em grupos locais

Esta configuração não tornará o usuário administrador no AD (no domínio), somente no sistema operacional local (Linux Ubuntu).

Você pode verificar a configuração que o CID aplicou neste usuário visualizando o arquivo /etc/groups (o usuário adicionado estará em vários grupos locais do Linux).

Arquivos de configurações

Conforme já citado, o CID é um conjundo de scripts que fazem todo o processo necessário para a integração de um sistema operacional Linux ao Active Directory. É possível observar algumas destas configurações acessando alguns arquivos, como:
/etc/hosts – arquivo padrão para configuração de DNS/FQDN;
/etc/krb5.conf – arquivo padrão de configuração do Kerberos;
/etc/samba/smb.conf – arquivo padrão de configuração do Samba;
/etc/nsswitch.conf – arquivo padrão do Network Services Switch;

Arquivo de entrada de nomes: /etc/hosts
Arquivo de configuração do Kerberos: /etc/krb5.conf
Arquivo de configuração do Samba: /etc/samba/smb.conf

Note nas imagens acima a informação que os arquivos foram editados pelo CID, porém, uma cópia do seu estado original foi copiado para o diretório /var/lib/cid/backups.

Instalação manual do CID e pacotes necessários

No exemplo acima, a instalação do CID foi efetuada via repositório (apt install cid). Caso você precise efetuar o processo de maneira “manual”, siga as instruções abaixo:

1 – Faça o download do CID em sua página oficial;
# wget https://sourceforge.net/projects/c-i-d/files/cid-1.0.6.tar.gz
2 – No terminal, vá ao diretório onde o arquivo foi salvo (exemplo: ~/Downloads)
# cd ~/Downloads
3 – No diretório, descompacte o arquivo do CID:
# tar -xzvf cid
4 – Execute o instalador do CID com o comando:
# ./INSTALL.sh
O instalador informará quais dependências (pacotes) estão faltandos no sistema para o seu correto funcionamento. Neste exemplo, usei um computador com o Ubuntu original, ou seja, sem nenhum dos pacotes necessários, portanto, abortei o instalador do CID.
5 – Para instalar os pacotes necessários, execute:
# apt install samba winbind cifs-utils cups smbclient libpam-mount libpam-winbind libnss-winbind
6 – Para instalar o Kerberos, execute:
# apt install krb5-user keyutils
*Lembre-se que durante o processo de instalação do Kerberos é preciso inserir o dominio da sua rede com todas as letras em maiúsculas, conforme exemplo acima.
7 – Execute, novamente, o instalador do CID com o comando:
# ./INSTALL.sh
*Desta vez, ele não informará nenhuma dependência já que todos os pacotes necessários já foram instalados.

Feito isso, basta abrir o CID e continuar com o processo de integração (inserção do Linux no AD), como descrito neste artigo, acima.

Testes efetuados com o host Linux integrado ao AD

Abaixo estão alguns dos testes efetuados no cenário descrito neste tutorial (Ubuntu + Active Directory 2016 + CID 1.0.6):

  • Logando com múltiplos usuários: Foi possível logar com qualquer usuário do AD, inclusive usando as opções de login/logout e a troca de usuário. A lista dos usuários já logados no sistema aparece alguns segundos após o carregamento da tela de login. *Caso não apareça, clique em “Not listed / Não listado”, na tela de login do Ubuntu.
  • Confirmando permissões de acesso (user x admin / root): Ao logar com um user comum do AD, não foi possível efetuar nenhuma alteração no sistema – ao tentar (instalação de um software, por exemplo), o sistema solicitou a senha de algum user local “root”. Ao logar com um user administrador do AD, ele recebe permissões de “root” do sistema, podendo efetuar alterações e instalações.
  • Login remoto (domínio inalcançável): Foi possível usar o equipamento normalmente estando fora da rede local. No login, o sistema informa que o domínio está fora de alcance. *No Ubuntu, observou-se um compartamento curioso: quando desconectado da rede, a lista de usuários do AD só é exibida após cerca de 90 segundos depois da tela de login ser carregada.
  • Erros de login (bloqueio de acesso): Estando na rede local, o login foi bloqueado, normalmente, ao errar a senha várias vezes (políticas de acesso – ACL / GPO) e o sistema, inclusive, informou que a conta foi bloqueada. Estando fora da rede, o sistema não travou (bloqueou) ao errar a senha várias vezes.
  • Login bloqueado ou suspenso: Com o user bloqueado por erros de senha ou suspenso pelo administrador do domínio, não foi possível efetuar login no host (dispositivo). Somente após o desbloqueio ou ativação o login foi realizado.
  • Alteração de senha: A alteração de senha no dispositivo só foi possível via comando passwd. Não foi possível alterar através da interface gráfica do Ubuntu (solicita senha de root local).
  • Redefinir senha no próximo login: Com o administrador do domínio forçando esta opção, o user precisou trocar sua senha ao efetuar login no host (dispositivo).

*Com informações de: SourceForge – CID, Eduardo Moraes no Linkedin – Nova versão do CID.
*Agradecimento especial ao Danilo Cordeiro pelas dicas na execução deste ambiente.

16 Comments

  1. Hello! My name is Wildford.
    Im using CID to integrate my Ubuntu machine on AD, and its working fine but i can only make login without local network until i reboot the machine.

    Every time i make a reboot on my machine i cant make the login if im not connected with local network.
    Can you help me please?

    1. Hello, Wildford! As we talked by email, I didn’t answer you here when you wrote. As soon as possible, please, return with your tests and results. I’ll try to test the new version of CID (https://sourceforge.net/projects/c-i-d/) in a few days and then, check if the problem with Ubuntu (outside of the domain controller network) has been resolved.

  2. Boa noite!
    Consigo ingressar no domínio normalmente mas não consigo logar com os usuários do domínio!
    Seria possível me ajudar com está dificuldade que estou tendo em meu laboratório?

    1. Lucas, tudo bem? Obrigado! Sobre teu problema, qual versão do Linux (cliente) você está usando aí? Estando na rede do controlador de domínio (AD) e ele sendo o DNS dos seus clientes (para reconhecerem o domínio do controlador), você deveria conseguir logar com outros usuários do AD.

  3. Boa tarde amigo….parabéns pelo artigo…..funcionou tudo 100% como falastes, porem fora da rede não estou conseguindo fazer login no usuário do AD.
    Teria alguma dica?

    1. Olá, Elisandro. Obrigado! Qual versão do Linux você está usando aí? Este é um problema que passamos a enfrentar por aqui também. Conversei com o desenvolvedor e, depois de vários testes, descobrimos algum tipo de “bug” ao logar fora da rede do controlador de domínio, nas versões Ubuntu 19 e 20. No Ubuntu 18 e Mint 19, mesmo estando fora da rede, foi possível logar usando os users do AD (pré-logados), mas, aparentemente por um bug de interface, os usuários (já pré-logados), aparecem somente depois de um certo tempo. Já no Fedora 31, mesmo estando fora da rede, sempre foi possível logar usando os users do AD (pré-logados) normalmente. Se puder, testa com a última versão do CID (1.1.0 – https://sourceforge.net/projects/c-i-d/files/). Retorna por aqui quando puder. Abraço!

  4. Perfeito! funcionou de boa aqui.

    Soh não consegui abrir a GUI do cid pelo terminal com o comando “cid-gtk”. Apresenta a mensagem abaixo, saberia o que pode ser e como resolver isso?

    root@debian:/# cid-gtk
    Unable to init server: Não foi possível conectar: Conexão recusada

    (zenity:1552): Gtk-WARNING **: 07:54:46.551: cannot open display:
    root@debian:/#

  5. Scota, tudo bem? Minha duvida fica a cerca da atualização no DNS Server dos Clientes Linux, assim como faz com clients Windows.
    Digo, ela tem uma concessão de IP, que troca – seja lá o motivo que for – e ao ter uma nova, é automaticamente atualizado no DNS.
    Já nos clients Linux não. Eu o ajusto escrevendo no hosts na hora da instalação/inclusão, mas se por ventura mudar o IP, no DNS ele fica o primeiro registro. Nota que essa necessidade foi parcialmente resolvida quando necessitava desta entrada.
    Quanto ao AD, tudo perfeito!!!!

    1. Olá, Thiago! Bom ponto. Não cheguei a reparar neste detalhe dos IPs x DNS dos hosts Linux. Uma sugestão rápida para resolver este problema (se fizer sentido em seu ambiente) é, no seu DCHP Server, reservar o IP de cada cliente Linux.

  6. Boa tarde, Daniel. Valeu pelo serviço que está prestando! Estou com o mesmo problema que o amigo acima, usando Ubuntu 20.04 e CID 1.1.0, perdendo acesso aos usuários quando tento logar sem rede.
    Alguma novidade a respeito?

    1. Olá, Cristian! Não consegui testar afundo as novas versões do CID, mas, em testes iniciais, também encontrei este problema (falha ao logar quando fora da rede). Por favor, poste seu problema no fórum oficial do CID, no SourceForge (https://sourceforge.net/p/c-i-d/discussion/).

      Além disso, aproveito para divulgar que o CID é um projeto opensource que aceita doações para contribuir em seu desenvolvimento. Para doar, acesse a página acima e clique em Donate.

  7. Boa tarde, como faço para aplicas GPOs nos hosts Linux?
    Tenho GPO de atalhos e Wallpepers

    1. Olá, Thomas! Primeiramente, me perdoe pela demora nesta resposta. Não cheguei a testar este tipo de config, porém, creio que o caminho seja através de scripts de inicialização.

  8. Boa tarde,

    Consegui colocar qualquer Linux baseado em UBUNTU no domínio, reinicia e consigo autenticar no domínio a primeira vez, depois que reinicio não consigo mais autenticar, só de encerrar a sessão e voltar ele não autentica mais.

    Já alterei o /etc/resolvconf/resolv.conf.d/head fixando o DNS no meu AD, mas permaneceu o problema.

    Teria ideia do que pode ser?

    1. Olá, Vinicius! Eu tive um problema semelhante quando o device (notebook) estava fora da rede, sem alcance do controlador de domínio (do AD, neste caso), como pode ser observados nos comentários deste post. Notei que o Eduardo Moraes, autor do CID, lançou uma nova versão recentemente. Vale testar e acompanhar a pagina oficial do projeto https://sourceforge.net/projects/c-i-d/

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.