Instalando, Configurando e Provisionando o Samba4 como Controlador de Domínio Active Directory (AD)
Autor: Reginaldo | Publicado: 2016-12-20T20:00:00-02:00

O presente Howto mostra os procedimentos necessários para instalação e configuração do Samba 4 como controlador de domínio Active Directory (AD) realizada nas distros Debian 8 e CentOS 7. 

Observação: Recomendado usar a versão 4.4.5 por ser a mais estável no momento em ambiente de produção.

1. Configuração do servidor Samba 
Hostname: samba4dc 
Tipo de Serviço (Role): Domain Controler 
Endereço IP: 192.168.1.4 
Domínio: saitam.int 
DNS Cliente: 192.168.1.4 
Gateway default: 192.168.1.1 

1.1 Criar o mapeamento do servidor 
# vim /etc/hostname 
samba4dc 

# vim /etc/hosts 

127.0.0.1 localhost.localdomain localhost 
192.168.1.4 samba4dc.saitam.int samba4dc 
 

# /etc/init.d/hostname.sh restart  

2. Instalação dos pacotes pré-requisitos para o Samba4 
No Debian: 

# apt-get install acl attr autoconf bison gcc g++ debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev libcups2-dev libgnutls28-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpopt-dev libreadline-dev perl perl-modules pkg-config python-all-dev python-dev python-dnspython python-crypto xsltproc zlib1g-dev libgpgme11-dev python-gpgme python-m2crypto winbind libpam-winbind libnss-winbind
 
Durante o setup do Kerberos, preencha conforme solicitado 
Reino por omissão do Kerberos versão 5: SEUDOMINIO.INT 
No meu caso, coloquei SAITAM.INT 

Servidores Kerberos para seu realm: 127.0.0.1 

Servidor administrativo para seu realm Kerberos: 127.0.0.1 

No CentOS: 

# yum install perl gcc attr libacl-devel libblkid-devel gnutls-devel readline-devel python-devel gdb pkgconfig krb5-workstation zlib-devel setroubleshoot-server libaio-devel setroubleshoot-plugins policycoreutils-python libsemanage-python perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Test-Base popt-devel libxml2-devel libattr-devel keyutils-libs-devel cups-devel bind-utils libxslt docbook-style-xsl openldap-devel autoconf python-crypto pam-devel  

3. Download e instalação do Samba4 

# mkdir /opt/samba4 && cd /opt/samba4 
# wget -c "https://download.samba.org/pub/samba/stable/samba-4.4.5.tar.gz" 
# tar -xzvf  samba-4.4.5.tar.gz 
# cd samba-4.4.5 
 
Checa as dependências 
# ./configure 
'configure' finished successfully (7m45.311s)  

