Ubuntu WindowsEste tutorial descreve o caminho das pedras para incluir uma estação/servidor Linux Ubuntu em um domínio Active Directory Windows (2000, 2003 ou 2008).
A solução utiliza Samba e Winbind e mostra os passos para que usuários possam se logar na estação Linux usando suas credenciais do Active Directory (AD). É sugerida ainda a criação de um grupo no AD para incluir usuários com privilégios de administrador de estações Linux podendo usar o sudo para executar comandos como root.

Este post faz parte do tutorial Proxy Squid no Ubuntu com autenticação NTLM no Windows 2008 e regras baseadas em Grupos do AD.

Pré-Requisitos

  • Estação/Servidor com Linux Ubuntu 10.04 LTS ou superior instalado.
  • Servidor de DNS configurado (/etc/resolv.conf) e apontando para um servidor de DNS do domínio Active Directory
  • Privilégios de administrador (root) no Linux instalado.
  • Domínio Active Directory baseado em Windows 2000, 2003 ou 2008 já instalado e operando.
  • Credenciais com privilégios suficientes para inclusão de computador no domínio AD pré-existente.
  • Opcional: credenciais com privilégios para criação de grupos no AD
O servidor linux pode ter IP fixo ou DHCP. É claro que para utilização como servidor Squid é recomendável a utilização de IP fixo. Além disso é necessário que o seu(s) servidor(es) DNS esteja(m) corretamente configurado(s) no arquivo /etc/resolv.conf.

Tutorial

Recomendo atualizar seu Ubuntu, antes de começar, utilizando os comandos abaixo:

sudo apt-get update
sudo apt-get dist-upgrade

Reinicie o computador para que o novo kernel seja atualizado (se necessário).

sudo reboot

Instale os pacotes libkrb5-3, krb5-config, samba, winbind e ntp utilizando o comando abaixo:

sudo apt-get install libkrb5-3 krb5-config samba winbind ntp

Pare os serviços samba e winbind:

sudo service smbd stop
sudo service winbind stop

Limpe a pasta de cache do samba:

