You are on page 1of 10

Samba 4: implementando um domínio

(usando SAMBA_INTERNAL)
Última Atualização deste artigo: 28 de Abril de 2014
* Adicionada a opção “–use-rfc2307 –interactive” no comando de provisionamento de domínios –
devido a constantes erros de “falta de acl”;
* Corrigidas algumas linhas que davam interpretação dúbia (por exemplo, uma hora aprecia
MINHAREDE.INTR e em outra aparecia MINHAREDE.INTRANET);
* Tutorial testado e aprovado para ser usado nas versões 4.0.x e nas versões 4.1.x até a 4.1.7;
* Tutorial originalmente montado em Debian 6 e Debian 7, porém pode funcionar em
implementações no Ubuntu também;

Salve, galera! Tudo “em riba”?
Dando continuidade as aulas de Samba 4, eis o segundo e aguardado artigo da série toda: como
implementar a função de AD DS no Samba 4.
Índice de artigos
I - Samba 4: Instalação (Debian 6 Squeeze e Debian 7 Wheezy)
II - Samba 4: implementando um domínio (usando SAMBA_INTERNAL) – Você está aqui!

O que será ensinado neste artigo
Implementar um domínio no Samba 4 com um servidor DC e usando SAMBA_INTERNAL para
I
resolução de DNS;
Ajustes incrementais para o funcionamento do domínio;
I
Configurar o Kerberos;
I
Configurar NTP;
I
Como de praxe, trago uam série de testes a serem realizados em cada passo para que você tenha
certeza de que o seu Samba 4 está funcionando redondinho. E claro, no final a famosa seção de
Troubleshooting com os problemas mais comuns durante as etapas deste segundo artigo.

