Samba 4: configurando o Samba como Controlador de Domínio do Active Directory

Introdução

Esta documentação descreve como configurar o Samba como o primeiro DC a criar uma nova floresta AD.

Cenário

Este estudo de caso foi feito sobre uma versão do Debian 9 64 bits limpa.

Preparação

  • Selecione um nome de host para o AD DC (Não utilize os termos NT4 apenas como nome do host, como PDCou BDC).
  • Use um endereço de IP estático no DC.
  • Desative ferramentas, como resolvconf, que atualizem automaticamente seu /etc/resolv.confarquivo de configuração do resolvedor de DNS. AD DCs e membros do domínio devem usar um servidor DNS que seja capaz de resolver as zonas DNS AD.
  • Verifique se nenhum processo do Samba está sendo executado:ps ax | egrep “samba | smbd | nmbd | winbindd”
ps ax | egrep "samba | smbd | nmbd | winbindd"
  • Configure o /etc/hosts
127.0.0.1       localhost
200.132.XXX.XXX dc3.addc.sertao     dc3
  • Remova qualquer versão anterior do smb.conf
smbd -b | grep "CONFIGFILE"

CONFIGFILE: /etc/samba/smb.conf

rm /etc/smb.conf
  • Remova todos os arquivos de banco de dados do Samba, como *.tdb*.ldbarquivos (somente os arquivos!).
smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"

LOCKDIR: /var/run/samba
 STATEDIR: /var/lib/samba
 CACHEDIR: /var/cache/samba
 PRIVATE_DIR: /var/lib/samba/private
  • Remova qualquer /etc/krb5.confarquivo existente :
rm /etc/krb5.conf

Instalando o Samba via Repositório

A linha abaixo instala o Samba na versão do repositório( Version 4.5.12-Debian em 08/11/2017). Também instala algumas ferramentas básicas necessárias:

apt -y install samba krb5-config winbind smbclient

Basta aceitar as configurações padrão dando ENTER.

Provisionando o Samba como Controlador de Domínio(DC) e com BIND9_DLZ como DNS Backend

Primeiro é necessário remover ou renomear o smb.conf default:

mv /etc/samba/smb.conf /etc/samba/smb.conf.org

Comando para provisonamento:

samba-tool domain provision 

# specify Realm
Realm [ADDC.SERTAO]: ADDC.SERTAO
# specify Domain name
Domain [ADDC]: SERTAO 
# Enter with default because it sets DC
Server Role (dc, member, standalone) [dc]:
# Enter with default because it uses Built-in DNS
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
# confirm DNS setting and Enter if it's OK
# set admin password
# Do not set trivial password, if you input it, configuration wizard shows error and stops
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=srv,DC=world
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=srv,DC=world
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              dc3
NetBIOS Domain:        SERTAO
DNS Domain:            addc.sertao
DOMAIN SID:            S-1-5-21-2545056461-174665597-1916133120

Copiar o arquivo de configuração Kerberos gerado pelo provisionamento:

cp /var/lib/samba/private/krb5.conf /etc/

Parar e desativar rotinas paralelas do Samba e habilitar script samba-ad-dc:

systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

Teste inicial do Samba e mapeamentos

smbclient -L localhost -U%
Domain=[SERTAO] OS=[Windows 6.1] Server=[Samba 4.5.12-Debian]

  Sharename       Type      Comment
  ---------       ----      -------
  netlogon        Disk      
  sysvol          Disk      
  IPC$            IPC       IPC Service (Samba 4.5.12-Debian)
Domain=[SERTAO] OS=[Windows 6.1] Server=[Samba 4.5.12-Debian]

  Server               Comment
  ---------            -------

  Workgroup            Master
  ---------            -------
  WORKGROUP            DC3

Confirmar nível de domínio

samba-tool domain level show
domain and forest function level for domain 'DC=addc,DC=sertao'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

