Linux autenticando no Active Directory com Samba/Kerberos/Winbind – Ubuntu 12.04

Estou utilizando para a confecção deste tutorial a necessidade que surgiu de ter um servidor de autenticação para as máquinas clientes da nossa rede interna. Para tanto, estamos usando como servidor central o Windows Server 2008 e o Active Directory como gerenciador de domínio. Vale salientar que não iremos aqui abordar a instalação ou configuração do servidor de AD, considerando que o mesmo já existe na rede e está configurado com seus usuários, grupos e permissões.

Todas as configurações feitas nesse tutorial foram testadas no Ubuntu Precise 12.04

Inicialmente iremos instalar os pacotes necessários para o desenvolvimento desse projeto:

  • Samba
  • Winbind
  • Kerberos

# apt-get install samba winbind krb5-clients krb5-user

Após as instalações, iremos editar os arquivos de configuração do Kerberos e do Samba:

# vim /etc/samba/smb.conf

[global]
workgroup = NOME_DO_WORKGROUP // Pode ser o nome do workgroup da rede
server string = Servidor AD
netbios name = nome_da_maquina // Sera o nome desse desktop que voce esta configurando
realm = DOMINIO.LOCAL // nome do dominio local
log file = /var/log/samba/samba.log
os level = 2
preferred master = no
max log size = 50
debug level = 1
security = ads
encrypt passwords = yes
socket options = SO_KEEPALIVE TCP_NODELAY
password server = IP_DO_SERVIDOR_AD // ex 192.168.0.1
allow trusted domains = yes
idmap uid = 1000-20000
idmap gid = 1000-20000
winbind separator = +
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
#winbind refresh tickets = yes
template shell = /bin/bash
template homedir = /home/%D/%U
client use spnego = yes
domain master = no
restrict anonymous = 2

Uma vez configurado o arquivo do samba, vamos aproveitar para configurar o arquivo do Kerberos.

# vim /etc/krb5.conf