Lembretes
Se os comandos aqui não funcionarem, muito provavelmente você não adicionou os diretórios /bin e
/sbin da instalação do seu Samba 4 dentro da variável PATH do seu Linux. No primeiro artigo da
série eu ensinei como resolver estre probleminha.
Recapitulando os dados básicos de nossa instalação:
Nome do servidor: candeia
IP do servidor: 192.168.1.250
Domínio: minharede.intra
Local onde instalarei o Samba 4: /opt/samba
Versão utilizada: 4.1.2 e posteriormente 4.1.6 (funciona com todas as anteriores estáveis da série
4.0.x e com as 4.1.x até a versão 4.1.7).
Introdução
Antes de dar início a implementação de um novo domínio, vamos relembrar alguns conceitos chaves
em cima das informações que o Samba 4 nos requisitará durante o provisionamento do servidor AD e
de um domínio.
Como em qualquer servidor AD, um servidor com Samba 4 pode assumir três papeis distintos. Cada
qual têm a sua função específica. Vejamos:
DC: É o sevidor controlador de domínio, o principal para esta função.
Member: É um servidor membro do domínio. Ele pode ou não ser um servidor ADDS.
Standalone: Um servidor que fica fora da rede ou do domínio.
Todo servidor AD necessita de um serviço de DNS. No Samba 4 são possíveis quatro opções de
configuração:
SAMBA_INTERNAL: O Samba 4 conta com uma resolução interna de DNS bastante completa. O
único inconveniente é que não é possível manipular este controlador de DNS, ou seja, não é possível
realizar manipulações avançadas e muito específicas. É a opção mais utilizada.
BIND9_DLZ: Integra o servidor Samba 4 com um servidor BIND9 instalado na mesma máquina
utilizando DLZ. A vantagem é que o BIND9 é robusto, permite configurações complexas e
gerenciamento. A grande desvantagem é que ainda há um número grande de relatos de problemas
de implementação e funcionamento do Samba 4 com o BIND9 no mesmo servidor, principalmente
em servidores Debian como por exemplo, problemas envolvendo o próprio DLZ e seus drivers.
BIND9_FLATFILE: Integra o servidor Samba 4 com um outro servidor BIND9 já existente na rede.
Também fornece flexibilidade na configuração. Não é a opção mais utilizada de todas as três.
Provisionando um novo domínio
Para configurar um novo domínio, digite o comando:
# samba-tool domain provision --use-rfc2307 --interactive
A opção “–use-rfc2307″ habilita o Samba a armazenar automaticamente os atributos posix e também
cria informações NIS no AD, informações estas que permitem que você administre UIDs (User IDs) e
GIDs (Group IDs) e outras opções Unix. A última opção faz com que o comando seja rodado de forma
interativa.
Após utilizar estas duas opções em conjunto, o erro relacionado a não existência de ACLs no meu
/etc/fstab simplesmente sumiu e o domínio foi provisionado sem qualquer errinho.
Serão solicitadas algumas informações que você deverá digitar. Vejamos:
Realm: digite o FQDN do seu novo domínio. Ex.: minharede.intra
Domain: Somente o primeiro nome do domínio. Exemplo: minharede
Server Role (dc, member, standalone) [dc]:vamos escolher dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE)
[SAMBA_INTERNAL]: A título de exemplo, vamos pegar o padrão sugerido, ou seja,
SAMBA_INTERNAL. Mais para frente ensinarei com mais detalhes as configurações utilizando
BIND9 e e aprofundarei no SAMBA_INTERNAL.
DNS forwarder IP address (write ‘none’ to disable forwarding) [192.168.1.1]: Neste caso, vou
usar o que foi sugerido que é o IP do servidor firewall/proxy/DNS externo da minha rede, ou seja,
192.168.1.1.
Administrator password: escolha uma senha forte para o usuário Administrator
Retype password: redigite a senha
Se tudo der certo, no final você receberá a mensagem abaixo.
A Kerberos configuration suitable for Samba 4 has been generated at
/opt/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: candeia
NetBIOS Domain: MINHAREDE
DNS Domain: minharede.intra
DOMAIN SID: S-1-5-21-2638291532-3607667149-1095323109
Ajustes finais
Vamos ajustar o arquivo /etc/security/limits.conf para não ficar mostrando erro no Samba. Adicione
no final do arquivo as quatro linhas a seguir:
# vim /etc/security/limits.conf
root hard nofile 131072
root soft nofile 65536
mioutente hard nofile 32768
mioutente soft nofile 16384
Precisamos mexer novamente no /etc/resolv.conf e deixar somente o ip do nosso servidor Samba
como nameserver. Se você colocou no arquivo o IP de algum servidor de rede, roteador ou DNS
público que também resolva nomes, comente a linha que faz referência a outro servidor na rede:
# vim /etc/resolv.conf
domain minharede.intra
search minharede.intra
nameserver 192.168.1.210
#nameserver 192.168.1.1 #Linha comentada
Testando o Samba e o domínio
Primeiramente, devemos iniciar o Samba (o Samba 4 ainda não é auto inicializável, algo que
corrigiremos no próximo artigo). Para iniciar o servidor SAMBA no modo standard:
# samba
Vamos checar qual a versão do smbclient. O resultado deverá ser algo como Version 4.x.xxxxx (no
meu caso, retornou Version 4.1.6):
# smbclient --version
Vamos listar agora todos os compartilhamentos do Samba 4:
# smbclient -L localhost -U%
A saída deste comando deverá ser algo como o mostrado a seguir:
Sharename Type Comment
--------- ---- -------
netlogon Disk
sysvol Disk
IPC$ IPC IPC Service (Samba 4.1.6)
Os compartilhamentos netlogon e sysvol são essenciais para o funcionamento da estrutura do AD. Não
devem estar ausentes durante o teste.
Tente agora autenticando como administrador, onde P4ssW@rd é a senha que você definiu para o
administrator.
# smbclient //localhost/netlogon -UAdministrator%'P4ssW@rd' -c 'ls'
A saída deverá ser:
Domain=[TERREIRO] OS=[Unix] Server=[Samba 4.1.2]
. D 0 Tue Jul 16 10:37:58 2013
.. D 0 Tue Jul 16 10:38:04 2013
37547 blocks of size 2097152. 34851 blocks available
Se este teste falhar, reinicie o Samba através dos comandos abaixo:
# killall samba
# rm -rf /opt/samba/var/run/smbd-fileserver.conf.pid
# samba
Se mesmo assim o teste falhar, reinicie o sistema também.

