Samba 4 + Bind 9 + Kerberos - Instalação e configuração

Vamos instalar e configurar o Samba 4, Bind 9 e kerberos para substituir o Active Directory da Microsoft. Sistemas usados: Ubuntu 14.04 e Debian 7.

[ Hits: 42.083 ]

Por: Fabiano Belo Serbim em 29/10/2014


Instalando pacotes necessários e configuração



1. Vamos Instalar os pacotes necessários para configuração:

# apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user docbook-xsl acl mc

2. Alterando o fstab:

# vi /etc/fstab

/home  ext4   errors=remount-ro,acl,user_xattr,usrquota,grpquota   0   1

Obs.: escolha a partição onde você colocará as acls e cotas.

3. Remonte a partição:

# mount -o remount,rw /home

4. Instalando Kerberos e Bind9:

# apt-get install bind9 krb5-kdc

5. Configurando o Bind9:

# vi /etc/hosts

127.0.0.1 localhost
127.0.1.1 host.empresa.local host
192.168.0.x host.empresa.local host

# vi /etc/resolv.conf

search EMPRESA.LOCAL
domain EMPRESA.LOCAL
nameserver 192.168.0.x

# vi /etc/bind/named.conf #Inclua a linha abaixo no final do arquivo.

include "/usr/local/samba/private/named.conf";

# vi /etc/bind/named.conf.options #Inclua as linhas que estão comentadas.

                     forwarders {
                                      8.8.8.8;      # Dns de sua escolha para resolver nomes externos

                     };

//

==============================================================

// If BIND logs error messages about the root key being expired,

// you will need to update your keys. See https://www.isc.org/bind-keys

==============================================================

                      dnssec-validation yes;

                      auth-nxdomain no; # conform to RFC1035

                      listen-on-v6 { any; };

                      tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";  # Quando provisionar o samba vai criar essa chave e precisa ser adicionada aqui o path completo

                      allow-query {
                                         192.168.0.0/24;

                      };

                      allow-recursion {
                                              192.168.0.0/24;

                      };

};

6. Configurando as entradas no Bind9:

# vi /etc/bind/db.local #Inclua as Linhas comentadas

;
; BIND data file for local loopback interface
;

$TTL 604800
                                   @ IN SOA localhost. root.localhost. (

                                                              2             ; Serial
                                                     604800           ; Refresh
                                                       86400             ; Retry
                                                    2419200            ; Expire
                                                      604800 )          ; Negative Cache TTL

;
@    IN    NS    localhost.
@    IN    A      127.0.0.1
@    IN    AAAA  ::1
host IN    A      192.168.0.x

_kerberos._udp.empresa.local. IN SRV 0 100 88 host
_ldap._tcp.empresa.local. IN SRV 0 100 389 host
_kpasswd._udp.empresa.local. IN SRV 0 100 464 host

# vi /etc/apparmor.d/usr.sbin.named #Inclua as Linhas abaixo:

