Home / Dicas e Tutoriais / Crie seu AD com Samba no Ubuntu 14.04

Crie seu AD com Samba no Ubuntu 14.04

Olá pessoal,

Uma das coisas que fiz em meus laboratórios há algum tempo, mas havia me esquecido de publicar aqui, foi criar um Controlador de Domínio Primário em minha rede com Samba e colocar algumas máquinas nesse domínio.

Este serviço é muito comum em empresas utilizando servidores Windows. O software do Windows que realiza este serviço é o Active Directory, mas no Linux faremos isso com o Samba que além de servidor de arquivos pode ser Controlador de Domínio.

Desde a versão 4 do Samba ele passou a ter total compatibilidade com o AD do Windows, tornando possível realizar as mesmas tarefas de gerenciar um domínio que faria no Windows, pois até mesmo as ferramentas administrativas que usará para gerenciar seu domínio serão as do Windows realizadas remotamente de dentro de um Desktop Windows, mas vamos lá mostrar na prática.

…mas antes:

Algumas definições via Wikipedia:

AD: Active Directory:

O Active Directory é uma implementação de serviço de diretório no protocolo LDAP que armazena informações sobre objetos em rede de computadores e disponibiliza essas informações a usuários e administradores desta rede. O Active Directory é um software da Microsoft utilizado em ambientes Windows.

Caso precise, você pode querer saber também o que é o Kerberos.

Agora sim!

Instalação

Observações Importantes!

Este tutorial não é recomendado para usuários iniciantes, ou seja, é preciso saber o que deseja fazer e porquê vai fazer isso, possuir algum conhecimento de conceitos de infraestrutura de TI e redes, e de preferência realizar a instalação em uma máquina virtual (com snapshot antes da instalação, pois aí você volta o snapshot se algo der errado).

Também é importante salientar que quando chegar o momento de definir a senha do AD, use uma senha forte, ou seja, com mais de 7 caracteres e de preferência, com números, algum caractere maiúsculo e caracteres especiais, simples exemplo: Laranja#2016. E anote suas senhas para não esquecer.

São boas práticas de administradores.

1 – Configure IP estático e nome do seu host e AD.

Defina a configuração conforme sua rede. No exemplo a seguir, minha rede é 192.168.0.0, e o nome de minha máquina e ad será “ad” e o nome da minha máquina será “cleuber.local”, então o FQDN (Fully Qualified Domain Name) será “ad.cleuber.local”.

Caso você esteja usando Ambiente Gráfico, pode fazer isso via aplicativo de configuração de rede de seu Ubuntu, ao lado do relógio.
Caso seja sem Ambiente Gráfico, use o editor de texto, como o “vi” ou “nano”, e edite este arquivo de acordo com a sua rede, conforme exemplo abaixo (usarei o “nano”, lembrando que com o nano, você depois de editar o arquivo de texto, salva-se com Ctrl+O e fecha-se com Ctrl+x):

Primeiramente logando como root, e depois já configurando a rede.

sudo su
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.0.seuip
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.7
dns-nameservers 192.168.0.seuip 8.8.8.8

(este segundo  um servidor de DNS na nuvem, no caso este 8.8.8.8  o do Google, mas poderia ser o 208.67.222.222 ou 208.67.220.220, que  o do OpenDNS)
dns-search cleuber.local (este será o nome do domínio)

nano /etc/hosts
127.0.0.1 localhost
192.168.0.seuip ad.cleuber.local
echo ad.cleuber.local > /etc/hostname

2 – Comece instalando alguns pacotes:

apt-get install gcc flex make gdb python-ldap python-dev libacl1-dev

3 – Baixe o samba 4, e descompacte-o.

wget www.samba.org/samba/ftp/stable/samba-4.1.10.tar.gz
tar zxvf samba-4.1.10.tar.gz

4 – Realize a instalação

Acesse a pasta onde descompactou

cd samba-4.1.10

Faça o build do código fonte, prepare a instalação e instale com estes 3 comandos. Demora um pouco até terminar.

./configure --enable-debug --enable-selftest
make
make install

5 – Levantando o Domínio

hostname (para ver o nome da sua máquina)

O comando que iremos usar trará um wizard para que você escolha opções de configuração do seu AD. Depois do comando, preencha o que o wizard pedir, quando aparecer um item dentro de “[ ]” quer dizer que é o padrão e você poderá teclar “Enter” para confirmar o padrão, ou se preferir digitar o padrão.

/usr/local/samba/bin/samba-tool domain provision

