(51) 2160.9170
  • Blog SOULinux

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

Active Directory com SAMBA 4 - Parte 1

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

  • Um computador ou máquina virtual com instalação mínima do CentOS 7 e estações com Windows 10 que serão ingressadas no respectivo AD.
  • Configurações básicas de rede previamente configurada e acesso a internet. Caso necessite auxílio para configuração, confira o tutorial “Configuração de Rede (CentOS 7)”, disponível em: http://soulinux.com/blog/item/9-configuracao-de-rede-hostname-e-dns-no-centos-rhel-7.

 

  

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: soulinux.local) <Hostname>: Nome de seu servidor (ex: srv-ad1)
<Dominio>: Seu Domínio (ex: soulinux) <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: soulinux.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.soulinux.local srvarquivos.soulinux.local 389 as _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.soulinux.local.

Checking 0 100 389 srvarquivos.soulinux.local. against SRV _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.soulinux.local srvarquivos.soulinux.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

 

Itens relacionados