Autenticando o Linux no Active Directory

Clovis Sena

Versão deste documento:  0.76
É permitido reproduzir e destribuir este documento, sob os termos da GNU Free Documentation License.


Apresentação


O objetivo deste trabalho é mostrar como implementar um ambiente de rede mixto, usando estações de trabalho Windows e Linux, fazendo a autenticação no Active Directory do Windows 2000 Server.

Vamos mostrar um passo a passo, através das telas da instalação, com todos os procedimentos necessários para fazer com que nossoas estações Linux consigam fazer a autenticação no Active Directory.

No processo veremos como usar um plugin que trará ao Active Directory a capacidade de autenticar estações Unix/Linux.  Eu sei que existem outras soluções possíveis, incluindo o uso do Services For Unix da própria Microsoft (SFU), disponível para download gratuitamente (veja referências no final do documento).  Mas por hora, vamos usar o plugin, que é pequeno de tamanho ( AD4Unix=2.7MB /  SFU = 222,8MB)  e simples de instalar. Em uma outra oportunidade, poderemos adicionar informaçãoes sobre o uso do SFU.

O ambiente utilizado para fazer os testes foi uma máquina com processador AMD de 1100Mhz com 512 MB de ram, rodando com o Conectiva 9.0 + updates (kernel 2.4.21), e  usando o software VMware para criar os ambientes virtuais necessários para instalação dos diversos sistemas operacionais: Windows 2000 Server, Fedora Core1 e SuSe 9.2.  

O VMware é realmente fantástico. Sem ele ficaria difícil montar este laboratório com uma máquina apenas.

AVISO IMPORTANTE:  Faça testes primeiro. Não vá sair por aí executando os procedimentos aqui descritos em ambientes de produção.

Sobre o Active Directory

Resumidamnente, o AD é a implementação ldap da Microsoft, constituindo em um novo produto servidor de diretórios.O Active Directory é tecnicamente um servidor LDAP v3, com implementações e alterações feitos pela Microsoft, o que o faz um pouco fora dos padrões normais do LDAPv3. Com este princípio em mente, podemos usar algum recurso ( por exemplo, o plugin ) para extender os schemas do AD de modo a suportar  a autenticação Unix/Linux.


Sobre o AD4Unix Plugin

O MKS AD4Unix é uma extensão plugin para o Active Directory Server da Microsoft, que possibilita que as informações de autenticação Unix e informaçãoes do usuário sejam armazenadas no Active Directory.O AD4Unix inclue uma atualização de schema, e uma extensão para o Microsoft User & Group Manager ( parte da interface de administração do Active Directory, que é por sua vez parte do Microsoft Management Console).

O objetivo principal de AD4Unix é criar um banco de dados de contas unificado para Windows e servidores Unix/Linux via Active Directory. Isto é o que efetivamente habilita a autenticação multi-plataforma usando o Active Directory.

O AD4Unix é na verdade um único arquivo .MSI ( Microsoft Installer) que pode ser instalado diretamente em um servidor Windows 2000.

O AD4Unix foi escrito por Martin Batourine, da Faculdade de Arquitetura, Paisagem e Design na Universidade de Toronto / Canadá.

A ele nossos agradecimentos.



Arregaçando as mangas...

OK, chega de teorias, vamos começar a parte divertida.


PARTE 1


Preparando o Windows 2000 Server


Nesta parte iremos mostrar as telas da instalação dos componenters necessários no Windows 2000 Server. Mais detalhes podem ser obtidos consultando a seção referências no fim do documento.


Instalando o High Encryption Pack:

Uma instalação padrão do Windows 2000 Server vem com criptografia de apenas 56 bits. Neste caso vamos ter que aumentar para 128 bits instalando o pacote High Encryption Pack que você pode obter no site da Microsoft. Depois de instalar o High Encryption Pach, será preciso re-inicializar o servidor.

Podemos conferir o tipo de criptografia na tela de ajuda do Inernet Explorer, como na figura abaixo.
 


Tela mostrando que o nosso servidor já está com criptografia de 128 bits.



Configurar o Active Directory:

Agora vamos instalar e configurar o Active Directory em nosso servidor Windows 2000 Server. No menu do windows, vá em Administrative tools e ache a opção "Configure Your Server".



