(51) 99877.8389
(51) 3022.5100
  • Blog COMDESK

    Acompanhe Artigos, Notícias e nossos Casos de Sucesso.
Segunda, 27 Mai 2019

Active Directory com SAMBA 4 - Parte 1

Escrito por

SAMBA é um programa de computador, Desenvolvido inicialmente por ​Andrew Tridgell no ano de 1991, que simula um servidor Windows em um sistema operacional do tipo Unix (Linux, FreeBSD, MAC OS), permitindo que seja feito gerenciamento e compartilhamento de arquivos em uma rede Microsoft. Com a evolução do código, o software agregou outras funcionalidades, indo muito além do simples compartilhamento de arquivos e assumindo um papel mais completo e complexo nas redes corporativos.

Atualmente o SAMBA está na versão 4.x e, nesta versão, teve o seu código inteiramente reescrito, permitindo trazer inovações que eram muito esperadas, como as tecnologias do ​Active Directory (AD) da ​Microsoft. Houveram também mudanças na interação entre os serviços OpenLDAP, Kerberos e de DNS, o qual passou a ser integrado ao ​software e pode ser configurado internamente ou com um plugin - BIND ou BIND DLZ.

Esta reestruturação equiparou o servidor SAMBA 4 aos servidores da ​Microsoft, sendo possível a implementação de um servidor ​open source com o mesmo status de ​um Windows Server.

 

Neste artigo é explicado como instalar e configurar um servidor com SAMBA versão 4.x para poder oferecer um servidor Active Directory em uma rede de computadores. Este servidor permite a gestão de usuários, grupos, permissões, compartilhamentos, políticas (GPOs), etc. 

  

REQUISITOS

 

  

REFERÊNCIAS

 

<ethX>: Nome Interface de Rede (ex: ens18) <Gateway>:  IP Gateway de sua Rede (ex: 192.168.9.1)
<EnderecoIP>: Endereço IP do Servidor SAMBA (ex: 192.168.9.3) <DNS1>: DNS do AD (ex: 192.168.9.3, igual ao Servidor SAMBA) 
<MascaraRede>: Sua Máscara de Rede (ex: 255.255.255.0 ou /24) <DNSFirewall>: DNS de sua Rede (ex: 192.168.9.1)
<DominioLocal>: Seu Domínio AD (ex: comdesk.local) <Hostname>: Nome de seu servidor (ex: srv-ad1)
<Dominio>: Seu Domínio (ex: comdesk) <SuaSenha>: Senha administrativa do SAMBA (ex: Ad-123456)

 

 

CONFIGURAÇÕES INICIAIS

 

  • Estando no terminal de seu CentOS 7 e como usuário root, atualize o seu sistema:

sudo yum update 

  • Nesta instalação vamos manter o SELINUX desativado, pois encontramos incompatibilidade com DNS. Edite o respectivo arquivo de configuração:

vi /etc/selinux/config 

  • Estando no arquivo de configuração, altere a linha SELINUX (ex: SELINUX=enforcing e troque por SELINUX=disabled).

#This file controls the state of SELinux on the system.

...

SELINUX=disabled

  • Reinicie a máquina:

init 6

  •  Após o reinício, confira o status do selinux:

sestatus

  • A mensagem de retorno do comando anterior, deve ser:  

SELinux status: disabled

   

  • Sugerimos desativar o firewall desta máquina:

sudo systemctl stop firewalld

sudo systemctl disable firewalld

 

 

INSTALAÇÃO E COMPILAÇÃO

 

  • Como usuário root, instale o repositório "epel" e atualize novamente o seu sistema:

yum install epel-release

yum update 

  • Instalar os pacotes necessários para a compilação do Samba 4:

yum install openldap-devel pam-devel gcc wget libblkid-devel gnutls-devel readline-devel python-devel libaio-devel gdb krb5-workstation setroubleshoot-server setroubleshoot-plugins policycoreutils-python libsemanage-python popt-devel libxml2-devel pkgconfig libacl-devel libattr-devel keyutils-libs-devel zlib-devel perl-ExtUtils-MakeMaker perl-Parse-Yapp cups-devel bind bind-utils bind-sdb bind-devel bind-libs libxslt docbook-style-xsl autoconf python-crypto perl attr quota-devel ctdb-devel krb5-devel acl setools-libs-python setools-libs libpcap-devel libidn-devel libsepol-devel cyrus-sasl-devel avahi-devel mingw32-iconv gamin libcap-devel rpc2-devel glusterfs-devel python-dns e2fsprogs-devel sqlite-devel krb5-user bzip2 perl-Test-Base systemd-devel jansson-devel readline 

  • Download do código fonte (Estável) do Samba 4:

cd /usr/src