sudo rm -rf /var/lib/samba/*

Configure o Kerberos alterando o conteúdo do arquivo /etc/krb5.conf pelo apresentado abaixo.

Lembre-se de substituir DOMINIO.COM.BR e dominio.com.br pelo nome FQDN de seu domínio Active Directory nas linhas em destaque. Troque também servidor pelo nome DNS de um servidor controlador de domínio de sua floresta.

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

[realms]
	DOMINIO.COM.BR = {
		kdc = servidor.dominio.com.br:88
		admin_server = servidor.dominio.com.br:749
		default_domain = dominio.com.br
	}

[domain_realm]
	.dominio.com.br = DOMINIO.COM.BR
	dominio.com.br = DOMINIO.COM.BR

[login]
	krb4_convert = true
	krb4_get_tickets = false

[logging]
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmin.log
        default = FILE:/var/log/krb5lib.log

Edite o arquivo /etc/ntp.conf e substitua a linha server informando o nome de seu domínio. Você pode apontar para um servidor NTP de sua rede ou outro qualquer de preferência.

server dominio.com.br

Reinicie o serviço ntp e verifique se a data e hora estão corretos:

sudo service ntp restart
date

Configure o Samba/Winbind, editando o arquivo /etc/samba/smb.conf e substituindo seu conteúdo conforme abaixo.

Lembre-se de substituir HOSTNAME pelo nome de seu servidor linux e alterar DOMINIO, DOMINIO.COM.BR e dominio.com.br para o FQDN de seu domínio nas linhas em destaque. Troque também servidor pelo nome DNS de um servidor controlador de domínio de sua floresta..

[global]
	realm = DOMINIO.COM.BR
	workgroup = DOMINIO
	netbios name = HOSTNAME
	server string = %h server
	security = ads
	allow trusted domains = no
	idmap config DOMINIO: default = yes
	idmap config DOMINIO: backend = rid
	idmap config DOMINIO: readonly = yes
	idmap config DOMINIO: range= 1000000-10000000
	idmap alloc config: range = 1000000-10000000

	idmap uid = 1000000-10000000
	idmap gid = 1000000-10000000

	template shell = /bin/bash
	template homedir = /home/%U
	winbind use default domain = yes
	winbind enum users = yes
	winbind enum groups = yes
	winbind nested groups = yes

	load printers = no
	domain master = no
	preferred master = no
	domain logons = no
	wins support = no
	wins proxy = no
	dns proxy = no
	password server = servidor.dominio.com.br

#Compartilhamento Home
[homes]
	comment = Compartilhamento Home
	browseable = no
	writable = yes
	read only = no
	create mask = 0664
	directory mask = 0775

Substitua o conteúdo do arquivo /etc/nsswitch.conf pelo abaixo, para configurar o Linux para considerar o winbind para senhas e grupos.

passwd:         compat winbind
group:          compat winbind
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Para que estas configurações (nsswitch) tenham efeito, execute o comando ldconfig:

sudo ldconfig

Ajuste o nome do host no arquivo /etc/hosts conforme abaixo, alterando nome-do-host e dominio.com de acordo com o hostname de seu Linux e o FQDN de seu domínio:

127.0.0.1	localhost
127.0.0.1	nome-do-host.dominio.com	nome-do-host

Se o computador estiver utilizando DHCP, ajuste o nome do host para que seja registrado automaticamente no DNS, incluindo as linhas abaixo no arquivo /etc/dhcp3/dhclient.conf. Lembre-se de alterar nome-do-host e dominio.com de acordo com o hostname de seu Linux e o FQDN de seu domínio.

send host-name "nome-do-host.dominio.com";
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope, interface-mtu;

Adicione o Linux no dominio executando o comando abaixo. Substitua usuário pela sigla de um usuário com privilégios para adicionar computadores no domínio.

sudo net ads join -U usuario

Sua senha será solicitada. O resultado da execução será algo semelhante ao abaixo:

Enter usuarios's password:
Using short domain name -- DOMINIO
Joined 'HOSTNAME' to realm 'dominio.com.br'
DNS update failed!

Não se preocupe com a mensagen DNS update failed!. Ela aparecerá se o seu dominio não estiver configurado para aceitar atualizações de DNS não autenticadas. Simplesmente ignore esta mensagem.

Inicie os serviços samba e winbind:

sudo service smbd start
sudo service winbind start

Verifique se a resolução de nomes esta funcionando corretamente. Caso não esteja reveja os passos realizados acima.

wbinfo –u
wbinfo –g
wbinfo –i usuario

Se tudo está funcionando corretamente, configure a autenticação do Linux, alterando os arquivos abaixo. Provavelmente o conteúdo já estará correto. Apenas certifique-se de que está tudo OK e altere o que estiver diferente.
Alternativamente você pode fazer estas configurações de forma automática executando o comando abaixo:

sudo pam-auth-update

Conteúdo do arquivo /etc/pam.d/common-account:

account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so
account requisite                       pam_deny.so
account required                        pam_permit.so

Conteúdo do arquivo /etc/pam.d/common-auth:

auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required 

Conteúdo do arquivo /etc/pam.d/common-session. Será necessário incluir a linha destacada, conforme abaixo. Esta alteração irá criar a pasta home do usuário automaticamente no primeiro logon.

session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session required                        pam_unix.so
session required                        pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional                        pam_winbind.so

Se você quiser restringir o acesso via SSH para um grupo de usuários, crie um grupo global no AD e inclua os usuários permitidos a acessar o servidor Linux neste grupo, por exemplo administradores_linux. Altere o arquivo /etc/ssh/sshd_config e inclua no final do mesmo a seguinte linha:

AllowGroups admin administradores_linux

O grupo admin é opcional e permite o logon dos usuários locais que estão no grupo admin. Por padrão o primeiro usuário criado no Ubuntu no momento da instalação terá este privilégio.

Como boa prática de segurança, evite que o root faça logon via ssh, atlerando a linha abaixo no arquivo /etc/ssh/sshd_config:

PermitRootLogin no

Se desejar você pode incluir a linha abaixo no arquivo /etc/sudoers para permitir que os usuários membros do grupo administradores_linux possam executar comandos com privilégios de root.

%administradores_linux ALL=(ALL) ALL

Espero que o artigo tenha sido útil. Em caso de problemas é só postar nos comentários.

-

Referências

- Ubuntu 8.04 autenticando no AD do Windows Server 2003
- Integrating Squid and Samba3 with NTLM authentication
- Integrando autenticação do Squid ao Active Directory