Selecionamos "Active Directory" no menu da esquerda. Temos de descer a tela um pouco até chegar no botão de "start"

Clique no botão/link  de "Start" para iniciar o programa de instalação do Active Directory.

A tela do instalador do Active Directory.  Cliue em "Next".

Clique em "Next"

Clique em "Next".

Clique em "Next".

Entre seu nome DNS ( se não tiver, invente um), depois clique em "Next".

Informe um nome NetBIOS ( netbios name é aquele que aparece no ambiente de rede)  e depois clique em "Next".

Clique em "Next".

Clique em "Next".

Clique em OK, pois vamos usar nosso próprio servidor de DNS.

Clique em "Next". O próprio instalador irá cuidar de instalar e configurar o DNS para este domínio. Lembre-se de despois reconfigurar as propriedades do TCP/IP para colocar o IP do servidor como entrada de DNS.
Desta forma, se você der um "ping win2000.servtec.com.br"  ele irá responder.

Clique em "Next".

Aqui você precisa informar uma senha para o Administrator do AD. Depois, clique em "Next".

Clique em "Next".

Instalação concluída, clique em "Finish".

Clique em "Restart Now" para re-inicializar o servidor.


Permitir Atualizações do Schema no Controlador do Domínio:

Clique para ampliar
Precisamos executar o comando acima para permitir que atualizações possam ser feitas nos Schemas do Controlador de Domínio.


Criar um MSC para gerenciamento do Schema :

 ( na verdade msc é o tipo de arquivo, ex: schema.msc.  Também conhecidos como Microsoft Management Consoles, ou MMC )


Clique em Start => Run, digite MMC e dê OK.

A tela inicial da console MMC.

Clique em "console" no menu e selecione "Add/Remove Snap-in".

Selecione "Active Directory Schema" e clique em "Add". Depois clique em "Close".

Clique em OK.

Pronto, nosso Active Directory Schema foi adicionado, já podemos seguir em frente.


Escolher o Controlador de Domínio no qual Queremos Atualizar o Schema:


Com o botao direito do mouse sobre "Active Directory Schema", selecione "Change Domaind Controller".

Entre seu DNS aqui, como no exemplo.


Permitir Atualização no Controledor de Domínio:

Agora precisamos permitir que atualizações possam ser feitas.


Clique com o botao direito sobre "Active Directory Schema" e escolhe "Operations Master"

Marque a opção "The Schema may be modified on this Domain Controller". Clique em OK.


Instalar o ADS4Unix Plugin:

OK. Neste ponto já estamos prontos para fazer a instalação do ADS4Unix Plugin.  Veja nas referências no final do do documento onde baixar o plugin.

Localize a pasta onde baixou o software e clique duas vezes sobre ele.


A tela do programa de instalação. Clique em "Next".

Aqui devemos aceitar os termos da licensa. Embora o software seja funcional, o autor não se responsabiliza pelo uso deste software. Use por sua conta e risco.

Clicar "Next"

Clicar "Next"

Clicar "Install"

O software do plugin começa a instalar e aparecem algumas telas com mensagens e algumas perguntas. Podemos confirmar todas elas, clicando em OK ou em YES, conforme o caso.

Clique em OK.

Clique em YES.

Clique em OK.

Clique em YES.

Aparece uma tela com algumas mensagens. Ela vai fechar sozinha.

Fim da instalação. É só clicar em "Finish" para encerrar.



Configurando o ADS4Unix Plugin:

Agora precisamos configurar O plugin.


A partir do menu Start/Iniciar do Windows, podemos acessar o programa de configuração do plugin.

A tela do configurador do plugin. Clique em "Settings for Plugins" .

Aqui precisamos adicionar um nome em "Allowed NIS". Pode ser qualque nome, não importa, pois na verdade não estamos usando NIS. Em seguida clique no botão de OK.


Adicionando Usuários pelo Active Diretory:

Vamos dar uma olhada nas propriedades de um novo usuário.


A tela do Active Directory Users and Groups. Selecione um usuário e entre nas propriedades dele.

Aqui estamos vendo as propriedades do usuário uteste2.  Observem a aba "Unix Settings".  Esta nova aba também  irá aparecer para os usuários já existentes. Basta que você configure, para que estes usuários possam autenticar em desktops clientes Linux.

O NIS ven desabilitado. Precisamos mudar para o nome do NIS que definimos antes, e ao fazê-lo aparece uma mensagem de erro. Mas podemos seguir em frente sem problemas.

Aqui precisamos ajustar o UID para um valor acima de 1000 e definir o Shell como /bin/bash.


Grupos do Active Directory:


Nos grupos já existentes ou nos que você acrescentar, agora vai aparecer uma nova aba "Unix Settings", onde você define algumas propriedades relevantes aos clientes Unix/Linux.

Propriedades da aba "Unix Settings" do grupo "Domain Users".



PARTE 2

Configurando os clientes Linux

Nesta parte iremos mostrar como fizimos para configurar clientes Linux para fazer a autenticação direto no AD. Como clientes usamos o Fedora Core 1  e o SuSe 9.2. Os procedimentos são bastante simples e poderiam ser facilmente re-adaptados para qualquer distribuição.

O que é necessário:

Basicamente os pacotes necessários são o openldap-client  e o nss_ldap.  Nas telas abaixo, poderemos ver os pacotes instalados em cada sistema usado.


Ferramentas de Configuração:

Tanto o Fedora quanto o SuSe tem ferramentas que permitem uma configuração de modo bem simples.


Ferramenta YAST2 do SuSe, mostrando a parte de configuração do cliente LDAP.

Ferramenta authconfig-gtk do Fedora, mostarndo a parte de configuração do cliente LDAP. No modo texto tem também o authconfig.


Um detalhe que devemos ficar atentos, é que estas ferramentas  "pensam" que voçê vai usar um servidor OpenLDAP, mas como vamos usar o Active Directory e este tem algumas diferenças de implementação, ainda precisaremos ajustar alguns arquivos de configuração manualmente.

Basicamente, voçê vai precisar renomear o arquivo /etc/ldap.conf e criar outro com o conteúdo mostrado abaixo, ajustando os dados de acordo com o seu ambiente (endereço IP do host e base DN ).


Arquivos de configuração envolvidos:

SUSE 9.2
FEDORA CORE 1
/etc/ldap.conf
host 192.168.100.130
#base dn=Users,dc=servtec,dc=com,dc=br
binddn cn=uteste4,cn=Users,dc=servtec,dc=com,dc=br
bindpw copa98
scope sub
ssl no

nss_base_passwd cn=Users,dc=servtec,dc=com,dc=br?sub
nss_base_shadow cn=Users,dc=servtec,dc=com,dc=br?sub
nss_base_group cn=Users,dc=servtec,dc=com,dc=br?sub

nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName

#nss_map_attribute uidNumber msSFUUidNumber
#nss_map_attribute gidNumber msSFUUidNumber
#nss_map_attribute loginShell msSFULoginShell
#nss_map_attribute gecos name

nss_map_attribute userPassword msSFUPassword
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_objectclass posixGroup Group
nss_map_attribute uniqueMember member
nss_map_attribute cn sAMAccountName

pam_login_attribute sAMAccountName
pam_filter objectclass=User
#pam_member_attribute msSFUPosixMember
#pam_groupdn cn=unixusergroup,dc=servtec,dc=com,dc=br
pam_password ad



/etc/ldap.conf
host 192.168.100.130
#base dn=Users,dc=servtec,dc=com,dc=br
binddn cn=uteste4,cn=Users,dc=servtec,dc=com,dc=br
bindpw copa98
scope sub
ssl no

nss_base_passwd cn=Users,dc=servtec,dc=com,dc=br?sub
nss_base_shadow cn=Users,dc=servtec,dc=com,dc=br?sub
nss_base_group cn=Users,dc=servtec,dc=com,dc=br?sub

nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName

#nss_map_attribute uidNumber msSFUUidNumber
#nss_map_attribute gidNumber msSFUUidNumber
#nss_map_attribute loginShell msSFULoginShell
#nss_map_attribute gecos name

nss_map_attribute userPassword msSFUPassword
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_objectclass posixGroup Group
nss_map_attribute uniqueMember member
nss_map_attribute cn sAMAccountName

