segunda-feira, 6 de maio de 2013

Samba 4 (Active Directory) no Debian/Ubuntu Server

Samba 4 (Active Directory) no Debian/Ubuntu Server

Introdução / Preparação / Dependências

Primeiramente, gostaria de agradecer aos leitores desse tão renomado site de software livre e agradecer também à equipe de desenvolvimento do Samba, que com sua última versão, possibilitou a criação de um domínio Active Directory, tornando a vida dos administradores de redes mais simples e mostrando que o GNU/Linux também tem a robustez do seu eterno rival.

Todos sabemos e conhecemos o sacrifício que é configurar o Samba com o OpenLDAP, que depois de configurado, fica uma beleza, mas ainda assim, não é tão bom quanto o Active Directory da MS. Porém, com esse novo modo de pensar do time Samba.org, temos em primeira mão o Samba 4, ou melhor dizendo, o nosso Active Directory open source.

Nesse artigo, vou mostrar como instalar e configurar o Samba 4, mostrando um pouco do meu conhecimento sobre a ferramenta e direi também algumas melhores práticas, porém, ressalto que o foco é a instalação do Samba 4. Assim, este artigo deverá servir como um guia de instalação.

Preparação do servidor

Bom, como falei antes, o servidor deverá ter as particularidades de cada empresa, no meu caso, eu utilizo o sistema de arquivos com RAID + LVM para facilitar a minha manutenção. Vou colocar aqui a configuração que utilizei para fazer os testes:
  • / → 30 GB (ext4) - Onde será instalado o Samba 4.
  • /home → 47 GB (ext4) - Onde será feito o controle de quota de disco.
  • SWAP → 4 GB.

Instalando dependências

Tendo particionado o seu sistema de arquivos, vamos para a instalação das dependências, lembrando que eu testei e configurei em sistemas Debian e Ubuntu server, então, para outras distribuições, a instalação é diferente, porém, a instalação e configuração do Samba 4 não difere.

# 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

Caso esteja utilizando outra distribuição, favor verificar a instalação das dependências no site oficial do Samba.org e procurar sobre a sua distribuição:

Após feito a instalação das dependências, vamos fazer a configuração do sistema de arquivos para receber o Samba 4.

Nas dependências, instalamos o "attr", que dará suporte a recursos avançadas do Samba 4. Também devemos ter um sistema de arquivos que suporte ACL, pois ela nos dará mais possibilidades de configuração de permissões especiais do Active Directory. E a opção de "barrier=1", que nos dá a segurança para que as transações do "tdb" e "ldb" sejam realizadas de forma segura, prevenindo assim, um erro por falha de energia que pode corromper do banco de dados do AD.

Vamos então ao fstab (Obs.: muito cuidado ao mexer no fstab, pois você poderá deixar o sistema não inicializável).

* Outra dica: o ideal é que o sistema de arquivos seja ext3, ext4 ou superior, no meu caso, estou utilizando o ext4.

$ sudo vim /etc/fstab

Localize a linha que monta o seu sistema de arquivos /home e modifique-a para a seguinte forma:

/dev/sdb1    /home     ext4   user_xattr,acl,barrier=1   1  1


Nesse caso eu adicionei apenas "user_xattr,acl,barrier=1", como expliquei anteriormente, agora vamos remontar e testar se as modificações estão OK?

# mount -o remount,rw /home

Testes no sistema de arquivos:

# touch test.txt
# setfattr -n user.test -v test test.txt
# setfattr -n security.test -v test2 test.txt
# getfattr -d test.txt
# getfattr -n security.test -d test.txt


Se estiver tudo correto, os comandos acima retornarão essas respostas, respectivamente:
# file: test.txt
user.test="test"

# file: test.txt
security.test="test2"

Se até aqui estiver tudo certinho, vamos para o próximo passo.


#############################################

Compilação / Kerberos

Depois de ter instalado as dependências, estamos prontos para instalar o Samba 4 e provisionar um domínio. Vamos lá.

Compilando o Samba 4

A compilação é bem simples, basta faze o download do source do Samba 4 no site samba.org. Durante o desenvolvimento deste artigo, o Samba está na versão 4.0.5. Assim, podemos fazer o download através deste link:

Feito isto, vamos descompactar e compilar:

# tar -zxvf samba-4.0.5.tar.gz
# cd samba-4.0.5


Pronto, já descompactamos. Agora vamos fazer a compilação do source.

O time do Samba recomenda que utilize as opções "--enable-debug" e "--enable-selftest", que irão colocar informações de debug para ajudar a identificar bugs, mas as opções são totalmente opcionais, podendo ser executado sem qualquer opção:

# ./configure

Se o comando acima for executado sem nenhum erro, então todas as dependências foram instaladas com sucesso e podemos prosseguir.

Agora basta executar um:

# make

E depois um:

# make install

O tempo de compilação vai depender do hardware que está sendo executado, mas demora um pouco mesmo, se não ocorrer nenhum erro no make ou no make install, então o Samba 4 foi instalado com sucesso. Vamos agora começar a criação do domínio.
Se não especificarmos nada no "./configure", então o Samba será instalado no diretório padrão, que seria /usr/local/samba.

O Samba vem com uma ferramenta chamada "samba-tool", que é equivalente à ferramenta da solução proprietária DCPromo. Vamos aos passos para a criação do domínio.

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

Então, a primeira pergunta é:

Realm []: TESTE.LOCAL

Aqui você deverá inserir o seu domínio totalmente qualificado FQDN, nesse caso, utilizei um domínio local (TESTE.LOCAL). Depois vem a seguinte pergunta:

Domain [TESTE]:

Então, é só confirmar o domínio sugerido. Após, vem a pergunta decisiva:

Server Role (dc, member, standalone) [dc]:

Esta pergunta é onde você irá dizer se é um servidor Domain Controle, se é um Membro, ou se será Standalone, no meu caso, será um controlador de domínio mesmo, então é só aceitar o dc sugerido.

Na próxima pergunta é onde será selecionado como será o DNS do Samba 4, o Samba vem pronto para utilizar o seu DNS interno que faz tudo, inclusive, a inclusão dinâmica de máquinas no DNS.

A grande desvantagem é que não é possível controlá-lo, a vantagem é que não é necessário ter o BIND instalado. Vejamos a seguir:

DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:

Como vemos, ele nos dá quatro opções que se pode resumir em três:
  • SAMBA_INTERNAL;
  • BIND9_FLATFILE;
  • BIND9_DLZ.

Pois sabemos que o Active directory necessita de um DNS para funcionar perfeitamente como eu havia dito anteriormente, o Samba sugere a utilização do SAMBA_INTERNAL, mas também temos outras duas opções, a opção BIND9_FLATFILE que nos dá a flexibilidade de manutenção do DNS.

Só é aconselhável utilizar esta opção quando já tem um DNS funcionando na rede e se você dominar a configuração do BIND 9. Em outros casos, poderá ter a mesma flexibilidade de manutenção do BIND 9, só que deixando o Samba 4 fazer toda a configuração por você, mas, para isto, é preciso instalar outras dependências antes de instalar o Samba 4.

Para utilizar esta opção, consulte o site:

E verifique a parte de DNS dinâmico, nesse caso, vamos aceitar a sugestão e utilizar o SAMBA_INTERNAL.

Então, ele pedirá um DNS para encaminhamento caso o DNS dele não saiba identificar o endereço, normalmente um DNS externo, por exemplo "8.8.8.8" do Google ou outro do seu provedor:
DNS forwarder IP address (write 'none' to disable forwarding) [127.0.0.1]: 8.8.8.8

Depois ele pedirá a senha do Administrator:

Administrator password:

Então, a senha deverá ter um nível de complexidade misturando letras maiúsculas, minúsculas, caracteres especiais (!@#$%) e números. Também deverá ter no mínimo 8 caracteres, e acredito que até 16 caracteres, então a senha que eu irei utilizar aqui é: P4ssW@rd

O Samba irá criar as entradas de DNS, criará o arquivo "smb.conf", e os bancos de dados "tbd", "ldb", e o "schema" do Active Directory.

Ao finalizar, já podemos subir e testar o AD open source com o seguinte comando:

# /usr/local/samba/sbin/samba

Agora vamos testar o domínio e o DNS. Vamos verificar primeiro se o "smbclient" está na mesma versão do Samba 4:

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

Agora que vimos que está na mesma versão, então vamos testar a conexão:

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

O retorno do comando acima é para ser este:
Sharename       Type      Comment
---------       ----      -------
netlogon        Disk
sysvol          Disk
IPC$            IPC       IPC Service (Samba 4.0.5)


Se até agora não ocorreu nenhum erro, então está perfeito. Vamos testar a autenticação:

# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%'P4ssW@rd' -c 'ls'

O retorno desse comando acima, é para ser este:
Domain=[TESTE] OS=[Unix] Server=[Samba 4.0.5]
  .                                   D        0  Thu Jan 10 08:00:36 2013
  ..                                  D        0  Thu Jan 10 08:02:28 2013


Se o retorno foi este, então está tudo certo e podemos testar o DNS.

O DNS deverá ser na mesma máquina do AD open source, então, a máquina deverá estar configurada com IP estático, o "resolv.conf" deverá ser da seguinte forma:

# vim /etc/resolv.conf

domain TESTE.LOCAL
nameserver 127.0.0.1


Com o "resolv.conf" apontando para a própria máquina, então vamos fazer o teste do DNS:

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

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

# host -t A arquivos.teste.local.
arquivos.teste.local has address 192.168.0.2


Se os retornos dos comandos forem bem-sucedidos, então o DNS também está OK, e já podemos configurar o Kerberos para autenticação.

Configurando o Kerberos

Kerberos é um protocolo de comunicação segura na rede com autenticação.

A configuração dele, para funcionar o nosso AD open source, é bastante simples, quando terminamos de fazer o provisionamento, o Samba cria um arquivo do Kerberos que deverá substituir o arquivo que se encontra no "/etc/krb5.conf".

É simples, se a instalação for feita no local padrão, ele gera o arquivo dentro do "/usr/local/samba/shared/setup/krb5.conf", então, é só excluir o "/etc/krb5.conf" e copiar o novo arquivo "/usr/local/samba/shared/setup/krb5.conf" para dentro do "/etc".

Vamos editar o arquivo que copiamos:

# vim /etc/krb5.conf

E substituir o "${REALM}" pelo realm que foi configurado.

* Lembrando de deixar todo ele em letra maiúscula (exemplo: "TESTE.LOCAL") e pronto, o nosso Kerberos já está configurado e pronto para funcionar. Agora vamos testar:

# kinit administrator@TESTE.LOCAL

Irá pedir a senha do Administrator que foi cadastrada no provisionamento, agora vamos verificar se ele gerou o ticket:

# klist

O retorno do comando acima será:
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: administrator@TESTE.LOCAL
 Valid starting     Expires            Service principal
01/10/13 08:39:48  01/11/13 08:39:46  krbtgt/TESTE.LOCAL@TESTE.LOCAL

Se houver ticket, então significa que está tudo certo até o momento, então vamos para o próximo passo.

######################################

Controle de quota de disco

A ideia, desde o início, era instalar o Samba 4, porém, depois de instalado, senti necessidade de criar um controle de quota de disco, pois além do AD, teremos um servidor de arquivos, então, notei que os usuários do Samba 4 não eram identificado pelo sistema operacional, para isto, teremos que adicionar a biblioteca do "winbind" que vem com o Samba 4. Vamos lá.

Agora vamos fazer com que o nosso GNU/Linux enxergue os usuários do domínio corretamente.

Primeiro, temos que criar esses links simbólicos para dentro das bibliotecas do GNU/Linux, na instalação do Samba 4 dentro da pasta "/usr/local/samba/lib/", estão as bibliotecas necessárias:

# ln -s /usr/local/samba/lib/libnss_winbind.so.2 /lib/libnss_winbind.so
# ln -s /lib/libnss_winbind.so /lib/libnss_winbind.so.2


Agora vamos adicionar as entradas "winbind" dentro no arquivo "/etc/nsswitch.conf", ficando assim:

passwd:     files winbind
group:       files winbind
shadow:     files
...


Confirmando que a biblioteca subiu:

# ldconfig -v | grep winbind

Testando se está tudo OK:

# /usr/local/samba/bin/wbinfo -p
Ping to winbindd succeeded

# /usr/local/samba/bin/wbinfo -u
...
Administrator
...

Populando o passwd:

# getent passwd
...
Administrator:x:0:100::/home/Administrator:/bin/false
...

Verificando se ficou tudo certo:

# id Administrator
uid=0(root) gid=100(users) groupes=0(root),100(users),3000004(Group Policy Creator Owners),3000008(Domain Admins)

Agora que o nosso S.O. está enxergando os usuários do domínio, vamos começar as configurações necessárias para as quotas de disco.

Instalando o sistema que controla as quotas:

# apt-get install quota

Agora temos que ir no "/etc/fstab" e editar a linha da partição que queremos controlar as quotas, no meu caso, como estou utilizando o Ubuntu, ficou da seguinte maneira:

UUID=0fc9f11f-7705-44ce-af05-9f8da7b99d4e /home     ext4   defaults, usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0, user_xattr,acl,barrier=1    0    2


Acrescentei somente os parâmetros "usrjquota=aquota.user,grpjquota=aquota.group", "jqfmt=vfsv0", "user_xattr", "acl", "barrier=1", o restante ficou da mesma forma.

Obs.: esse tipo de parâmetro só serve para sistemas de arquivos ReiserFS e ext4 ou superior.

Feito isto, agora é só remontar a partição e o sistema de quotas está pronto para uso:

# mount -o remount,rw /home

Tem uma ferramenta de gerenciamento de quota de disco que é Webmin, é só baixar no site do desenvolvedor. Segue o link:

Após o download da ferramenta para a sua distribuição correta, é só fazer a instalação e já poderá administrar as quotas dos usuários ou grupos pela Web.

Segue abaixo o comando para instalar no Debian/Ubuntu:

# dpkg -i webmin_1.610_all.deb

Se por algum acaso pedir algumas dependências, instalar através do comando:

# aptitude install nome_da_dependencia

Considerações finais

A criação da unidade de compartilhamento de arquivos é muito simples, nesta versão do Samba, o arquivo "smb.conf" pode ser editado no quente, sem a necessidade de um restart depois da alteração, o que é ótimo.

Fiz apenas a criação do diretório no Samba da forma antiga, como no exemplo:

[dados]
          path = /home/dados
          comment = Descrição do que se trata esta pasta
          read only = No
          browseable = Yes
          writeable = Yes


As permissões da pasta deverão ser para o grupo "users" e as permissões deverão ser 770 para a pasta, da seguinte forma:

# chown root:users /home/dados/ -R
# chmod 770 /home/dados/ -R


O restante é configuração do Active Directory, já testei as GPOs e funciona perfeito, já testei as políticas de senhas também funcionou perfeito. Acho que é isso!

A administração do Samba 4 deverá ser feita através do aplicativo de gerenciamento gratuito disponibilizado no site do Samba 4:

Ou, também poderá ser gerenciado pela ferramenta em modo texto que vem instalada com o Samba:

Qualquer dúvida, posta aí!

6 comentários:

  1. Velho to num dilema hehehe

    Já fiz e refiz todos os passos inclusive os testes e tudo funciona, até uma GPO tosca pra trocar o papel de parede eu fiz e funcionou.
    O único problema é quando crio os compartilhamentos, os mesmos não ficam disponíveis, não tenho acesso a eles. A aba se segurança também fica oculta.
    Os únicos que eu consigo mexer é o SYSVOL e NETLOGON os demais que eu crio ficam sem acesso.
    Já passou por isso?
    E eu testei no debian e no centos e o erro é o mesmo...

    ResponderExcluir
  2. Ei cara, que tal pelo menos citar a fonte de onde pegou o conteúdo?

    ResponderExcluir
  3. mas aleém de criar as pastas compartilhadas vc criou o compartilhamento no smb.conf???

    ResponderExcluir
  4. Faltou referênciar a fonte onde pegou o conteúdo
    http://www.vivaolinux.com.br/artigo/Samba-4-Active-Directory-no-DebianUbuntu-Server/?pagina=1

    ResponderExcluir
  5. Ola. Primeiramente parabéns pelo ótimo tutorial. Estou utilizando o Samba4 +- em produção(apenas em um setor da empresa),
    e ate o momento estou com apenas um problema: +- de 5 em 5 dias o serviço de DNS Interno não resolve os nomes do servidor DNS que esta em foward.
    Ai preciso reiniciar o serviço do Samba4 pra voltar a funcionar. No caso tem +- 180 maquinas utilizando o serviço de DNS do Samba4
    e apenas umas 6 utilizando propriamente o serviço de domínio e de compartilhamento de arquivo desse servidor Samba4. Alguém ja passou por isso?

    Deste ja, Obrigado.

    ResponderExcluir
  6. Uma dúvida... No tópico referente a quota, aquele link simbólico para as bibliotecas do winbind só funciona para a versão do samba compilado. Como seria para a versão que é baixada diretamente do repositório debian?

    ResponderExcluir