Vamos checar todos os processos que estão sendo executados pelo Samba:
# ps aux | egrep samba
A saída deste comando deverá ser:
root 1231 0.0 8.8 512872 44888 ? Ss 09:55 0:00 /opt/samba/sbin/samba
root 1233 0.0 6.3 512872 32084 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1234 0.0 6.4 512872 32964 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1235 0.0 6.6 512872 33732 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1236 0.0 6.3 512872 32056 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1237 0.0 6.5 512872 33440 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1238 0.0 6.4 512872 32652 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1239 0.0 6.7 512872 34188 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1240 0.0 6.5 512872 33472 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1241 0.0 6.6 516332 33776 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1242 0.0 6.3 512872 32172 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1243 0.0 7.9 512872 40388 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1244 0.0 6.5 512872 33132 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1245 0.0 9.0 470044 46176 ? Ss 09:55 0:00 /opt/samba/sbin/smbd -D -
-option=server role check:inhibit=yes --foreground
root 1247 0.0 6.7 513292 34192 ? S 09:55 0:00 /opt/samba/sbin/samba
root 1250 0.0 6.3 470052 32320 ? S 09:55 0:00 /opt/samba/sbin/smbd -D -
-option=server role check:inhibit=yes --foreground
root 1295 0.0 0.1 7792 880 pts/0 S+ 10:03 0:00 egrep samba
Após os testes com o Samba, devemos testar o DNS também.
Testando o DNS
Os procedimentos aqui valem para qualquer tipo de implementação de DNS, sobretudo para
SAMBA_INTERNAL e BIND9_DLZ.
O primeiro teste simples a ser realizado é com o nslookup apontando para o nosso domínio.
# nslookup minharede.intra
Se der certo, o resultado será algo como:
Server: 192.168.1.250
Address: 192.168.1.250#53
Name: minharede.intra
Address: 192.168.1.250
Outros três testes são primordiais para verificar se tudo está OK com a resolução de DNS do nosso
servidor SAMBA. Se tudo estiver OK, surgirão as mensagens colocadas logo abaixo dos comandos
apresentados:
# host -t SRV _ldap._tcp.minharede.intra.
_ldap._tcp.teste.local has SRV record 0 100 389 candeia.minharede.intra.
# host -t SRV _kerberos._udp.minharede.intra.
_kerberos._udp.teste.local has SRV record 0 100 88 candeia.minharede.intra.
# host -t A candeia.minharede.intra.
candeia.terreiro.intra has address 192.168.1.210
Configurando o Kerberos
A configuração do Kerberos para funcionar com o Samba 4 é basante simples. Tão logo terminamos
de prover o novo domínio, o Samba cria o arquivo /samba/shared/setup/krb5.conf em sua pasta. Este
arquivo deverá substituir o /etc/krb5.conf.
Antes de qualquer alteração drástica, crie uma cópia do arquivo original (fica localizado em /etc):
# cp /etc/krb5.conf /etc/krb5.conf.ORIGINAL
Apague o arquivo:
# rm /etc/krb5.conf
Agora copie (e não mova de lugar) o arquivo padrão do Samba 4 para o /etc.
# cp /opt/samba/share/setup/krb5.conf /etc/krb5.conf
Vamos editar o arquivo que copiamos. A única alteração a ser feita é que substituiremos o “
{REALM}” encontrado no arquivo pelo nome do domínio que criamos.
# vim /etc/krb5.conf
[libdefaults]
default_realm = MINHAREDE.INTRA
dns_lookup_realm = false
dns_lookup_kdc = true
Após salvar e sair do arquivo, teste se está tudo ok:
# kinit administrator@MINHAREDE.INTRA
Será solicitada a senha do Administrator que foi cadastrada no provisionamento. No máximo, você
também receberá uma notificação da data de expiração da senha:
Password for administrator@MINHAREDE.INTRA:
Warning: Your password will expire in 41 days on Sun Apr 7 09:49:53 2013
Feito este passo, vamos checar se foir gerado um ticket. Se houver ticket, então significa que está
tudo certo até o momento.
# klist
O retorno do comando acima deverá ser:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@MINHAREDE.INTRA
Valid starting Expires Service principal
01/10/13 08:39:48 01/11/13 08:39:46 krbtgt/ MINHAREDE.INTRA @
MINHAREDE.INTRA
Vamos testar a nossa autenticação no Samba utilizando o token do Kerberos:
# smbclient -k //candeia.minharede.intra/netlogon -c 'ls'
A saída deverá ser:
Domain=[MINHAREDE] OS=[Unix] Server=[Samba 4.1.2pre1-UNKNOWN]
. D 0 Sun Feb 24 09:49:48 2013
.. D 0 Sun Feb 24 09:49:54 2013
60797 blocks of size 131072. 45503 blocks available
Para utilizar o token do kerberos precisamos passar o nome do nosso DC. Caso você passe somente
localhost vamos ter o seguinte erro:
# smbclient -k //localhost/netlogon -c 'ls'
a d s _ k r b 5 _ m k _ r e q : s m b _ k r b 5 _ g e t _ c r e d e n t i a l s f a i l e d f o r
cifs/localhost@MINHAREDE.INTRA (Server not found in Kerberos database)
cli_session_setup_kerberos: spnego_gen_krb5_negTokenInit failed: Server not
found in Kerberos database
session setup failed: NT_STATUS_UNSUCCESSFUL
Es t e e r r o é c o me n t a d o n a l i s t a d e d i s c u s s õ e s d o p r ó p r i o Sa mb a :
http://l i sts. samba. org/archi ve/samba- techni cal /2011- June/078134. html