pam_login_attribute sAMAccountName
pam_filter objectclass=User
#pam_member_attribute msSFUPosixMember
#pam_groupdn cn=unixusergroup,dc=servtec,dc=com,dc=br
pam_password ad



/etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#       compat                  Use compatibility setup
#       nisplus                 Use NIS+ (NIS version 3)
#       nis                     Use NIS (NIS version 2), also called YP
#       dns                     Use DNS (Domain Name Service)
#       files                   Use the local files
#       db                      Use the /var/db databases
#       [NOTFOUND=return]       Stop searching if not found so far
#
# For more information, please read the nsswitch.conf.5 manual page.
#

# passwd: files nis
# shadow: files nis
# group:  files nis

passwd: files ldap
shadow: files ldap
group:  files ldap

#passwd:    compat
#group:    compat

hosts:    files lwres dns
networks:    files dns

services:    files
protocols:    files
rpc:    files
ethers:    files
netmasks:    files
netgroup:    files
publickey:    files

bootparams:    files
automount:    files nis
aliases:    files
passwd_compat:    ldap
group_compat:    ldap


/etc/nsswitch.conf
#
# /etc/nsswitch.conf
#
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry '[NOTFOUND=return]' means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
#    nisplus or nis+        Use NIS+ (NIS version 3)
#    nis or yp        Use NIS (NIS version 2), also called YP
#    dns            Use DNS (Domain Name Service)
#    files            Use the local files
#    db            Use the local database (.db) files
#    compat            Use NIS on compat mode
#    hesiod            Use Hesiod for user lookups
#    [NOTFOUND=return]    Stop searching if not found so far
#

# To use db, put the "db" in front of "files" for entries you want to be
# looked up first in the databases
#
# Example:
#passwd:    db files nisplus nis
#shadow:    db files nisplus nis
#group:     db files nisplus nis

passwd:     files ldap
shadow:     files ldap
group:      files ldap

#hosts:     db files nisplus nis dns
hosts:      files dns

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files    

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files ldap
rpc:        files
services:   files ldap

netgroup:   files ldap

publickey:  nisplus

automount:  files ldap
aliases:    files nisplus



/etc/openldap/ldap.conf
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE    dc=example, dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT    12
#TIMELIMIT    15
#DEREF        never
TLS_REQCERT    allow
host    192.168.100.130
base    dc=servtec,dc=com,dc=br


/etc/openldap/ldap.conf
# $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9
#2000/09/04 19:57:01 kurt Exp $
#
# LDAP Defaults
#

# See ldap.conf(5) for details
# This file should be world readable but not world writable.

#BASE    dc=example, dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666

#SIZELIMIT    12
#TIMELIMIT    15
#DEREF        never
HOST 192.168.100.130
BASE dc=servtec,dc=com,dc=br


/etc/pam.d/login
#%PAM-1.0
auth     requisite    pam_unix2.so        nullok #set_secrpc
auth     required    pam_securetty.so
auth     required       pam_nologin.so
#auth     required    pam_homecheck.so
auth     required       pam_env.so
auth     required    pam_mail.so
account  required       pam_unix2.so
password required    pam_pwcheck.so        nullok
password required       pam_unix2.so        nullok use_first_pass use_authtok
session  required       pam_unix2.so        none # debug or trace
session  required       pam_limits.so
session  required    pam_resmgr.so
session  required    /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=022


/etc/pam.d/login
#%PAM-1.0
auth       required    pam_securetty.so
auth       required    pam_stack.so service=system-auth
auth       required    pam_nologin.so
account    required    pam_stack.so service=system-auth
password   required    pam_stack.so service=system-auth
session    required    pam_stack.so service=system-auth
session    optional    pam_console.so
session    required     /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0022



NOTA: a linha  "session  required    /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=022"  nos arquivos /etc/pam.d/login  serve criar o diretório home dos usuários.  Para o ambiente gráfico, você também deve checar/alterar o arquivo /etc/pam.d/gdm.


Telas do Login:

Algumas telas mostrando o processo de autenticação do usuário no Active Directory.