Configurando DNS Backend com BIND9_DLZ

Foi optado pela instalação do Bind via repositório como a própria documentação do Samba recomenda:

apt-get install bind9

Verifica a versão instalada:

named -v

BIND 9.10.3-P4-Debian <id:ebd72b3>

Habilita o módulo correspondente descomentando a linha correspondente no arquivo /var/lib/samba/private/named.conf:

dlz "AD DNS Zone" {
    # For BIND 9.8.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
     database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_10.so";

    # For BIND 9.11.x
    # database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so";
};

Definir uma entrada nas configurações do BIND apontando para o arquivo gerado pelo Samba (/var/lib/samba/private/named.conf):

nano /etc/bind/named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";


#Entrada do Samba no BIND
include "/var/lib/samba/private/named.conf";

Instalar pacote DNS Utils (nsupdate)

Usado no processo de atualização dinâmica do DNS.

apt-get install dnsutils

Para verificar:

which nsupdate

Atualização Dinâmica do DNS via Kerberos

Nas configurações do DNS Bind faça uma entrada com a seguinte linha no arquivo /etc/bind/named.conf.options):

tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";

Ajuste as permissões de acesso do Bind no arquivo dns.keytab:

chmod 640 /var/lib/samba/private/dns.keytab
chown root:bind /var/lib/samba/private/dns.keytab

A permissão do Bind no arquivo /etc/krb5.conf deve ser a seguinte:

ls -l /etc/krb5.conf

-rw-r--r-- 1 root bind 104 nov 8 13:42 /etc/krb5.conf

Checando a configuração do BIND:

named-checkconf

Iniciando o serviço do DNS:

/etc/init.d/bind9 start

Testando as atualizações dinâmicas do DNS:

samba_dnsupdate --verbose --all-names

Configurando o Resolvedor de DNS

nano /etc/resolv.conf

domain addc.sertao.ifrs.edu.br
nameserver 200.132.XXX.XXX

Configure com o endereço do próprio servidor.

Testar autenticação do Administrator na pasta netlogon

smbclient //localhost/netlogon -UAdministrator -c 'ls'

Verificar resolução de nomes do DC:

LDAP:

host -t SRV _ldap._tcp.addc.sertao.
_ldap._tcp.addc.sertao.ifrs.edu.br has SRV record 0 100 389 dc3.addc.sertao

Kerberos:

host -t SRV _kerberos._udp.addc.sertao.
_kerberos._udp.addc.sertao has SRV record 0 100 88 dc3.addc.sertao.

DNS:

host -t A dc3.addc.sertao.
dc3.addc.sertao has address 200.132.XXX.XXX

Verificar e listar Tickets do Kerberos

kinit administrator
Password for administrator@ADDC.SERTAO: 
Warning: Your password will expire in 41 days on qua 20 dez 2017 13:42:36 -02
klist

Solução de Problemas

Para resolução de problemas relacionados ao DNS é possível rodar o seguinte script de auto-reconfiguração que corrige diversos problemas automaticamente:

samba_upgradedns --dns-backend=BIND9_DLZ
Reading domain information
DNS accounts already exist
No zone file /usr/local/samba/private/dns/SAMDOM.EXAMPLE.COM.zone
DNS records will be automatically created
DNS partitions already exist
dns-DC1 account already exists
See /usr/local/samba/private/named.conf for an example configuration include file for BIND
and /usr/local/samba/private/named.txt for further documentation required for secure DNS updates
Finished upgrading DNS

Reinicie o serviço bind e teste novamente:

samba_dnsupdate --verbose --all-names

Fontes e Referências

Documentação oficial Samba:

https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller

Samba AD DC : Configure DC Debian 9

https://www.server-world.info/en/note?os=Debian_9&p=samba&f=4

 

Publicado em 08/11/2017, em Samba 4. Marcado com as tags Active Directory, Bind9, Controlador de Domínio, Samba 4.