wget https://ftp.samba.org/pub/samba/samba-latest.tar.gz 

  • Após o download do arquivo, descompacte, acesse o respectivo diretório e inicie o processo de instalação e compilação:

tar -xzvf samba-latest.tar.gz

cd samba-<VersaoSamba>

./configure.developer

make

make install 

  • Antes de iniciar o provisionamento, faça os respectivos ajustes em relação ao Kerberos. Para não ocorrer um conhecido erro de provisionamento (ERROR(ldb): uncaught exception…).

mv /etc/krb5.conf /etc/krb5.conf.ORI

cp /usr/local/samba/share/setup/krb5.conf /etc/krb5.conf 

  • Inicie o provisionamento do SAMBA 4 como AD, digitando o seguinte:

/usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --use-xattrs=yes --interactive

--use-RFC2307: Este argumento acrescenta POSIX atributos (UID/GID) para o esquema AD. Isto será necessário se você pretende autenticar Linux, BSD, OS X, além de Microsoft Windows.

--use-xattrs = yes: Esse argumento permite o uso de atributos unix estendidos (ACLs) para arquivos hospedados neste servidor. Se você não pretende ter compartilhamentos de arquivos no controlador de domínio, pode-se omitir essa opção (mas isso não é recomendado).

--interactive: Este parâmetro força a execução de forma interativa. 

  • Preencha os campos conforme a sua necessidade e caso as configurações de rede já estejam devidamente configuradas, com exceção do DNS, pressione [ENTER] e aceite o valor padrão. A senha deve ser preenchida com o mínimo de 8 caracteres e deve conter letras (maiúscula/minúscula), números e caracteres de pontuação devido à complexidade de senha estar ativa.

Realm: [<DominioLocal>]

Domain: [<Dominio>]

Server Role: [dc]

DNS Backend: BIND9_DLZ  #Criado para grandes redes, resolve os nomes muito mais rápido.

Administrator password: <Sua-Senha>

 

  • Depois de provisionado, utilizaremos a configuração kerberos gerada. Copie o arquivo de referência do Samba, para o atual arquivo de configuração:

cp /usr/local/samba/private/krb5.conf /etc/krb5.conf 

  • Confira se o seu conteúdo está como o mostrado abaixo:

cat /etc/krb5.conf 

[libdefaults]
default_realm = <DominioLocal>
dns_lookup_realm = false
dns_lookup_kdc = true

 

 

SCRIPT DE INICIALIZAÇÃO

O SAMBA 4 não possui script de inicialização de forma nativa, deve-se então criar um script voltado para o seu respectivo ambiente (CentOS com Systemd). Podemos conferir as instruções diretamente na wiki oficial do projeto: https://wiki.samba.org/index.php/Managing_the_Samba_AD_DC_Service

 

  • Nosso objetivo é criar um script para Systemd, então crie o arquivo “samba-ad-dc.service”:

vi /etc/systemd/system/samba-ad-dc.service 

  • Coloque o seguinte conteúdo:

[Unit]

Description=Samba Active Directory Domain Controller

After=network.target remote-fs.target nss-lookup.target

 

[Service]

Type=forking

ExecStart=/usr/local/samba/sbin/samba -D

PIDFile=/usr/local/samba/var/run/samba.pid

 

[Install]

WantedBy=multi-user.target

 

  • Após criado o arquivo, recarregue as configurações do Systemd:

systemctl daemon-reload 

  • Como é script baseado em Systemd, suas funções de status, parada e inicialização, funcionam da mesma forma. Para iniciar manualmente o script recém-criado, execute o comando:

systemctl start samba-ad-dc 

  • Habilite o script para iniciar automaticamente na inicialização do sistema:

systemctl enable samba-ad-dc 

  • Faça o teste de verificação de conexão com o domínio:

/usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator%<Sua-Senha>

  • A mensagem de retorno deve ser semelhante a: 

Domain=[<DOMINIO>] OS=[] Server=[]
smb: \> 

  • Caso a conexão tenha sido realizada com sucesso, como mostrado na tabela acima, saia do console “smb: \>”, digitando:

exit

 

Obs: Caso esteja utilizando o seu servidor CentOS a partir de uma máquina virtual do Proxmox VE, um erro no comando “kinit Administrator”, deverá ser constatado que para o script, provavelmente por causa de incompatibilidade com interfaces VIRTIO. Para solucionar, utilize o antigo script de inicialização para CentOS 6 (Init Script).

   

 

AJUSTES DNS 