/usr/local/samba/lib** rm,
/usr/local/samba/private/dns.keytab r,
/usr/local/samba/private/named.conf r,
/usr/local/samba/private/dns/** rwk

Obs.: estes arquivos ainda não existem, só após o provisionamento do Samba.

Baixando e Instalando Samba 4

Instalando e Configurando:

# wget http://www.samba.org/samba/ftp/stable/samba-4.1.13.tar.gz
# tar –xf samba-4.1.13.tar.gz
# cd samba-4.1.13
# ./configure
# make
# make install
# cd /usr/local/samba/bin
#./samba-tool domain provision

Então, a primeira pergunta é:

  Realm: EMPRESA.LOCAL

Obs.: Aqui, você deverá inserir o seu domínio totalmente qualificado FQDN, nesse caso:

  Domain [EMPRESA]:    EMPRESA
  Server Role (dc, member, standalone) [dc]:   dc
  DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
  
  Administrator password:


Obs: Após colocar senha, o Samba começa o provisionamento e criação dos arquivos necessários para seu funcionamento.

# cd /usr/local/samba/sbin
#./samba start

Testando o Samba:

# cd /usr/local/samba/bin
#./smbclient --version

/usr/local/samba/bin/smbclient -L localhost -U Administrator


Obs.:Irá pedir para inserir a senha que colocou no provisionamento acima

O retorno do comando acima, é para ser este:

 Sharename    Type    Comment
 ---------    ----    -------
 netlogon     Disk
 sysvol       Disk
 IPC$         IPC     IPC Service (Samba 4.1.13)


Acessar o Diretório /usr/local/samba/private - modificar as permissões:

drwxrwxr-x 3 bind bind 4096 Mai 22 17:49 dns
-rw-r----- 1 bind bind 747 Mai 22 17:49 dns.keytab
-rw-r--r-- 1 bind bind 555 Mai 22 17:49 named.conf

Edite o arquivo /usr/local/samba/private/named.conf:

# This DNS configuration is for BIND 9.8.0 or later with dlz_dlopen support.
#
# This file should be included in your main BIND configuration file
#
# For example with
# include "/usr/local/samba/private/named.conf";

#
# This configures dynamically loadable zones (DLZ) from AD schema
# Uncomment only single database line, depending on your BIND version
#
dlz "AD DNS Zone" {
    # For BIND 9.8.0
    database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so";

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

Obs.: descomente a linha "database" de acordo com a versão do seu Bind .

O Samba, na instalação, já cria o arquivo do kerberos. O arquivo se encontra em: /usr/local/samba/private/krb5.conf

Renomeie o conf abaixo, para:

# mv /etc/krb5.conf krb5.conf.old
# cp /usr/local/samba/private/krb5.conf /etc/

Criando o ticket no kerberos:

# kinit administrator@EMPRESA.LOCAL

Verificando o Ticket:

# klist

O retorno do comando acima será:

  Ticket cache: FILE:/tmp/krb5cc_1000
  Default principal: administrator@EMPRESA.LOCAL
    Valid starting Expires Service principal
  01/10/13 08:39:48 01/11/13 08:39:46 krbtgt/
  EMPRESA.LOCAL@EMPRESA.LOCAL


Agora, vamos copiar o script binário para /etc/init.d/:

# cp /usr/local/samba/sbin/samba /etc/init.d/samba
# chmod +x /etc/init.d/samba
# echo /etc/init.d/samba start >> /etc/rc.local

Vamos dar um restart nos serviços abaixo:
  • /etc/init.d/apparmor restart
  • /etc/init.d/bind9 restart
  • /etc/init.d/samba restart

Testando os serviços:

# host -t SRV _ldap._tcp.empresa.local.
_ldap._tcp.empresa.local has SRV record 0 100 389 host.empresa.local

# host -t SRV _kerberos._udp.empresa.local
_kerberos._udp.empresa.local has SRV record 0 100 88 host.empresa.local

# host -t A host.empresa.local.
host.empresa.local has address 192.168.0.x

# nslookup host.empresa.local
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: host.empresa.local

Address: 192.168.0.x


# dig -t srv _kerberos._udp.empresa.local +short
0 0 88 host.empresa.local.

# dig -t srv _ldap._tcp.empresa.local +short
0 0 389 host.empresa.local.

# dig -t srv _kpasswd._udp.empresa.local +short
0 0 464 host.empresa.local.

# dig host.empresa.local +short
192.168.0.x

Conclusão

O Samba 4 está bastante maduro e se mostra muito robusto em redes com muitos usuários.

Abaixo, segue o link do rsat da microsoft, ferramenta para administração do Windows Server para gerenciamento do servidor Samba 4 ou use, o samba-tools.
Obs.: caso faltou algo, mande uma mensagem para atualizar o artigo.

   

Páginas do artigo
   1. Instalando pacotes necessários e configuração
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Instalando e Configurando o SAMBA3 no FreeBSD 8.1 Release

Controle de impressão por usuário

Política de segurança com o Samba

Autenticando Linux num PDC Samba com auto-montagem de unidade por usuários (sem usar LDAP)

Instalação e configuração do Samba no Ubuntu Server

  
Comentários
[1] Comentário enviado por ubezerra em 29/10/2014 - 09:38h

Amigo nessa configuração, na seção do options, com as opções que estão aqui o DHCP consegue fazer o atualização automática na zona do DNS? Quero integrar o DHCP com o Bind para que registre automaticamente o IP e o hostname na zona do DNS e consiga responder o IP e o reverso.

[2] Comentário enviado por fabriciocs em 29/10/2014 - 15:23h

Olá, gostei o artigo, tive problemas nessa parte.
Criando o ticket no kerberos:

# kinit administrator@EMPRESA.LOCAL



Consegui resolver o problema editando o arquivo /etc/krb5.conf
[realms]
Seu.domínio = {
kdc = 192.168.0.x. # ip do pc com samba4
Admin_server = 192.168.0.x # ip do pc com samba 4
}

Beleza!

[3] Comentário enviado por tonitoni em 30/10/2014 - 15:03h

Olá, coloquei uma máquina no dominio da empresa e consegui pelo LIKEWISE-OPEN-GUI pela interface gráfica, consegui fazer o login no linux na primeira tentativa. OK

Logo depois fui entrar em uma máquina Windows7 e não consegui, dá uma mensagem de erro :

conta referenciada está bloqueada pode não ser possível fazer logon.


Assustei e tirei a máquina linux do dominio, com medo de alterar alguma coisa no AD, são mais de 150 usuário aqui na empresa..

gostaria de uma solução.. URGENTE :/

[4] Comentário enviado por jgama em 01/01/2015 - 16:21h

Meu caro estava indo bem, mas quando cheguei aqui /usr/local/samba/bin/smbclient -L localhost -U Administrator o bicho pegou.

root@srv-01:/etc# /usr/local/samba/bin/smbclient -L localhost -U Administrator
Enter Administrator's password:
session setup failed: NT_STATUS_CONNECTION_REFUSED
root@srv-01:/etc#

continuei com o tutorial mas infelizmente estacionei aqui.
root@srv-01:/etc# kinit administrator@CCBSUMARE.LOCAL
kinit: Cannot find KDC for realm "CCBSUMARE.LOCAL" while getting initial credentials

o que pode ser pois i tão bem.

Abraço



[5] Comentário enviado por torture em 02/01/2015 - 09:07h

jgama - Verifica o resolv.conf e o hosts

[6] Comentário enviado por Rodrigo.Sousa em 04/03/2015 - 15:06h


Agora eu fiquei com uma dúvida.

As máquinas que já estavam ingressadas no domínio, não foi preciso reingressar?

Está de Parabéns pelo tutorial.

Abraço,

[7] Comentário enviado por pismarjr em 13/05/2015 - 14:29h

Estou com problema no provisionamento do samba. Dá um erro. Parece tem alguma coisa a vez com DNS.
Obs. Estou tentando instalar o samba somento para poder fazer autenticação no windows e no servidor de arquivos ubuntu 14 64bits. Não desejo fazer servidor de DNS pois na empresa já existe um e não tenho interesse de fazer mais nenhum outro.
Fiz os procedimentos descritos acima. Mas no provisionamento acontece o seguinte:
root@local:~# /usr/local/samba/bin/samba-tool domain provision
Realm [empresa]: local.empresa
Domain [local]: localwg
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: samba_internal
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
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=progep,DC=ufms
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
ERROR(exception): uncaught exception - Invalid dns backend: 'samba_internal'
File "/usr/local/samba/lib/python2.7/site-packages/samba/netcmd/__init__.py", line 175, in _run
return self.run(*args, **kwargs)
File "/usr/local/samba/lib/python2.7/site-packages/samba/netcmd/domain.py", line 401, in run
use_rfc2307=use_rfc2307, skip_sysvolacl=False)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py", line 2160, in provision
skip_sysvolacl=skip_sysvolacl)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py", line 1829, in provision_fill
targetdir=targetdir)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/sambadns.py", line 1010, in setup_ad_dns
raise Exception("Invalid dns backend: %r" % dns_backend)
Poderia me ajudar??????
Att.

[8] Comentário enviado por atido em 29/06/2015 - 18:44h

jgame e outros que estiverem com o problema "nt_status_connection_refused" ao dar o comando smbclient - L localhost -U Administrator

Isso é um erro de redirecionamento do CUPS, não sei muito bem como resolver com o CUPS rodando, mas se desabilitá-lo e depois fazer um test com o comando smbtree -b -d 2 para ter certeza se o samba está escutando em endereços ipv4.

Para desabilitar o cups no smb.conf

# nano /etc/samba/smb.conf

[global]
load printers = no
printcap name = /dev/null
disable spoolss = yes

a linha "bind only interfaces" não deve existir, mas se exitir, deixe para "no" ou apague-a (o default é "no")
(mantenha as outras configurações)

[9] Comentário enviado por atido em 29/06/2015 - 19:17h

PARA O ERRO NO COMANDO "KINIT"
kinit administrator@MIDIAPANE.LOCAL
kinit: Cannot find KDC for realm "MIDIAPANE.LOCAL" while getting initial credentials

adicionar (EXEMPLO.LOCAL EM CAPS LOCK OU CAIXA ALTA) as linhas abaixo no arquivo krb5.conf:
[realms]
EXEMPLO.LOCAL = {
kdc = 172.16.22.3 #IP da sua máquina samba4
admin_server = 172.16.22.3 #IP da sua máquina samba4
}



[10] Comentário enviado por franzegurgel em 05/08/2015 - 09:53h

Teria a possibilidade de logar um cliente ubuntu 14.04 no domínio samba 4 com RSAT instalado em win7?

[11] Comentário enviado por removido em 23/02/2016 - 10:57h


Pessoal , quase tudo certo, mas com erro no teste abaixo :

/usr/local/samba/bin/smbclient -L localhost -U Administrator
Enter Administrator's password:
xxxxxxxxx
Segue erro:

Connection to localhost failed (Error NT_STATUS_CONNECTION_REFUSED)

[12] Comentário enviado por removido em 23/02/2016 - 11:01h


[8] Comentário enviado por atido em 29/06/2015 - 18:44h

jgame e outros que estiverem com o problema "nt_status_connection_refused" ao dar o comando smbclient - L localhost -U Administrator

Isso é um erro de redirecionamento do CUPS, não sei muito bem como resolver com o CUPS rodando, mas se desabilitá-lo e depois fazer um test com o comando smbtree -b -d 2 para ter certeza se o samba está escutando em endereços ipv4.

Para desabilitar o cups no smb.conf

# nano /etc/samba/smb.conf

[global]
load printers = no
printcap name = /dev/null
disable spoolss = yes

a linha "bind only interfaces" não deve existir, mas se exitir, deixe para "no" ou apague-a (o default é "no")
(mantenha as outras configurações)


Tentei fazer o teste , mas o smbclient não está instalado. Não vi neste tutorial a instalação dele.
smbtree -b -d 2
O programa 'smbtree' não está instalado no momento. Você pode instalá-lo digitando:
apt-get install smbclient


Portanto não existe /etc/samba/smb.conf



[13] Comentário enviado por removido em 23/02/2016 - 11:06h

Erro ao iniciar este serviço.

/etc/init.d/apparmor restart
* Reloading AppArmor profiles Erro do analisador AppArmor para /etc/apparmor.d/usr.sbin.named in /etc/apparmor.d/usr.sbin.named na linha 54: syntax error, unexpected TOK_MODE, expecting TOK_OPEN
Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd
[ OK ]

[14] Comentário enviado por removido em 25/02/2016 - 20:56h

Segue erro ao provisionar domínio:


root@jhn01:/usr/local/samba/bin# ./samba-tool domain provision Realm [FERREIRA.LOCAL]:
Domain [FERREIRA]:
Server Role (dc, member, standalone) [dc]:
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
DNS forwarder IP address (write 'none' to disable forwarding) [192.168.100.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
More than one IPv4 address found. Using 192.168.25.2
Looking up IPv6 addresses
No IPv6 address will be assigned
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=ferreira,DC=local
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
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2164
File "/usr/local/samba/lib/python2.7/site-packages/samba/netcmd/__init__.py", line 175, in _run
return self.run(*args, **kwargs)
File "/usr/local/samba/lib/python2.7/site-packages/samba/netcmd/domain.py", line 401, in run
use_rfc2307=use_rfc2307, skip_sysvolacl=False)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py", line 2160, in provision
skip_sysvolacl=skip_sysvolacl)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py", line 1788, in provision_fill
next_rid=next_rid, dc_rid=dc_rid)
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py", line 1442, in fill_samdb
"KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))
File "/usr/local/samba/lib/python2.7/site-packages/samba/provision/common.py", line 50, in setup_add_ldif
ldb.add_ldif(data, controls)
File "/usr/local/samba/lib/python2.7/site-packages/samba/__init__.py", line 224, in add_ldif
self.add(msg, controls)

root@jhn01:/usr/local/samba/bin#

[15] Comentário enviado por pc.charlison em 09/01/2018 - 21:12h

Cara muito bom seu artigo. Detalhe; eu comprei um curso em video sobre samba4,configuração até o ingresso de uma máquina windows no dominio e tal.. Muito cru, na moral, mas consegui configurar o samba4 com ajuda do artigo e outras pesquisas.. mas parei aqui...

Criando o ticket no kerberos:

# kinit administrator@EMPRESA.LOCAL
Verificando o Ticket:
# klist
Sempre dava erro (kinit: Cannot find KDC for realm "SAMBA.LOCAL" while getting initial credentials
) ai resolvi com uma reposta encontrada aqui mesmo nos comentário { por isso é bom ler os comentários a dúvida de uma serve para outros }
Resposta de @atido
adicionar (EXEMPLO.LOCAL EM CAPS LOCK OU CAIXA ALTA) as linhas abaixo no arquivo krb5.conf:
[realms]
EXEMPLO.LOCAL = {
kdc = 172.16.22.3 #IP da sua máquina samba4
admin_server = 172.16.22.3 #IP da sua máquina samba4
}

Agora após o ingresso da máquina e ao tentar logar com usuário de administrator e senha do dominio aparece:

Não é possível entrar com essa credencial porque o dominio não está disponível. Verifique se o dispositivo está conectado a rede da sua organização e tente novamente. Se você entrou neste dispositivo anteriormente com outra credencial, é possível entrar com essa credencial.

Observação.. Ainda não consegui rodar os serviços..
Testando os serviços:

# host -t SRV _ldap._tcp.empresa.local.
_ldap._tcp.empresa.local has SRV record 0 100 389 host.empresa.local

# host -t SRV _kerberos._udp.empresa.local
_kerberos._udp.empresa.local has SRV record 0 100 88 host.empresa.local

# host -t A host.empresa.local.
host.empresa.local has address 192.168.0.x

# nslookup host.empresa.local
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: host.empresa.local

Address: 192.168.0.x

# dig -t srv _kerberos._udp.empresa.local +short
0 0 88 host.empresa.local.

# dig -t srv _ldap._tcp.empresa.local +short
0 0 389 host.empresa.local.

# dig -t srv _kpasswd._udp.empresa.local +short
0 0 464 host.empresa.local.

# dig host.empresa.local +short
192.168.0.x


Sempre retorna (NXDOMAIN)
Exemplo: Host _kerberos._udp.samba.local not found: 3(NXDOMAIN)

Não sei o que é pode ser bobagem, mas to apanhando, alguém pode dá uma ajuda ?

Grato,
Pedro Charlison


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts