anúncios

terça-feira, 20 de dezembro de 2016

Instalando, Configurando e Provisionando o Samba4 como Controlador de Domínio Active Directory (AD)

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!

3 comentários:

  1. Boa Tarde, fiz os procedimentos, porém os comandos

    host -t A saitam.int
    host -t SRV _ldap._tcp.saitam.int.
    host -t SRV _kerberos._udp.saitam.int.

    não retornam nada além do erro:


    zone 0.168.192.in-addr/IN: loading from master file /var/named/master/db.saitam/db.192 failed: invalid file
    zone 0.168.192.in-addr/IN: not loaded due to errors.

    no BIND, poderia me ajudar ? estou usando mesmo nome de maquina que o seu e dominio, também, apenas a rede que é a 192.168.0.0/24

    ResponderExcluir
    Respostas
    1. Gabriel,

      saitam.int correspondente ao domínio interno que configurei no meu cenário juntamente com o servidor DNS Bind. Substituir para o seu domínio interno que configurou no domínio.
      O mesmo se aplica ao endereço IP apontado no domínio interno.

      Instalou o Samba 4 compilado conforme o howto descrito e as demais dependências ?

      Antes de provisionar o Samba 4 como DC, primeiro faça conforme explicação de configuração do servidor DNS Bind, podendo deixar o mesmo nome, apenas troque o IP caso seja outra rede no seu caso.

      Feito!

      Excluir
  2. Boa Noite, na época que respondi, estava testando em uma máquina virtual em Rede Interna, utilizando o próprio DNS que configurei na minha rede, porém já troquei o meu sistema, Desktop, e para resolver o problema acima citado, instalei em uma máquina da empresa, o Zentyal 5.0 que usa Ubuntu na sua versão, 16.04.2, agradeço sua ajuda, caso tenha algumas dicas, temos um Blog: networkingevolution.blogspot.com.br entre em contato, diga o que achou, vamos compartilhar conhecimento.

    Obrigado,Até mais.

    ResponderExcluir