Para a instalação do SAMBA como AD é necessário que o serviço DNS esteja disponível, ou seja, é um pré-requisito (dependência) para a instalação do AD. O AD utiliza o DNS para a nomeação de servidores e recursos, e também para resolução de nomes. Em nosso caso, o controle do DNS fica a cargo do serviço Bind, utilizando a interface DLZ (Dynamically Loadable Zones) onde sempre que o Bind precisar ele vai requisitar ao Samba as informações sobre aquele registro de DNS.

 

  • O arquivo de configuração principal do BIND é o “/etc/named.conf”. Faremos uma cópia desse arquivo para manter o original em caso de problemas:

cp /etc/named.conf /etc/named.conf.ORI

  • Vamos fazer algumas alterações no arquivo de configuração do DNS:

vim /etc/named.conf

  •  Na sessão "options", procure por "listen-on" e adicione ao endereço a opção “any;”.

listen-on port 53 { 127.0.0.1; any; };

  •  Ainda em "options" procure por “allow-query”, adicionando os endereços de rede que terão permissão para consultar o nosso servidor. Nessa configuração, vamos permitir que qualquer host consulte o DNS:

allow-query { any; };

 

  • Caso seja necessário resolver hostnames externos que não são administrados pelo servidor que está sendo configurando, se faz necessário configurar servidores para onde o seu servidor DNS encaminhará esses hostnames. Em "options", crie a seção “forwarders” com uma lista de servidores de encaminhamento. Abaixo, um exemplo onde usamos um outro servidor DNS local (ex: Firewall pfSense) e os servidores de DNS do Google como forwarders:

forwarders {

<DNSFirewall>;

8.8.8.8;

8.8.4.4;

}; 

  • Inclua no final do arquivo o respectivo “named.conf” do SAMBA 4 e saia salvando o respectivo arquivo:

include "/usr/local/samba/bind-dns/named.conf"; 

  • Confira a versão do Bind:

yum info bind 

  • O resultado do comando, deve indicar a versão do Bind:

Plugins carregados: fastestmirror
...
Nome : bind
Arquitetura : x86_64
Versão : 9.9.4
Lançamento : 38.el7_3.3
... 

  • Conhecendo a versão corrente do Bind, deve-se agora descomentar a parte que corresponde a versão do Bind no arquivo de configuração. Edite novamente o "named.conf":

vim /usr/local/samba/bind-dns/named.conf 

  • Retire o comentário correspondente a versão e salve o respectivo arquivo

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

 

  • Adicione o Bind à inicialização do sistema:

systemctl enable named 

 

FERRAMENTA SAMBA-TOOL

 

  • A ferramenta "samba-tool", permite o gerenciamento pelo terminal linux. A fim de poder utilizar este recurso a partir de qualquer diretório do sistema, deve-se criar um script no diretório “/etc/profile.d/“.

vim /etc/profile.d/samba-path.sh 

  • Coloque o seguinte conteúdo neste arquivo:

PATH=${PATH}:/usr/local/samba/bin:/usr/local/samba/sbin

  • Defina permissão de execução para o script.

chmod +x /etc/profile.d/samba-path.sh

  •  Para funcionar as instruções informadas acima, reinicie o sistema:

init 6

 

 

TESTES DOS SERVIÇOS

 

  • Novamente como usuário root, confira se a ferramenta “samba-tool” está sendo executada em qualquer diretório do sistema.

samba-tool

  • Conferindo se serviços estão ativos (running):

systemctl status samba-ad-dc

systemctl status named 

  • Teste o acesso ao domínio "<DominioLocal>" (ex: comdesk.local):

nslookup <DominioLocal> 

  • Caso as etapas anteriores não apresentem erros, vá para a próxima etapa (Testes de Conexão). Caso tenha ocorrido algum erro, confira onde está o problema para proceder com a possível solução. Problemas comuns que podem acontecer nesta etapa: 
- Configuração de rede errada: /etc/sysconfig/network-scripts/ifcfg-<ethX>
- Prioridade na resolução do DNS: /etc/resolv.conf
 
  • Caso faça algum ajuste nas configurações de rede, reinicie a rede e refaça os testes anteriores:

systemctl restart network 

  • Testes de Conexão:

host -t SRV _ldap._tcp.<DominioLocal>.

host -t SRV _kerberos._udp.<DominioLocal>.

host -t A <DominioLocal>. 

  • Estes são os resultados dos comandos acima. Se forem diferentes, provavelmente a configuração DNS apresenta problemas:

_ldap._tcp.<DominioLocal> has SRV record 0 100 389 <Hostname>.<DominioLocal>.

_kerberos._udp.<DominioLocal> has SRV record 0 100 88 <Hostname>.<DominioLocal>.

<DominioLocal> has address <EnderecoIP> 

  • Autenticação Kerberos:

kinit Administrator 

  • Informe a respectiva senha (Ad-123456) e a mensagem de que a senha vai expirar em 41 dias, será mostrada.

Warning: Your password will expire in 41 days on Dia Mes Ano Hora:Minuto:Segundo 

  • Verificar quem já tem ticket:

klist -e 

  • O resultado deve ser semelhante a:

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: Administrator@<DOMINIOLOCAL>

Valid starting Expires Service principal

15-06-2017 12:47:14 15-06-2017 22:47:14 krbtgt/<DOMINIOLOCAL>@<DOMINIOLOCAL>

renew until 16-06-2017 12:47:01, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 

  • Volte a editar o arquivo de configurações do DNS:

vim /etc/named.conf 

  • Na seção "Options", adicione a seguinte chave keytab e salve o respectivo arquivo:

tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab"; 

  • Definir permissão de grupo ao arquivo keytab:

chgrp named /usr/local/samba/private/dns.keytab

chmod g+r /usr/local/samba/private/dns.keytab 

  • Testar DNS:

/usr/local/samba/sbin/samba_dnsupdate --verbose 

  • O resultado deve ser semelhante a:

IPs: ['<EnderecoIP>']

Looking for DNS entry A <Hostname>.<DominioLocal> <EnderecoIP> as <Hostname>.<DominioLocal>.

Looking for DNS entry NS <DominioLocal> <Hostname>.<DominioLocal> as <DominioLocal>.

Looking for DNS entry NS _msdcs.<DominioLocal> <Hostname>.<DominioLocal> as _msdcs.<DominioLocal>.

Looking for DNS entry A <DominioLocal> <EnderecoIP> as <DominioLocal>.

Looking for DNS entry SRV _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.comdesk.local srvarquivos.comdesk.local 389 as _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.comdesk.local.

Checking 0 100 389 srvarquivos.comdesk.local. against SRV _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.comdesk.local srvarquivos.comdesk.local 389

No DNS updates needed

 

 

SERVIDOR NTP (Chrony)

Sincronização de tempo é essencial para o bom funcionamento muitos serviços e aplicativos. O CentOS 7 utiliza como padrão o Chrony, que é uma implementação do protocolo NTP e que atualiza mesmo estando com problemas de rede (caso consiga fazer algumas conexões periódicas).

 

  • Caso não esteja instalado, faça a instalação do Chrony:

yum install chrony 

  • Edite o arquivo de configuração do Chrony:

vim /etc/chrony.conf 

  • Comente as linhas referentes ao pool CentOS (centos.pool.ntp.org) e adicione os servidores NTP do registro.br:

# These servers were defined in the installation:
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server a.ntp.br iburst
server b.ntp.br iburst
server c.ntp.br iburst
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
...
# Allow NTP client access from local network.
#allow 192.168/16
...
# Specify the key used as password for chronyc.
commandkey 1 

  • Após os ajustes, reinicie o serviço:

systemctl restart chronyd 

  • Para monitorar a correção do tempo, os comandos a seguir podem ser utilizados:

chronyc tracking
chronyc sources 

 

 

Após concluídas as etapas de instalação, provisionamento e configuração inicial, deve-se agora partir para a criação dos grupos, pastas e usuários do AD, bem como a configuração do “smb.conf”. Mostraremos esses ajustes na parte 2 deste artigo.

 

 

 

 

 

Links:
https://wiki.samba.org/index.php/Samba_AD_DC_Troubleshooting

https://wiki.samba.org/index.php/Main_Page

 

Proxmox VE
Proxmox VE
Plataforma completa para virtualização a nível empresarial.
www.proxmox.com
pfSense
pfSense
Sistema que possui recursos avançados para controle e segurança de redes.
www.pfsense.org
FreeNAS
FreeNAS
Sistema operacional para NAS (Network Attached Storage).
www.freenas.org
Zabbix
Zabbix
Ferramenta para monitoramento de redes, servidores e serviços.
www.zabbix.org
XenServer
XenServer
Plataforma de virtualização abrangente, com recursos de classe empresarial.
www.xenserver.org
GLPI
GLPI
Ferramenta completa para gestão de ativos e service desk.
www.glpi-project.org
redhat
redhat
Líder no fornecimento de soluções open source para TI corporativa
www.redhat.com.br
Suse
Suse
Sistema Operacional Linux e soluções de código aberto para serviços corporativos.
www.suse.com
Samba
Samba
Software que implementa solução semelhante ao Active Directory da Microsoft.
www.samba.org

Somos especialistas em Open Source

Conforme as empresas, de todos os portes, passam a seguir o filosofia do open source, começa a ficar claro que as vantagens de adotar esse conceito não se restringem somente aos preços.

Diferente do que pensa o senso comum, o open source é uma filosofia alternativa de negócios e não apenas a disponibilização de softwares gratuitos.


O software de código aberto, proporciona maior liberdade, flexibilidade, agilidade e segurança.