Configurando o NTP
Configurar o NTP no servidor Samba é tida como configuração opcinal pela documentação oficial do
sistema.
Caso o seu servidor não possua o serviço de NTP instalado:
# apt-get install ntp -y
Como de praxe, é bom realizar o backup do arquivo original salvando com outro nome:
# cp /etc/ntp.conf /etc/ntp.conf.ORIGINAL
Agora você pode tanto apagar o /etc/ntp.conf para criar um novo com o mesmo nome tanto quanto
pode deixá-lo salvo no servidor para abri-lo e apagar todo o seu conteúdo e adicionar as linhas a
seguir (método mais trabalhoso). Preferi apagar o arquivo que restou e criar um novo:
# rm /etc/ntp.conf
# vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 10
server a.ntp.br iburst prefer
server 0.pool.ntp.org iburst prefer
server 1.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /opt/samba/var/lib/ntp_signd/
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict a.ntp.br mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 0.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
Após salvar e sair do arquivo, reinicie o serviço de NTP:
# /etc/init.d/ntp restart
Precisamos verificar se o serviço NTP está funcionando corretamente. Para isto, precisamos apenas
de realizar uma simples consulta com o loopback de nosso servidor.
# ntpq -p 127.0.0.1
remote refid st t when poll reach delay offset jitter
=============================================================================
=
LOCAL(0) .LOCL. 10 l 26 64 1 0.000 0.000 0.000
+a.ntp.br 200.160.7.186 2 u 15 64 1 11.543 4.363 0.306
0.pool.ntp.org .INIT. 16 u - 64 0 0.000 0.000 0.000
*1.pool.ntp.org 200.160.7.186 2 u 13 64 1 6.470 5.146 0.305
Se a saída do comando for a apresentada logo acima ou algo parecido, está tudo OK. Para finalizar
esta etapa, basta configurar corretamente a permissão do arquivo do NTP existente no diretório do
Samba.
# chgrp ntp /opt/samba/var/lib/ntp_signd
Troubleshooting
A) Ao execut ar o . / conf i gur e, r ecebi a mensagem de er r o “/ samba-
4.1.2/lib/replace/../../buildtools/wafsamba/wscript:210: error: could not configure a c
compiler!”
Simples: não há um compilador de C instalado no seu Linux. Siga o passo “Preparando o terreno”
que faz referência ao GCC para resolver este problema.

