Precisei ingressar meu Ubuntu 15.04 no AD, como sei que vou precisar desse artigo de vez em quando, estou postando no meu blog, mas todo conteúdo é do VIVAOLINUX, o endereço completo desse artigo encontra-se nas referencias deste post
PRÉ-REQUISITOS E FINALIDADE DE CADA UM PARA O TRABALHO
Antes de começar a trabalhar, é necessário saber quais são os serviços que o desktop com o sistema GNU/Linux precisa ter rodando para ingressar no domínio. Abaixo descrevo os serviços:
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).
O Active Directory faz uso deste serviço para autenticação em rede, logo, as máquinas clientes terão que ter informações do KDC (Centro de Distribuição de Chaves) para autenticar-se no Active Directory.
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.
O Samba até a versão 3, que é a que será usada nesse artigo, é um serviço cuja principal função é disponibilizar recursos compartilhados em uma rede, tais como arquivos e impressoras. Mas será usado para autenticação de usuários no servidor onde está rodando devido o winbind depender do mesmo.
O mesmo faz uso de dois serviços, são NMB e SMB.
O serviço NMB tem a principal finalidade de resolução de nomes NetBIOS para que o servidor Samba possa enxergar e ser enxergado pelas outras máquinas. Então, este serviço permite a navegação pela rede, usando os hostnames das máquinas e o acesso às mesmas em rede.
O serviço SMB permite compartilhar tais recursos e autenticar os usuários no servidor Samba local, ou repassa as solicitações de autenticação para outro computador, como um servidor controlador de domínio com o Active Directory.
CONSIDERAÇÕES DE AMBIENTE DE REDE
No ambiente proposto no artigo, já existem os servidores DNS em execução na rede, pois, para a autenticação ser feita, é necessário o uso do DNS e o servidor com Active Directory configurado como controlador de domínio principal já instalado e funcionando.
Veja a disposição dos servidores na rede para explicação do artigo:
- Domínio → adm.pi.empresa.br
- Servidor DNS primário → 10.0.0.2
- Servidor DNS Secundário → 10.0.0.13
- Servidor DHCP → 10.0.0.2
- Servidor controlador de domínio → 10.0.0.2 adm.pi.empresa.br
Como os clientes serão configurados pelo serviço DHCP, só especificarei o nome da máquina cliente:
======================================================
Agora será abordada a parte técnica do trabalho.
ARQUIVO /ETC/HOSTS, INSTALAÇÃO DE PRÉ-REQUISITOS E KERBEROS
ARQUIVO /ETC/HOSTS
Nesta parte iremos editar o arquivo /etc/hosts incluindo uma alias para o endereço do controlador de domínio e alterar o hostname do desktop cliente (mintvirt), acrescentando o fqdn, ou seja, o nome do domínio junto ao hostname da máquina cliente.
No entanto, substitua os nomes abaixo pelos correspondentes na sua rede.
# vim /etc/hosts
Conteúdo a ser acrescentado:
127.0.0.1 ubuntu.adm.pi.empresa.br localhost ubuntu
10.0.0.2 server
Observe que "server" é nome do controlador de domínio usado no artigo, troque pelo nome do controlador de domínio de sua rede. Execute o comando abaixo para ver o nome da máquina completo, ou seja, o hostname com o nome do domínio da máquina cliente:
# hostname -f
INSTALAÇÃO DE PACOTES NECESSÁRIOS
Para que o desktop GNU/Linux possa migrar no domínio, é necessário fazer a instalação dos seguintes pacotes descritos a seguir, lembrando que os pacotes abaixo, são para distros Debian like:
# apt-get install krb5-user krb5-config winbind samba samba-common smbclient cifs-utils libpam-krb5 libpam-winbind libnss-winbind
Durante a instalação do kerberos, vai ser apresentado algumas telas com perguntas referentes ao KDC, mas pode dá um ENTER e seguir com a instalação dos pacotes, pois a configuração do kerberos será abordada mais a frente.
SERVIÇO NTP - SICRONIZANDO DATA E HORA COM O SERVIDOR
Para que a máquina cliente possa comunicar-se sem problemas com o controlador de domínio Windows Server, é necessário que o horário e data de ambas as máquinas estejam sincronizadas. Para isso, teremos que configurar o cliente NTP para atualizar data e hora pelo servidor Active Directory.
Edite o arquivo de configuração do serviço NTP usando o Vim:
# vim /etc/ntp.conf
Nas linhas do arquivo onde o conteúdo começa com a palavra "server", comente estas linhas com uma cerquilha "#", e adicione o seguinte conteúdo:
# Controlador de domínio #
server 10.0.0.2
restrict 10.0.0.2
Veja que ambos os endereços são do controlador de domínio. Agora, reinicie o serviço de data e hora:
# /etc/init.d/ntp stop
# /etc/init.d/ntp start
O Ubuntu usa o Upstart, então, para reiniciar o serviço é diferente. Para uma leitura mais abrangente, leia o conteúdo desse link:
O ambiente proposto pelo artigo, existe um servidor DHCP, então, não é necessário configurar o DNS, já que esse trabalho é feito pelo serviço DHCP. No entanto, se não estiver usando um serviço DHCP, edite o arquivo /etc/resolv.conf indicando os endereços dos servidores de nome, como mostrado abaixo:
# vim /etc/resolv.conf
search adm.pi.empresa.br
nameserver 10.0.0.2
nameserver 10.0.0.13
Substitua os endereços acima e o nome do domínio informado pelos endereços de seus servidores DNS e o nome do seu domínio na rede onde está configurando a máquina cliente.
KERBEROS
Para um usuário autenticar-se no Active Directory, é necessário editar o arquivo /etc/krb5.conf e incluir informações sobre o servidor KDC (controlador de domínio kerberos). Nesse caso, o controlador de domínio com o Active Directory possui um KDC. Use o Vim para editar o arquivo e inclua as seguintes linhas no arquivo:
# vim /etc/krb5.conf
Conteúdo acrescentado:
[libdefaults]
default_realm = PI.EMPRESA.BR
[realms]
PI.EMPRESA.BR = {
kdc = winactive.pi.empresa.br
default_domain = PI.EMPRESA.BR
admin_server = winactive.pi.empresa.br
}
[domain_realm]
.adm.pi.empresa.br = ADM.PI.EMPRESA.BR
EXPLICAÇÃO DA CONFIGURAÇÃO
Este arquivo é organizado em seções. As seções inclusas para autenticação no domínio são listadas abaixo junto com suas sub-seções:
[libdefaults] → Seção que contém valores padrão para o Kerberos V5, nessa seção só deixei uma única sub-seção, explicada a seguir.
default_realm → Esta sub-seção identifica o domínio padrão a ser usado pelo cliente kerberos.
[realms] → O kerberos divide a rede em domínios seguros, chamados de "realms", então esta seção contém sub-seções informando nomes de "realms" do Kerberos, informando onde encontrar os servidores Kerberos para domínios seguros específicos e outras informações.
Neste caso, criei uma sub-seção chamada de "ADM.PI.EMPRESA.BR", que é referente ao domínio seguro no qual a máquina irá ingressar. E dentro, criei as seguintes sub-seções:
kdc → Aqui se configura o nome da máquina que está executando o controlador de domínio do kerberos mestre, como o controlador de domínio rodando o Active Directory está executando o KDC, então inclui o nome completo da máquina aqui.
default_domain → Nesta sub-seção se especifica o domínio seguro padrão.
admin_server → Esta sub-seção identifica o host onde o servidor que faz administração do kerberos está sendo executado.
[domain_realm] → Seção que indica os mapas de domínios e sub-domínios.
Depois de configurar o kerberos, vamos testar a comunicação entre o servidor e desktop. Execute o comando abaixo, no exemplo estou usando o nome "fulando", que é um usuário do domínio criado, mas substitua pelo nome do usuário que estiver cadastrado no servidor.
# kinit fulano
Se o comando não retornar nenhuma saída, é porque a comunicação está sendo realizada com sucesso. Agora vamos listar o ticket obtido nessa comunicação usando o comando:
# klist
O comando klist deverá retornar uma saída como a que está abaixo:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: fulano@pi.empresa.br
Valid starting Expires Service principal
13-11-2012 15:48:35 14-11-2012 01:49:08 krbtgt/ADM.PI.EMPRESA.BR@ADM.PI.EMPRESA.BR
renew until 16-11-2012 15:48:35
======================================================
CONFIGURANDO SAMBA, INGRESSANDO MÁQUINA NO DOMÍNIO E ARQUIVO /ETC/NSSWITCH.CONF
CONFIGURANDO O SAMBA
Antes de colocar a máquina no domínio, é necessário configurar o Samba para que seja possível à máquina ingressar no domínio. Toda configuração é feita no /etc/samba/smb.conf, o Winbind não precisa configurar pois o mesmo é um daemon usado pelo Samba.
Edite o arquivo /etc/samba/smb.conf com Vim:
# vim /etc/samba/smb.conf
Inclua as seguintes linhas no arquivo "smb.conf", caso algumas dessas linhas já estejam dentro do arquivo, edite e deixa-as como está abaixo. O arquivo está bem comentado com explicações dos principais parâmetros:
[global]
security = ads # O modo de operação ADS faz com que o Samba se comporte como um membro (cliente) de um domínio Windows
realm= ADM.PI.EMPRESA.BR # Informa o domínio que controlador de domínio Kerberos que será usado
workgroup = ADM # Informa o grupo de trabalho, nesse caso informa o domínio
idmap uid = 10000-15000 # Especifica o intervalo de IDs de usuários que serão mapeados para o sistema local, coloquei um intervalo de cinco mil, mas pode colocar menor ou maior número
idmap gid = 10000-15000 # Especifica o intervalo de GIDs de grupos que serão mapeados para o sistema local
winbind enum users = yes # Permiti o winbind enumerar usuários
winbind enum groups = yes # Permiti o winbind enumerar grupos
template homedir = /home/%D/%U # Informa aonde será criado o diretório home de cada usuário após logar no sistema, o parâmetro %D informa o nome do domínio e %U o nome do usuário
template shell = /bin/bash # Informa qual shelll será atribuído ao usuário, você pode incluir /bin/false para impedir que o usuário faça uso do shell, mas irá ser usado por todos usuários do domínio
client use spnego = yes # Este parâmetro controla se smbclient irá usar negociação simples e protegido na autenticação, essa opção permite usar o Kerberos
winbind use default domain = yes # Parâmetro usado para não incluir o nome do domínio a ser usado junto ao nome do usuário no sistema, por exemplo: DOMINIO\usuário. Habilitando esse parâmetro, somente o nome do usuário será usado para identificar o mesmo
restrict anonymous = 2
winbind refresh tickets = yes # Este parâmetro é usado para controlar se o winbind deve atualizar os tickets do Kerberos usando o módulo pam_winbind
Observe que nem todos os parâmetros são necessários para ingressar a máquina no domínio. Depois de editar, salve as alterações e reinicie os serviços do Samba e Winbind.
# service winbind restart
# service samba restart
No Ubuntu, reinicie da seguinte forma:
# service winbind restart
# restart smbd
# restart nmbd
INGRESSANDO A MÁQUINA NO DOMÍNIO
Depois de configurar o Samba, é hora de ingressar a máquina no domínio com o comando net. Execute o comando abaixo como root:
# net ads join -U Administrador
Veja que usei a opção "-U" no comando net, seguido do nome do usuário com permissão de ingressar máquinas no domínio, o usuário Administrador foi usado. Após a execução do comando, deverá retornar uma mensagem como que está abaixo:
Using short domain name - ADM
Joined 'UBUNTU' to realm 'ADM.PI.EMPRESA.BR'
Agora, faça o teste e liste os grupos e usuários do domínio com o comando wbinfo. Para listar usuários execute:
# wbinfo -u
Para listar os grupos execute:
# wbinfo -g
Caso não retorne nenhum nome de usuário ou grupo, reinicie o Winbind.
ARQUIVO NSSWITCH.CONF
Depois ingressar a máquina no domínio, vamos configurar o arquivo /etc/nsswitch.conf para que o sistema possa saber onde buscar informações de login dos usuários que estão se autenticando. É neste arquivo que iremos comunicar ao sistema que ele deve procurar nossas informações de login usando o Winbind.
Edite o arquivo usando o Vim e deixando as linhas abaixo como demonstrado. Em seguida, salve as alterações:
# vim /etc/nsswitch.conf
Conteúdo alterado:
passwd: compat winbind
group: compat winbind
Veja que, como estamos lidando com usuários, grupos e senhas, apenas alteramos as linhas que correspondem aos mesmos, estamos informando ao sistema que ele deve procurar nossas informações de login usando o Winbind nas linhas:
"passwd: compat" para senha
"group: compat" para group
======================================================
CONCLUINDO O TRABALHO
ALGUNS DETALHES E ESCLARECIMENTOS
Muitos howtos encontrados na Internet mostram configurações adicionais desnecessárias, fazendo alterações em vários arquivos de autenticação do PAM. Mas a maioria destas configurações não são necessárias, pois ao instalar os pacotes Winbind e o pacote que contém as bibliotecas do kerberos, o próprio sistema se encarrega de alterar os arquivos sem qualquer intervenção dos usuários, com exceção de um arquivo.
O único arquivo que se faz necessário a intervenção do usuário é o /etc/pam.d/common-session (em distros Debian like).
Então, edite o arquivo /etc/pam.d/common-session e após linha abaixo:
session required pam_unix.so
Inclua esta:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
A linha mencionada anteriormente 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.
Caso esta linha não esteja adicionada, provavelmente será apresentado a seguinte mensagem após o login:
SOLUCIONANDO O PROBLEMA AO TROCAR SENHAS DURANTE O LOGIN NO UBUNTU
Todo o trabalho feito até então fará os usuários logarem nos desktops GNU/Linux sem problemas nas distros Debian e Linux Mint Debian Edition. No Ubuntu 12.04, no entanto, haverá um problema quando for solicitado para o usuário trocar a senha no momento do login.
Normalmente o administrador da rede mantém um diretiva interna que indica o tempo que uma senha será válida, após esse período, a senha expira.
As imagens abaixo indicam onde acontece o erro quando se tenta trocar a senha na tela de login. Quando digita-se a senha, o gerenciador de login pede para repetir a senha atual e em seguida, pede a repetição da senha atual.
Depois de digitar e dar um ENTER, não é pedido para entrar com a nova senha e a mesma não é trocada, e volta em seguida para tela de login.
A solução para poder alterar senha quando solicitada e autenticar-se, é editar o arquivo /etc/pam.d/common-account alterando as duas linhas abaixo:
account[sucess=2new_authtok_reqd=donedefault=ignore]pam_unix.so
account[sucess=1new_authtok_reqd=donedefault=ignore]pam_winbind.so
Deixando-as assim:
account[sucess=2new_authtok_reqd=donedefault=ignore]pam_winbind.so
account[sucess=1new_authtok_reqd=donedefault=ignore]pam_unix.so
Veja que somente inverti a ordem dos módulos, colocando o módulo "pam_winbind.so" antes do módulo "pam_unix.so". Assim, após a alteração da senha e confirmação da autenticação, a classe de módulos "account" irá primeiro consultar o módulo "pam_winbind.so", permitindo o acesso e não dando o erro de antes.
Veja nas imagens abaixo como fica a solicitação de alteração de senha.
Digitando nome de usuário senha atual:
Solicitando a repetição da senha atual:
Pedindo para repetir outra vez a senha atual:
Solicitando a nova senha:
Pedindo para confirmar a nova senha:
TELA DE LOGIN NO UBUNTU
Uma dica para quem usa o Ubuntu, é alterar a tela de login do mesmo fazendo com que seja possível logar com qualquer usuário, e não somente o usuário criado na instalação do sistema, informando nome e senha. Para isso, edite o arquivo /etc/lightdm/lightdm.conf incluindo as alterações mencionadas abaixo, no final do arquivo.
OBS:. No ubuntu versão 15.04 crie o arquivo, pois o mesmo não se encontra no path informado acima.
[SeatDefaults]
allow-guest=false
greeter-show-manual-login=true
greeter-hide-users=true
Depois de todas estas etapas, reinicie a máquina e ao logar, use somente o nome do usuário cadastrado no domínio. Este detalhe é interessante por causa da configuração usada no arquivo /etc/samba/smb.conf, não é necessário colocar o nome do domínio junto com o nome do usuário que irá logar no domínio, coloque somente o nome de usuário e informe a senha.
REFERÊNCIAS