Se ocorrer OK no passo anterior, execute o make para compilação 
# make  
No meu caso em Debian 8.5 ocorreu o seguinte erro abaixo no final da compilação.
Build failed: -> task failed (err #139): {task: manpages/smb.conf.5 smb.conf.5.xml,parameters.all.xml -> smb.conf.5}  

Depois de uma pesquisa, descobri que era o bug do pacote docbook-xsl  na versão 1.78.1+dfsg-1, a solução foi remover esse pacote via APT, fazer o download deste pacote na versão corrente e instalar via dpkg.
Segue os procedimentos: 

# aptitude remove docbook-xsl 
# cd /opt/samba4 
# wget -c "http://ftp.br.debian.org/debian/pool/main/d/docbook-xsl/docbook-xsl_1.79.1+dfsg-2_all.deb" 
# dpkg -i docbook-xsl_1.79.1+dfsg-2_all.deb 
 
Executar novamente o # make  
NOTA: Esse pacote docbook-xsl está na versão TESTING do Debian até a data de publicação deste post. 

Após o término de compilação 

Waf: Leaving directory `/opt/samba4/samba-4.4.5/bin' 
'build' finished successfully (1h2m12.706s)  
 

A instalação propriamente 
# make install  
Após o término de instalação 

Waf: Leaving directory `/opt/samba4/samba-4.4.5/bin' 
'install' finished successfully (28m41.800s) 



3.1 Adicionar os comandos do Samba no PATH do sistema  
# export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH 

4. Download e instalação do Bind 9.9.9-P4  
Foi necessário instalar o Bind de forma compilada para adicionar parâmetros para o Samba 4 necessários para usar o BIND9_DLZ 
Dependências necessárias: 

# apt-get install libglobus-gssapi-gsi-dev libgssapi-krb5-2 libkrb5-dev 
# mkdir /opt/bind9 && cd /opt/bind9 
# wget -c "http://ftp.isc.org/isc/bind9/9.9.9-P4/bind-9.9.9-P4.tar.gz" 
# tar -xzvf bind-9.9.9-P4.tar.gz 
# cd bind-9.9.9-P4 
#./configure --prefix=/usr/local/bind9 --with-gssapi=/usr/include/gssapi --with-dlopen=yes 
# make 
# make install 


4.1 Adicionar usuário e grupo para o Bind 
# groupadd -g 35 named 

# useradd -u 35 -g named -d /var/named -M -s /sbin/nologin named 
 

4.2 Adicionar os comandos do Bind no PATH do sistema 
#export PATH=/usr/local/bind9/bin/:/usr/local/bind9/sbin/:$PATH  

5. Configuração do servidor DNS  
Como o Bind foi compilado e instalado em /usr/local/bind9 os arquivos de configuração fica em /usr/local/bind9/etc que serve para as distros Debian e CentOS nesse caso. 

5.1 Configuração dos arquivos essenciais do Bind  
Download do servidor DNS Root 

# wget -q -O /var/named/named.root https://www.internic.net/zones/named.root 
# chown root:named /var/named/named.root 
# chmod 640 /var/named/named.root  
  

5.2 Configuração do arquivo named.conf  

# vim /usr/local/bind9/etc/named.conf  

# Global Configuration Options
options {

  auth-nxdomain yes;
  directory "/var/named";
  notify no;
  empty-zones-enable no;

  # IP addresses and network ranges allowed to query the DNS server:
  allow-query {
  127.0.0.1;   192.168.1.0/24;
  };

  # IP addresses and network ranges allowed to run recursive queries:
  # (Zones not served by this DNS server)
  allow-recursion {
  127.0.0.1;   192.168.1.0/24;
  };

  # Forward queries that can not be answered from own zones
  # to these DNS servers:
  forwarders {
  8.8.8.8;
  8.8.4.4;
  };

  # Disable zone transfers
  allow-transfer {
  none;
  };
 };

# Root Servers
# (Required for recursive DNS queries)
zone "." {
  type hint;
  file "named.root";
};

# Forward zone: localhost
zone "localhost" {
  type master;
  file "master/localhost.zone";
};

# Reverse zone: 127.0.0.
zone "0.0.127.in-addr.arpa" {
  type master;
  file "master/0.0.127.zone";
};

# Zona direta domínio rede local saitam.int
zone "saitam.in" {
  type master;
  file "master/db.saitam";
};
# Zona reversa 192.
zone "1.168.192.in-addr.arpa" {
  type master;
  file "master/db.192";
};



5.3 Configuração das zonas direta e reversa 
Zona direta localhost 

# vim /var/named/master/localhost.zone 

$TTL 604800

@ IN SOA localhost. root.localhost. (
  2016121801 ; serial
  604800 ; refresh
  86400 ; retry
  2419200 ; expiry
  604800 ; minimum
  )
;
  NS localhost.

localhost. IN A 127.0.0.1
 

# chown named:named /var/named/master/localhost.zone 

# chmod 640 /var/named/master/localhost.zone 

Zona reversa localhost 

# vim /var/named/master/0.0.127.zone 


$TTL 604800

@ IN SOA localhost. root.localhost. (
  2016121801 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ; Minimum TTL
  )
;
  IN NS localhost.

1 IN PTR localhost.
 

# chown named:named /var/named/master/0.0.127.zone 

# chmod 640 /var/named/master/0.0.127.zone 

Zona direta para domínio saitam.int  
# vim /var/named/master/db.saitam 

;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA saitam.int. root.saitam.int. (
  2016121801 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ) ; Negative Cache TTL
  IN A 192.168.1.4
;
@ IN NS saitam.int.

  IN MX 5 saitam.int.

www IN CNAME saitam.int.
mail IN A 192.168.1.4
router IN A 192.168.1.1
gateway CNAME router
gw CNAME router
 

# chown named:named /var/named/master/db.saitam 

# chmod 640 /var/named/master/db.saitam  

Zona reversa do domínio saitam.int 
# vim /var/named/master/db.192  

;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA saitam.int. root.saitam.int. (
  2016120701 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ) ; Negative Cache TTL
;
@ IN NS saitam.int.
4 IN PTR saitam.int.
1 IN PTR router.saitam.int.
 

# chown named:named /var/named/master/db.192 
# chmod 640 /var/named/master/db.192  

5.4 Configuração do BIND_DLZ 
Incluir o /usr/local/samba/private/named.conf no /usr/local/bind9/etc/named.conf  na linha 1
# vim /usr/local/bind9/etc/named.conf 
include "/usr/local/samba/private/named.conf"; 

5.5 Adicionar a atualização DNS do Kerberos em options  
# vim /usr/local/bind9/etc/named.conf  
Quando provisionar o samba vai criar essa chave e precisa ser adicionada aqui o path completo 

tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";  

5.6 Habilitar o DLZ_BIND 
Edite o arquivo /usr/local/samba/private/named.conf e descomente a linha conforme a versão do Bind instalada, nesse caso o Bind 9.9 

# vim /usr/local/samba/private/named.conf 

 # For BIND 9.9.x
  database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so";


5.7 Adicionar o domínio no arquivo /etc/resolv.conf 

# vim /etc/resolv.conf 

domain saitam.int
search saitam.int
nameserver 192.168.1.4
 

5.8 Iniciar o serviço do Bind  
Estando com os comandos do Bind no PATH do sistema, conforme feito anteriormente pode executar de qualquer lugar no terminal, caso não tenha feito ainda, reveja o procedimento no item 4.2 ou terá que executar os comandos Bind dentro do diretório /usr/local/bind9/bin e /usr/local/bind9/sbin 
# named -u named  

Para parar o serviço do Bind é killall named 

OBS: Fica a seu critério criar um script Shell com opção start|stop no diretório de inicialização no boot. 

6. Instalar e Configurar o NTP  
No Debian:
# apt-get install ntp  

No CentOS: 
# yum install ntp   

# vim /etc/ntp.conf 

# Relogio Local
server 127.127.1.0
fudge 127.127.1.0 stratum 10
 

6.1 Testar o NTP  
# ntpq -p 

remote refid st t when poll reach delay offset jitter

 ns507230.ip-192 137.146.28.85 2 u - 64 1 192.071 2.852 1.057
 vel.itat.io 162.23.41.10 2 u 2 64 1 257.998 0.743 1.999
 alpha.rueckgr.a 131.188.3.222 2 u 4 64 1 247.913 6.323 0.004
 c.st1.ntp.br .ONBR. 1 u 1 64 1 40.179 0.290 0.863
*LOCAL(0) .LOCL. 10 l 5 64 1 0.000 0.000 0.004
 

6.2 Reiniciar o serviço NTP  
Debian: # /etc/init.d/ntp restart  

CentOS:  # systemctl restart ntp  

[ ok ] Restarting ntp (via systemctl): ntp.service. 

7. Proversionar o Samba4  
Server role: dc 
NIS extensão habilidada 
DNS interno back end: BIND9_DLZ 
Kerberos realm e AD DNS zona: samba4dc.saitam.int 
NetBIOS domínio name: samba4dc 
Administrador de domínio:  

7.1 Prover o Samba AD no modo interativo  
Estando com os comandos do Samba no PATH do sistema, conforme feito anteriormente pode executar de qualquer lugar no terminal, caso não tenha feito ainda, reveja o procedimento no item 3.1 ou terá que executar os comandos do Samba dentro do diretório /usr/local/samba/bin e /usr/local/samba/sbin 
# samba-tool domain provision --use-rfc2307 --interactive  

Realm [SAITAM.INT] 
Domain [SAITAM]: 
Server Role (dc, member, standalone) [dc]: 
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ 
Administrador password: 
Retype password: 

Once the above files are installed, your Samba4 server will be ready to use 
Server Role: active directory domain controller 
Hostname: samba4dc 
NetBIOS Domain: SAITAM 
DNS Domain: saitam.int 
DOMAIN SID: S-1-5-21-3436644580-1722986177-1604106671 
 

8. Configuração do Kerberos  
Primeiramente renomear o arquivo original do krb5.conf para backup 
# mv /etc/krb5.conf /etc/krb5.conf.orig 

Copiar o krb5.conf do Samba4 para /etc 

# cp /usr/local/samba/private/krb5.conf /etc  
Criar um link símbolico 
# ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf  
Incluir as linhas caso não exista, adapte para domínio e endereço IP de sua rede. 

# vim /usr/local/samba/private/krb5.conf  

[realms]
SAITAM.INT = {
kdc = 192.168.1.4
admin_server = 192.168.1.4
}
 

9. Serviço Samba 4 
No Debian: 

# systemctl restart smbd 
# systemctl restart nmbd 
# systemctl restart winbind 
 

No CentOS: 
Reiniciar o daemon do SystemD 
# systemctl daemon-reload 
# systemctl enable samba-ad-dc 
# systemctl start samba-ad-dc 
 

10. Testes de comunicação  
DNS 
Verificar se o arquivo de zona direta e reversa contém erros
# named-checkzone saitam.int /var/named/master/db.saitam 

zone saitam.int/IN: loaded serial 2016121801
OK 

# named-checkzone 1.168.192.in-addr /var/named/master/db.saitam/db.192
zone 1.168.192.in-addr/IN: loaded serial 2016121801
OK


# host -t A saitam.int
saitam.int has address 192.168.1.4

# host -t SRV _ldap._tcp.saitam.int.
_ldap._tcp.saitam.int has SRV record 0 100 389 samba4dc.saitam.int.

# host -t SRV _kerberos._udp.saitam.int.
_kerberos._udp.saitam.int has SRV record 0 100 88 samba4dc.saitam.int.
 

10.1 Teste do mecanismos de autenticação Kerberos  
# kinit administrator@SAITAM.INT 

Password for administrator@SAITAM.INT:
Warning: Your password will expire in 41 days on Qua 01 Fev 2017 16:05:34 BRST
 

# klist 

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SAITAM.INT

Valid starting       Expires              Service principal
20-12-2016 16:47:15  20-12-2016 02:47:15  krbtgt/SAITAM.INT@SAITAM.INT
        renew until 20-12-2016 16:46:57
 

10.2 Autenticação com controlador de domínio Samba 4 

# smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[SAITAM] OS=[Windows 6.1] Server=[Samba 4.4.5]
  .                                   D        0  Sat Dec 17 18:08:21 2016
  ..                                  D        0  Sat Dec 17 18:08:48 2016

                9961324 blocks of size 1024. 5006248 blocks available


11. Administração de usuários e grupos do Samba 4 AD pelo terminal  
Os comandos do Samba foram adicionados no PATH do sistema, caso não tenha adicionado ainda, reveja o procedimento no item 3.1 ou terá que executar os comandos do Samba dentro do diretório /usr/local/samba/bin  e /usr/local/samba/sbin   
11.1 Criar usuário no Samba 4 DC AD  
# samba-tool user add usuario  

New Password:
Retype Password:
User 'usuario' created successfully


11.2 Criar Grupo RH, Financeiro, TI dos setores da empresa  
# samba-tool group add RH  
Added group RH

# samba-tool group add Financeiro  
Added group Financeiro 

# samba-tool group add TI  
Added group TI 

11.3 Adicionar o usuário criado no grupo TI  
# samba-tool group addmembers TI usuario  
Added members to group TI 

11.4 Listar usuários  
# samba-tool user list  

11.5 Listar grupos  
# samba-tool group list 

12. Criar o arquivo smb.conf para compartilhamento de arquivos 
# vim /usr/local/samba/etc/smb.conf 
Arquivo
 smb.conf  

Reinicie o serviço do Samba para efeito do smb.conf 

13. Ingressar máquinas Windows no domínio Samba4 como AD  
Agora é necessário ingressar as máquinas Windows no domínio, segue os procedimentos abaixo: 
Maneira 1: 
Clica com botão direito o atalho Meu Computador depois em Propriedades 
Na aba Nome do computador, clica no botão ID de rede 
Irá abrir o Assistente para identificação da rede, clique em Avançar, marque a opção Este computador faz parte de uma rede corporativa e o utiliza para conectar-me a outros computadores no trabalho, clique em Avançar, marque a primeira opção, antes de prosseguir tenha em mente o usuário,senha e nome de domínio que será pedido, clique em Avançar, e digite os dados respectivamente.
Maneira 2: 
Clica com botão direito o atalho Meu Computador depois em Propriedades 
Na aba Nome do computador, clica no botão Alterar, digite o nome de domínio, e OK. 

No final do processo irá aparecer Bem-vindo ao domínio e avisará que deverá reiniciar o computador. 
13.1 Cliente Windows 7 no domínio Samba 4 como AD  
 

14. Instalação do RSAT no Windows 7 para gerenciar o Samba4 como se fosse o AD 
Uma forma de gerenciar as novas GPOs de Windows 7 é com a ferramenta RSAT
Segue abaixo o link para download e o processo de instalação/ativação caso você ainda não o conheça. 

14.1. Faça o download do RSAT para Windows 7 SP1 através do link  Tools RSAT for Windows 7 , respeitando o idioma e arquitetura da sua versão de Windows.
14.2.Instale esse pacote no seu PC. 
14.3. Clique no botão Iniciar do Windows 7, digite Ativar Recursos e selecione “Ativar ou desativar recursos do Windows” . 
14.4.Marque as opções desejadas em “Ferramentas de Administração de Servidor Remoto”, como na figura abaixo (você pode aproveitar e habilitar outros recursos como o Cliente Telnet) e clique em OK: 

Após a instalação do RSAT por padrão o atalho para Ferramentas Administrativas já deve aparecer no seu Menu Iniciar do Windows. 

Referências 
[1]  https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller  

[2]  https://wiki.samba.org/index.php/Time_Synchronisation  

[3]  https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server  

[4]  https://wiki.samba.org/index.php/BIND9_DLZ_DNS_Back_End  

[5]  https://wiki.samba.org/index.php/Adding_users_with_samba_tool  
Feito!