[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMINIO.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24000

[realms]
DOMINIO.LOCAL = {
kdc = IP_DO_SERVIDOR_AD // FQDN do servidor de autenticacao
admin_server = IP_DO_SERVIDOR_AD:749 // FQDN do servidor de autenticacao
default_domain = IP_DO_SERVIDOR_AD //
}

[domain_realm]
.dominio.local = DOMINIO.LOCAL //dominio completo
dominio.local = DOMINIO.LOCAL | // dominio completo

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

Configurado o Samba e o Kerberos, vamos adicionar a máquina ao domínio:

# kinit Usuario@DOMINIO.LOCAL // Esse comando cria um ticket de comunicação com o servidor de AD

Para verificar se o ticket está ativo usa-se o comando:

# klist

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: principal@DOMINIO.LOCAL

Valid starting Expires Service principal
06-09-2012 11:19:15 07-09-2012 01:29:45 krbtgt/DOMINIO.LOCAL@DOMINIO.LOCAL

Agora vamos adicionar a máquina no AD

# net ads join DOMINIO.LOCAL -U <usuario_admin> // Usuario deve ser um usuario admin do Active Directory. Ex Adminitrator@DOMINIO.LOCAL

O resultado deverá ser parecido com esse:

Using short domain name – DOMINIO.LOCAL
Joined 'nome_da_maquina' to realm 'DOMINIO.LOCAL'

Caso haja algum erro na mensagem relativo ao DNS, adicione uma linha no arquivo de hosts como segue abaixo:

# vim /etc/hosts

192.168.0.1 adservidor.dominio.local adservidor

Podemos então testar se o computador foi adicionado e a autenticação foi feita com sucesso

# net ads testjoin

A saída deverá ser:

Join is OK

Precisamos também configurar o Winbind. Edite o arquivo /etc/nsswitch.conf

# vim /etc/nsswitch.conf

Altere as linhas e deixe assim:

passwd: compat winbind
group: compat winbind
shadow: compat

hosts: files dns wins

Vamos agora testar se o AD está configurado com o winbind

# wbinfo -u // vai retornar a lista de usuários do Active Directory

# wbinfo -g // vai retornar a lista de grupos do Active Directory

Agora vamos testar se o módulo nsswitch está configurado e se comunicando normalmente com o AD

# sudo getent passwd // esse comando deverá mostrar uma lista com todos os usuários locais e todos os usuários do Active Directory

# sudo getent group // esse comando deverá mostrar a lista com todos os grupos locais e todos os usuários do Active Directory

PAM.D

Precisamos fazer uns pequenos ajustes também no PAM.D

# vim /etc/pam.d/common-session

Adicione a linha:

session required pam_mkhomedir.so umask=0022 skel=/etc/skel

Isso vai fazer com que ele crie automaticamente o diretório do usuário no /home assim que ele logar pela primeira vez

Precisamos também criar um diretório para os usuários do domínio:

# mkdir /home/DOMINIO.LOCAL

Assim, terminamos a maioria das configurações. Uma pequena ressalva é que os tickets do kerberos não dão refresh automáticamente, o que faz com que, ao reiniciar a máquina, seja preciso reiniciar o kinit para que ele gere um novo ticket. No meu caso, eu criei uma keytab usando a ferramente ktutil do kerberos para que um script possa chamar o refresh na inicialização da máquina sem a necessidade de se colocar uma senha no script, porém, esse tutorial eu farei em outra parte.

Anúncios

5 pensamentos sobre “Linux autenticando no Active Directory com Samba/Kerberos/Winbind – Ubuntu 12.04

  1. Fernando Verza disse:

    Excelente ! Obrigado estava a procura dessas configurações.

  2. Eduardo disse:

    Só tive problemas no item workgroup = NOME_DO_WORKGROUP;
    Esse item deve ser o nome do DOMINIO sem o .COM
    E na hora do comando net ads join DOMINIO.LOCAL -U , continuo tendo erro de DNS, mesmo adicionando o servidor e alias no arquivo hosts.
    Depois disso tive sucesso !

  3. Rapaz fiz tudo que vc falou e está dando um erro assim:

    Failed to join domain: failed to lookup DC info for domain ‘DATACENTER.MT’ over rpc: NT_STATUS_CONNECTION_RESET

    poderia me ajudar?

  4. root@Anambe-roxo:~# net -d1 ads join DATACENTER.MT -U eduardoscheidet
    WARNING: The “idmap uid” option is deprecated
    WARNING: The “idmap gid” option is deprecated
    Enter eduardoscheidet’s password:
    libnet_Join:
    libnet_JoinCtx: struct libnet_JoinCtx
    in: struct libnet_JoinCtx
    dc_name : NULL
    machine_name : ‘ANAMBE-ROXO’
    domain_name : *
    domain_name : ‘DATACENTER.MT’
    account_ou : NULL
    admin_account : ‘eduardoscheidet’
    machine_password : NULL
    join_flags : 0x00000023 (35)
    0: WKSSVC_JOIN_FLAGS_IGNORE_UNSUPPORTED_FLAGS
    0: WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME
    0: WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT
    0: WKSSVC_JOIN_FLAGS_DEFER_SPN
    0: WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED
    0: WKSSVC_JOIN_FLAGS_JOIN_UNSECURE
    1: WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED
    0: WKSSVC_JOIN_FLAGS_WIN9X_UPGRADE
    0: WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE
    1: WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE
    1: WKSSVC_JOIN_FLAGS_JOIN_TYPE
    os_version : NULL
    os_name : NULL
    create_upn : 0x00 (0)
    upn : NULL
    modify_config : 0x00 (0)
    ads : NULL
    debug : 0x01 (1)
    use_kerberos : 0x00 (0)
    secure_channel_type : SEC_CHAN_WKSTA (2)
    failed negprot: NT_STATUS_CONNECTION_RESET
    libnet_Join:
    libnet_JoinCtx: struct libnet_JoinCtx
    out: struct libnet_JoinCtx
    account_name : NULL
    netbios_domain_name : NULL
    dns_domain_name : NULL
    forest_name : NULL
    dn : NULL
    domain_sid : NULL
    domain_sid : (NULL SID)
    modified_config : 0x00 (0)
    error_string : ‘failed to lookup DC info for domain ‘DATACENTER.MT’ over rpc: NT_STATUS_CONNECTION_RESET’
    domain_is_ad : 0x00 (0)
    result : WERR_NETNAME_DELETED
    Failed to join domain: failed to lookup DC info for domain ‘DATACENTER.MT’ over rpc: NT_STATUS_CONNECTION_RESET

  5. Adivar disse:

    Boa tarde!
    Fiz conforme indicado e meu linux foi adicionado ao dominio, o comando “wbinfo -g” mostra os grupos do AD, o comando “wbinfo -u” mostra os usuários do AD normalmente, porém o comando “getent passwd” não mostra os usuários do domínio, mostra somente usuários locais. Estou usando Ubuntu 13.10.
    Desde já agradeço a atenção.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: