Imprimir esta página
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