B) Após rodar o comando ./configure, pode aparecer a seguinte mensagem de erro :
“samba-4.0.3/wscript:92: error: the configuration failed (see ‘/opt/samba-
4.0.3/bin/config.log’)”.
Para resolvê-la, dê uma olhada no arquivo /opt/samba-4.1.2/bin/config.log para descobrir qual a
causa do erro e procure corrigi-lo antes de prosseguir na instalação.
No meu caso, o erro apareceu perto do final do processo. Era a seguinte mensagem, no final do log:
# tac /opt/samba-4.1.2/bin/config.log | more
"command returned 'Build failed: -> task failed (err #1): \n\t{task: cc
test.c -> test_1.o}'Could not find the python development headers
['/usr/bin/gcc', '-MD', '-fno-strict-aliasing', '-I/usr/local/include', '-
I/usr/include/python2.6', '-D_SAMBA_BUILD_=4', '-DHAVE_CONFIG_H=1', '-
D_GNU_SOURCE=1', '-D_XOPEN_S
OURCE_EXTENDED=1', '../test.c', '-c', '-o', 'default/test_1.o']
../test.c:2:20: error: Python.h: Arquivo ou diretório não encontrado"
Para resolver este problema, foi necessário instalar o python 2.6. O Python é uma biblioteca
essencial para o funcionamento do Samba 4, sem ela nada funcionará.
Para evitar este erro e tantos outros, realize o passo do “Preparando o terreno” lá no primeiro
artigo, antes de mais nada.

C) Após rodar o comando ./configure, pode aparecer a seguinte mensagem de erro : Build
failed: -> task failed (err #1): {task: cc ndr_spoolss.c -> ndr_spoolss_19.o}
Apenas rode um #apt-get update e após um apt-get upgrade.

D) Ao rodar o “samba-tool domain provision”, recebo a seguinte mensagem de erro no
final: “Your filesystem or build does not support posix ACLs, which s3fs requires.”
Você precisará editar o /etc/fstab para corrigir este problema na partição raiz (/) do seu sistema.
Vide o passo que ensina como proceder nesta configuração.
Outra causa provável é que você pode não ter utilizado as opções –use-rfc2307 –interactive no
comando samba-tool domain provision.

E) Tentei refazer o domínio, mas recebi o erro “Provision failed – ProvisioningError:
guess_names: ‘realm=MINHAREDE’ in MINHAREDE.INTRA must match chosen realm
‘/opt/samba/etc/smb.conf’! Please remove the smb.conf file and let provision generate it”.
Você deve apagar o smb.conf, senão ao refazer o processo você terá diversos erros:
# rm /opt/samba/etc/smb.conf

Bibliografia
Além de todo o conhecimento e toda a experiência de anos com o Samba 3.x, estudos (e um bocado
de stress) com o Samba 4 tanto na versão alpha quanto na beta e as primeiras implementações em
laboratório e em clientes do Samba 4 em suas versões estáveis, faz-se necessário citar as fontes que
me serviram de apoio, estudos e que ajudaram a chegar numa implementação mais perfeita o
possível do Samba 4 em ambientes Debian e Ubuntu.

Wiki oficial do Samba: https://wiki.samba.org
Documentação do Samba: http://www.samba.org/samba/docs/
Ubuntu Forums: http://ubuntuforums.org