•    Realm: DOMAIN.LOCAL (aqui você coloca o nome do seu domínio)
•    Server Role (dc, member, standalone) [dc]: Enter para o padrão “dc”
•    DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DL2, NONE) [SAMBA_INTERNAL]: Enter para o padrão “SAMBA_INTERNAL”
•    BND fowarder IP address (write ‘none’ to disable fowarding) [192.168.0.1]: Caso o dns dele não consiga resolver o nome das máquinas, vamos usar o padrão que é o gateway do seu roteador.
•    Administrator password: agora defina sua senha

Agora basta esperar. Ele mostrará o resultado com um resumo ao final do processo parecido com isso:

Server Role:       active directory domain controller
Hostname:          cleuber
NetBIOS Domain:    ad
DNS Domain:        cleuber.local
DOMAIN SID:        “aparecerá um monte de números”

7 – Ative o serviço

Ative com o comando abaixo

/usr/local/samba/sbin/samba

8 – Verifique e teste tudo

8.1 – Verifique os processos do Samba com o comando abaixo:

ps -aux | grep samba

8.2 – Verifique a versão dos pacotes do samba server e cliente:

/usr/local/samba/sbin/samba -V
/usr/local/samba/bin/smbclient –V

8.3 – Verifique o LDAP

host –t SRV _ldap._tcp.cleuber.local

Se der certo retornar uma mensagem assim:

“_ldap._tcp.cleuber.local has SRV record 0 100 389 ad.cleuber.local.”

8.4 – Verifique o AD:

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

A saída deve ser algo como esta:

Sharename       Type      Comment
 ---------       ----      -------
 IPC$            IPC       IPC Service (ad server (Samba, Ubuntu))
 print$          Disk      Printer Drivers
 Domain=[CLEUBER] OS=[Unix] Server=[Samba 4.1.10]

Server               Comment
 ---------            -------
 Workgroup            Master
 ---------            -------

8.5 – Verifique o serviço do Kerberos e a autenticação:

host –t SRV _kerberos._udp.cleuber.local

Se der certo retornar uma mensagem assim:

“_kerberos._tcp.cleuber.local has SRV record 0 100 88 ad.cleuber.local.”

Autenticação:

/usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%”suasenha” -c ‘ls’

E entre com seu usuário e senha.
Se a autenticação der certo, será retornada uma resposta como esta abaixo:

.        D    0  Wed Jul 30   11:44:52 2014
 ..      D    0  Wed Jul 30   11:45:06 2014

9 – Rede Novamente, pós-instalação:

Faça mais uma configuração de Rede para resolução do nome do seu AD. (Esta deve ser feita depois de instalar o AD, para editar o arquivo de configuração do mesmo).

echo domain CLEUBER.LOCAL >> /etc/resolv.conf
nano /usr/local/samba/etc/smb.conf

Na sessão “[Global]”, altere a linha “dns fowarder” para:

dns fowarder = 8.8.8.8 (ou outro servidor de DNS na nuvem ou local se houver)

10 – Configure o nome do AD no Kerberos

nano /usr/local/samba/share/setup/krb5.conf

Mude a linha “default.realm”, substituindo o texto após o “=”, para default.realm = CLEUBER.LOCAL (no meu caso)

11 – Crie o diretório para os usuários

mkdir –m 770 /Users
chmod g+s /Users
chown root.users /Users

Edite as configurações do samba

nano /usr/local/samba/etc/smb.conf

Vá até a sessão “[Sysvol]” e edite o caminho “path” para:

path = /usr/local/samba/var/locks/sysvol

E adicione a seguinte sessão abaixo:

“[Users]”
directory_mode: parameter = 0700
read only = no
path = /Users
csc policy = documents

Ok! AD no AR!

Agora Reinicie a máquina.

12 – Colocando uma máquina Windows no domínio.

12.1 – Altere o DNS da máquina com Windows para o IP do seu Ubuntu Server

12.2 – Teste se já está se comunicando com um ping no nome e IP do server

12.3 – Em propriedades da máquina tire-a do Workgroup e coloque-a no domínio (no meu caso cleuber.local), aparecerá uma mensagem “Bem Vindo ao Domínio Cleuber.local!” e solicitará para reiniciar a máquina.

Observe na imagem abaixo todas estas coisas já feitas.

samba-client

12.4 – Após reiniciar a máquina, faça login utilizando seu administrador do domínio, e pronto. No caso do Windows 8.1, você clicará na seta para trás na tela de login, escolherá “Outro Usuário” e colocará o nome do seu dominio\nome do seu administrador.
(No meu caso, cleuber.local\Administrator).

13 – Administre o seu Domínio, instalando as Ferramentas Administrativas

Para usar sua máquina Windows para administrar o domínio é preciso instalar as Ferramentas Administrativas.

13.1 – Baixe-as através dos seguintes links de acordo com a versão do seu Windows.

Download ferramenta para XP: http://www.microsoft.com/en-us/download/details.aspx?id=6315
Download ferramenta para Win7: http://www.microsoft.com/en-us/download/details.aspx?id=7887
Download ferramenta para Win8: http://www.microsoft.com/en-us/download/details.aspx?id=28972

13.2 – Instale-a em seu Windows. (de acordo com a versão do seu Windows)

13.3 – Depois de instaladas vá ate “Painel de Controle/Ferramentas Administrativas/Usuários e Computadores do Active Directory, e abra-o. (Ou procure por ele no Start Menu do Windows). Sugiro criar um atalho na Area de Trabalho ou barra de tarefas para facilitar a abertura nas próximas.

13.4 – Testando Criação de “OUs” (Unidades Organizacionais) e usuários, conforme as 3 imagens abaixo:

smaba1

samba8
samba2

14 – Testando o login de usuário criado:

Após ter criado o primeiro usuário, pode fazer logoff do Administrador do dominio, e faça login com o novo usuário. Clique em “Outro Usuário” Novamente. Eu criei o usuário “cleuber.hashimoto”.

samba3 samba4

…Espere o Windows preparar seu ambiente.

samba6

samba5OK!
Login com usuário do domínio recém-criado testado e funcionando!

samba7

Conclusão:

Acabamos de criar um AD através do Ubuntu similar a um AD do Windows Server 2003, e totalmente compatível com as Ferramentas Administrativas para gerenciamento a partir de máquinas com Windows, o que é uma solução excelente para empresas pequenas que não desejam pagar pela licença de um servidor Microsoft para fazer isso. Naturalmente em ambientes que usarão mais recursos e servidores Microsoft, torna-se recomendável adotar a plataforma completa para todos os servidores.

Abraços,

Cleuber

About Cleuber

Cleuber Silva Hashimoto. Administrador

