You are on page 1of 10

Samba 4: implementando um domnio

(usando SAMBA_INTERNAL)
ltima Atualizao deste artigo: 28 de Abril de 2014
* Adicionada a opo use-rfc2307 interactive no comando de provisionamento de domnios
devido a constantes erros de falta de acl;
* Corrigidas algumas linhas que davam interpretao dbia (por exemplo, uma hora aprecia
MINHAREDE.INTR e em outra aparecia MINHAREDE.INTRANET);
* Tutorial testado e aprovado para ser usado nas verses 4.0.x e nas verses 4.1.x at a 4.1.7;
* Tutorial originalmente montado em Debian 6 e Debian 7, porm pode funcionar em
implementaes no Ubuntu tambm;

Salve, galera! Tudo em riba?
Dando continuidade as aulas de Samba 4, eis o segundo e aguardado artigo da srie toda: como
implementar a funo de AD DS no Samba 4.
ndice de artigos
I - Samba 4: Instalao (Debian 6 Squeeze e Debian 7 Wheezy)
II - Samba 4: implementando um domnio (usando SAMBA_INTERNAL) Voc est aqui!

O que ser ensinado neste artigo
Implementar um domnio no Samba 4 com um servidor DC e usando SAMBA_INTERNAL para
I
resoluo de DNS;
Ajustes incrementais para o funcionamento do domnio;
I
Configurar o Kerberos;
I
Configurar NTP;
I
Como de praxe, trago uam srie 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 seo de
Troubleshooting com os problemas mais comuns durante as etapas deste segundo artigo.

Lembretes
Se os comandos aqui no funcionarem, muito provavelmente voc no adicionou os diretrios /bin e
/sbin da instalao do seu Samba 4 dentro da varivel PATH do seu Linux. No primeiro artigo da
srie eu ensinei como resolver estre probleminha.
Recapitulando os dados bsicos de nossa instalao:
Nome do servidor: candeia
IP do servidor: 192.168.1.250
Domnio: minharede.intra
Local onde instalarei o Samba 4: /opt/samba
Verso utilizada: 4.1.2 e posteriormente 4.1.6 (funciona com todas as anteriores estveis da srie
4.0.x e com as 4.1.x at a verso 4.1.7).
Introduo
Antes de dar incio a implementao de um novo domnio, vamos relembrar alguns conceitos chaves
em cima das informaes que o Samba 4 nos requisitar durante o provisionamento do servidor AD e
de um domnio.
Como em qualquer servidor AD, um servidor com Samba 4 pode assumir trs papeis distintos. Cada
qual tm a sua funo especfica. Vejamos:
DC: o sevidor controlador de domnio, o principal para esta funo.
Member: um servidor membro do domnio. Ele pode ou no ser um servidor ADDS.
Standalone: Um servidor que fica fora da rede ou do domnio.
Todo servidor AD necessita de um servio de DNS. No Samba 4 so possveis quatro opes de
configurao:
SAMBA_INTERNAL: O Samba 4 conta com uma resoluo interna de DNS bastante completa. O
nico inconveniente que no possvel manipular este controlador de DNS, ou seja, no possvel
realizar manipulaes avanadas e muito especficas. a opo mais utilizada.
BIND9_DLZ: Integra o servidor Samba 4 com um servidor BIND9 instalado na mesma mquina
utilizando DLZ. A vantagem que o BIND9 robusto, permite configuraes complexas e
gerenciamento. A grande desvantagem que ainda h um nmero grande de relatos de problemas
de implementao e funcionamento do Samba 4 com o BIND9 no mesmo servidor, principalmente
em servidores Debian como por exemplo, problemas envolvendo o prprio DLZ e seus drivers.
BIND9_FLATFILE: Integra o servidor Samba 4 com um outro servidor BIND9 j existente na rede.
Tambm fornece flexibilidade na configurao. No a opo mais utilizada de todas as trs.
Provisionando um novo domnio
Para configurar um novo domnio, digite o comando:
# samba-tool domain provision --use-rfc2307 --interactive
A opo use-rfc2307 habilita o Samba a armazenar automaticamente os atributos posix e tambm
cria informaes NIS no AD, informaes estas que permitem que voc administre UIDs (User IDs) e
GIDs (Group IDs) e outras opes Unix. A ltima opo faz com que o comando seja rodado de forma
interativa.
Aps utilizar estas duas opes em conjunto, o erro relacionado a no existncia de ACLs no meu
/etc/fstab simplesmente sumiu e o domnio foi provisionado sem qualquer errinho.
Sero solicitadas algumas informaes que voc dever digitar. Vejamos:
Realm: digite o FQDN do seu novo domnio. Ex.: minharede.intra
Domain: Somente o primeiro nome do domnio. Exemplo: minharede
Server Role (dc, member, standalone) [dc]:vamos escolher dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE)
[SAMBA_INTERNAL]: A ttulo de exemplo, vamos pegar o padro sugerido, ou seja,
SAMBA_INTERNAL. Mais para frente ensinarei com mais detalhes as configuraes 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 usurio 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 no 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
pblico que tambm resolva nomes, comente a linha que faz referncia 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 domnio
Primeiramente, devemos iniciar o Samba (o Samba 4 ainda no auto inicializvel, algo que
corrigiremos no prximo artigo). Para iniciar o servidor SAMBA no modo standard:
# samba
Vamos checar qual a verso 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 sada 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 so essenciais para o funcionamento da estrutura do AD. No
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 sada 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 atravs 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 tambm.

Vamos checar todos os processos que esto sendo executados pelo Samba:
# ps aux | egrep samba
A sada 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
Aps os testes com o Samba, devemos testar o DNS tambm.
Testando o DNS
Os procedimentos aqui valem para qualquer tipo de implementao de DNS, sobretudo para
SAMBA_INTERNAL e BIND9_DLZ.
O primeiro teste simples a ser realizado com o nslookup apontando para o nosso domnio.
# 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 trs testes so primordiais para verificar se tudo est OK com a resoluo de DNS do nosso
servidor SAMBA. Se tudo estiver OK, surgiro 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 configurao do Kerberos para funcionar com o Samba 4 basante simples. To logo terminamos
de prover o novo domnio, o Samba cria o arquivo /samba/shared/setup/krb5.conf em sua pasta. Este
arquivo dever substituir o /etc/krb5.conf.
Antes de qualquer alterao drstica, crie uma cpia 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 no mova de lugar) o arquivo padro do Samba 4 para o /etc.
# cp /opt/samba/share/setup/krb5.conf /etc/krb5.conf
Vamos editar o arquivo que copiamos. A nica alterao a ser feita que substituiremos o
{REALM} encontrado no arquivo pelo nome do domnio que criamos.
# vim /etc/krb5.conf
[libdefaults]
default_realm = MINHAREDE.INTRA
dns_lookup_realm = false
dns_lookup_kdc = true
Aps 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 mximo, voc
tambm receber uma notificao da data de expirao 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, ento 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 autenticao no Samba utilizando o token do Kerberos:
# smbclient -k //candeia.minharede.intra/netlogon -c 'ls'
A sada 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 configurao opcinal pela documentao oficial do
sistema.
Caso o seu servidor no possua o servio 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 contedo e adicionar as linhas a
seguir (mtodo 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
Aps salvar e sair do arquivo, reinicie o servio de NTP:
# /etc/init.d/ntp restart
Precisamos verificar se o servio 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 sada do comando for a apresentada logo acima ou algo parecido, est tudo OK. Para finalizar
esta etapa, basta configurar corretamente a permisso do arquivo do NTP existente no diretrio 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: no h um compilador de C instalado no seu Linux. Siga o passo Preparando o terreno
que faz referncia ao GCC para resolver este problema.

B) Aps 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 instalao.
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 diretrio no encontrado"
Para resolver este problema, foi necessrio 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) Aps 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 aps 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 partio raiz (/) do seu sistema.
Vide o passo que ensina como proceder nesta configurao.
Outra causa provvel que voc pode no ter utilizado as opes use-rfc2307 interactive no
comando samba-tool domain provision.

E) Tentei refazer o domnio, 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, seno ao refazer o processo voc ter diversos erros:
# rm /opt/samba/etc/smb.conf

Bibliografia
Alm de todo o conhecimento e toda a experincia de anos com o Samba 3.x, estudos (e um bocado
de stress) com o Samba 4 tanto na verso alpha quanto na beta e as primeiras implementaes em
laboratrio e em clientes do Samba 4 em suas verses estveis, faz-se necessrio citar as fontes que
me serviram de apoio, estudos e que ajudaram a chegar numa implementao mais perfeita o
possvel do Samba 4 em ambientes Debian e Ubuntu.

Wiki oficial do Samba: https://wiki.samba.org
Documentao do Samba: http://www.samba.org/samba/docs/
Ubuntu Forums: http://ubuntuforums.org

You might also like