SuSe 9.2
Clique para ampliar
Tela mostrando o processo de login. Note que o diretório home do usuário será criado caso não exista.
Clique para ampliar
Aqui estamos mostrando os pacotes ldap instalados no SuSe.
Fedora Core 1

Tela mostrando o processo de login. Note que o diretório home do usuário será criado caso não exista.

Aqui estamos listando os pacotes ldap instalados no Fedora Core 1.





PARTE 3

Trabalhando com o Active Directory

 
Alguns truques ;-)

Uma das primeiras coisas que você deve aprender sobre o Active Directory é que ele não aceita pesquisa anônimas, ou seja, para fazer algum tipo de busca tem que estar autenticado (bind)  com usuário e senha.  

O resultado prático disto é que você deve ou criar um usuário específico para pesquisar na base do AD, ou configurar o AD para aceitar pesquisas anônimas (eu tentei isto mas não deu certo ).

Outra coisa que também deve aprender é que o Active Directory tem algumas diferenças de implementação em relação a outras soluções de Diretórios existentes. Ou seja, tem alguns campos extras que devem ser colocados no arquivo de configuração (/etc/ldap.conf ) para que os clientes possam mapear os campos corretamente.

Comandos úteis:

Os comandos abaixo server para fazer pesquisas na Active Directory ou qualquer outro servidor ldap, já que sao comandos básicos do pacote openldap-clients. Abra uma console, e digite os comandos para ver como funcionam:
( onde tem "dc=servtec,dc=com,dc=br" coloque seu próprio base dn)
 
ldapsearch -x

ldapsearch -x -D "cn=Administrator, cn=Users, dc=servtec,dc=com,dc=br"  -W

ldapsearch -x -D "cn=Administrator, cn=Users, dc=servtec,dc=com,dc=br"  -W  "sAMAccountName=uteste"


Ferramentas:

Support Tools: LDP.EXE

No CD original do Windows 2000 Server, tem uma pasta  SUPPORT que contém algumas ferramentas interessantes, mas que não são instaladas durante a instalação do windows. Uma delas, é o pacote Microsoft Support Tools, que fica na pasta SUPPORT/TOOLS do cd do windows.  Este pacote tem algumas ferramentas para  gerenciar e fazer pesquisas no Active Directory.


Preparando para instalar o pacote Support Tools. Basta clicar no SETUP.EXE.

Aqui vemos o menu do windows mostrando as entradas do Microsoft Support Tools.

E aqui vemos a ferramenta LDP, que você pode usar para fazer buscas ou testes no AD.


Softerra LDAPBrowser

Uma outra ferramenta muito boa, é o LDAPBrowser da Softerra. (ver referências abaixo)


Aqui vemos a tela principal, mostrando toda a estrutura do Active Directory.

A configuração para poder acessar o Active Directory.

Como o Active Directory não aceita pesquisas anônimas, precisamos entrar aqui o usuário Administrator ( ou outro) para podermos visualizar o conteúdo do Diretório. Note que entramos a referência completa do Administrator, e não apenas seu nome.


GQ

O GQ é outra ferramenta do Linux, abstante usada para fazer consultas a uma base ldap. Neste caso também podemos configurá-la para acessar ao Active Directory.


Tela do GQ mostrando as entradas do Active Directory.


A configuração necessária par o GQ acessar o Active Directory.




Palavra Final


Se você chegou até aqui, parabéns!  Acaba de descobrir que nunca foi tão fácil integrar estações de trabalho (desktops ) Linux em ambientes de rede Windows.

LDAP é show!    :-)

Espero que tenham gostado e que este tipo de informação possa ser útil de alguma forma.


Pra pensar: "Não reclame, faça!"



Clovis Sena
Analista de Suporte Técnico
csena2k2@fisepe.pe.gov.br
Recife - PE
28/12/2004


Referências

1 - ADS4UNIX Plugin  ==> Você pode baixar no  link1 e link2  e link3
2 - Active Directory and Linux
3 - Unite your Linux and Active Directory authentication
4 - MS Services For Unix
5 - Softerra LDAP Browser
6 - Usando o LDP
7 - Extending the Active Directory Schema To Track Custom Info
8 - Understanding Active Directory Services
9 - Windows 2000 High Encryption Pack
10 - GQ LDAP Browser



;-)