32 comments

  1. Amigo, parabéns, ficou bom demais!

    Posso adaptar esse tutorial para o Debian?

    Acredito que sim não é?

    Pois um é *filho* do outro, rs..

  2. Érik Tavares

    Cleuber alguns links para fora do seu site não estão sendo redirecionados.

  3. Prontinho, links corrigidos. Valeu!!! 🙂

  4. Mas o site da Microsoft está super lento… 😛

  5. Boa tarde, primeiro quero lhe parabelizar pelos tutoriais. Estou com um problema que ja se estende por mas de um mes com o tutorial Crie seu AD com Samba no Ubuntu 14.04, tomei coragem e estou agora solicitando a sua ajuda. e o seguinte, apos o comando ” /usr/local/samba/bin/samba-tool domain provision”da o seguinte resultado :

    “root@SRV:~/samba-4.1.10# /usr/local/samba/bin/samba-tool domain provision
    Realm [AGC.LOCAL]:
    Domain [AGC]:
    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) [127.0.1.1]: 192.168.1.1
    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=agc,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 – 0000052D: Constraint violation – check_password_restrictions: the password does not meet the complexity criteria!
    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@SRV:~/samba-4.1.10# /usr/local/samba/bin/samba-tool domain provision
    Realm [AGC.LOCAL]:
    Domain [AGC]:
    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) [127.0.1.1]: ^[OF^C
    root@SRV:~/samba-4.1.10# /usr/local/samba/bin/samba-tool domain provision
    Realm [AGC.LOCAL]:
    Domain [AGC]:
    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) [127.0.1.1]: 192.168.1.1
    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=agc,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 – 0000052D: Constraint violation – check_password_restrictions: the password does not meet the complexity criteria!
    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@SRV:~/samba-4.1.10# ”
    E não mostra o resultado com um resumo ao final do processo. Poderia me ajudar
    desde ja agradeço

  6. Boa tarde, o meu está dando o seguinte erro depois de definir a senha.

    ERROR(): Provision failed – ProvisioningError: guess_names: Domain ‘CONCORDIA’ must not be equal to short host name ‘CONCORDIA’!
    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 2019, in provision
    sitename=sitename, rootdn=rootdn, domain_names_forced=(samdb_fill == FILL_DRS))
    File “/usr/local/samba/lib/python2.7/site-packages/samba/provision/__init__.py”, line 616, in guess_names
    raise ProvisioningError(“guess_names: Domain ‘%s’ must not be equal to short host name ‘%s’!” % (domain, netbiosname))

  7. Brother, apresentou uns erros sinistros depois do passwrd
    se possível me passe seu email pra eu te mostrar

  8. as configurações vieram tranquilas, porem ja no final apareceu o seguinte erro: alguem sabe como resolver. O erro aconteceu na etapa 5

    Setting up sam.ldb users and groups
    ERROR(ldb): uncaught exception – 0000052D: Constraint violation – check_password_restrictions: the password is too short. It should be equal or longer than 7 characters!
    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@servidor:~/samba-4.1.10#

  9. Cleuber, bom dia.

    Em uma rede com aproximadamente 100 máquinas, você acha válido usar um AD no linux, ou seria mais seguro colocarmos no Windows 2008 server que temos (licenciado) O problema é que o servidor é um servidor de anco de dados com o Oracle instalado nele… receio que fique pesado colocar o AD nele e mais o servidor de DNS. A propósito, há a necessidade de ter o servidor de DNS para se criar o AD no linux?

    Agradeço a atenção

    • Bom dia Adolfo.
      Quanto a sua pergunta sobre segurança: Se você estiver usando Windows vai depender de alguns fatores: Se você mantém seu servidor atualizado (versão do sistema e updates), com o firewall ativo e bem configurado nele, se você tem um bom antivírus corporativo instalado nele (e não gratuito), se você tem um bom Firewall de borda com antivírus nesse firewall também e outras funcionalidades de segurança.
      Sobre se é seguro pela quantidade de usuários: Até 500 máquinas clientes, é possível rodar bem um AD em um servidor Linux, mas mais que isso não recomendo. Então seria tranquilo para 100 users. Porém, lembrando que esse método usando Linux, é para uma utilização simples do AD, gestão de usuários e grupos. Se você pensa em ter um conjunto mais abrangente de possibilidades, novos recursos e tudo mais que a Microsoft oferece em integração com outros produtos deles, é mais interessante adquirir licenciamento para um server Microsoft mesmo.
      Obs. Já estamos na versão 2012 R2 do Windows Server, (e prestes a chegar a versão 2016), então, seria interessante vocês adquirirem a versão 2012, caso estejam considerando criar um AD no Windows, configurar DNS Server e tudo mais, e sim, recomendo usar um AD em um servidor separado desse que vcs usam em produção.
      Quanto a última pergunta, vc não precisa que o servidor de DNS seja no mesmo server que o AD, mas é importante você ter um servidor de DNS interno na sua empresa.
      Beleza!? Abraço!

  10. Boa tarde, muito obrigado pelo tutorial, tenho uma dúvida. Um servidor DHCP pode ser um controlador de domínio também? Digo isso pq quando faço um um server DHCP eu tenho que deixar o endereço da minha eth0 em DHCP. Entretanto nesse tutorial esta setado para um IP estático. Obrigado!

  11. Boa noite, muito bom o tutorial e bem explicado. Vou testar em virtualbox pra ver como fica. Gostaria de uma versão para Debian 7.x/8.x também. Mas tenho uma pergunta.
    Estou tentando criar uma intranet, tudo para fins educacionais. Quais serviços preciso configurar?
    Equipamentos: 1 PC Debian 7, 2 PCs Windows para usuarios. No trabalho, laboratório: 1 PC Debian 8, uns 12 PCs para acesso internet, intranet e compartilhamento de arquivos.
    Mais dúvidas. Posso apontar o ip do AD direto no roteador, certo? Assim não preciso configurar em cada host o dns.

  12. vagner de souza

    boa noite cleuber estou com algumas duvidas vc pode me ajudar…

    tentei seguir este tutorial mas deu erro em algumas partes.

    aguardo seu retorno

  13. vidal gonçalves damasceno

    Como iniciar o samba automaticamente quando inciar o Ubuntu. Poderia me ajudar?

  14. Vinicius Dombroski

    Bom dia, Eu Ja possuo um servidor samba4 fazendo a função de compartilhamento de arquivos com clientes windows. gostaria de saber como proceder para apenas integrar esta AD para utilizar as GPO

  15. Olá, primeiro quero dar parabéns pelo conteúdo, muito bacana. Tenho uma dúvida, posso usar o usuários criados no AD para gerenciar permissão de acesso a pastas compartilhadas a partir do Linux?

Leave a Reply

x

Check Also

Elementary OS 6 Odin Lançado – Confira as Novidades

Desenvolver um sistema operacional não é ...