Neste artigo é explicado como instalar e configurar um servidor com SAMBA para poder oferecer um servidor Active Directory numa rede Windows. Este servidor deve permitir a gestão de utilizadores, grupos, permissões, partilhas, políticas (GPOs), etc. Isto é, atuar como um servidor Windows 2008R2.

Necessidade

Um servidor com o Windows Server costuma ser o centro das redes em pequenos escritórios e empresas. Existem soluções para novos servidores com preços relativamente baixos, mas mesmo assim podem requerer um investimento de 1500 a 2500€ para máquinas com alguns discos, memória e sistema operativo. Os preços podem disparar mais se quiser um equipamento bom com o desempenho adequado e apto para as mais diversas necessidades. Estes servidores estão desenhados para um ótimo desempenho e durabilidade, e contam com contratos e garantias NBD (Next Business Day) na maior parte dos casos. Portanto, os preços estão mais que justificados se quiser garantia e confiança e não se puder permitir estar vários dias com o servidor parado.

Mas há empresas que podem precisar dalgumas funcionalidades mas não estar em condições de realizar estes investimentos num determinado momento. Podem até ter algum equipamento parado e até assumem que o nível de serviço será aquém do desejado.

Comprar só o sistema operativo Windows Server e tentar instalá-lo num computador pessoal poderá não ser a melhor ideia. O Windows Server tem requisitos muito restritivos quanto aos controladores que incorpora e aceita, e poderá não funcionar corretamente num computador qualquer (os servidores costumam fornecer controladores certificados).

Nestas condições, utilizar uma distribuição Linux e instalar o pacote SAMBA poderá dar a resposta que se pretende.

Não são aqui apresentadas todas as possíveis soluções e estratégias que uma empresa poderá seguir, como por exemplo subscrever os serviços Microsoft Azure.

Requisitos

Um computador com o Linux Ubuntu 18.04LTS Server. O sistema operativo pode ser obtido sem qualquer custo em http://releases.ubuntu.com/18.04/.

A instalação completa só precisa uns poucos Gigas no disco e pode funcionar com 2GB de RAM. É claro que um sistema RAID com discos SSD e 8GB de RAM deverão oferecer melhor desempenho.

Não é dada uma explicação de todos e cada um dos programas instalados. Convem que tenha uma noção de como instalar e configurar o sistema operativo e ser capaz de identificar e resolver os percalços no caminho.

Também não é configurado um servidor DHCP, mas seria recomendável para ter uma solução completa.

(Alguns) manuais usados

As seguintes páginas foram úteis para poder identificar os passos a seguir e ficheiros a editar.

Cuidados

Todos os comandos são executados como root. É importante estar atento porque é muito fácil deitar abaixo o sistema ou deixá-lo num estado em que precisa reinstalar do zero.

O processo de instalação pode nem sempre correr como esperado, e poderá ser necessário repeti-lo mais que uma vez. Existem outros tutorias na rede, mas não são garantia de sucesso. Os próprios manuais do SAMBA não são muito completos nem oferecem soluções para todos os problemas com que se possam deparar. Para além disso, o servidor Ubuntu 18.04 é ainda relativamente novo e introduz novos comportamentos, e os diversos softwares vão evolucionando.

Não é de esperar que seguir qualquer tutorial de forma cega vá permitir completar a instalação com sucesso. Deve ser preciso estar pronto a dispensar algum tempo para poder ir resolvendo os diversos problemas com que, de certeza, se irão deparar.

Em diferentes momentos será conveniente reiniciar o servidor. Primeiro: porque alguns erros “desaparecem” ao reiniciar de forma limpa. Segundo: porque alguns erros “aparecem” e se tornam mais evidentes.

É sempre recomendável manter uma janel com a consulta aos registos. O seguinte comando mostrará os eventos à medida que acontecem:

journalctl -f

Também é recomendável verificar o estado dos serviços à medida que os iniciamos:

systemctl status <nome do serviço>

Configuração da rede

Um controlador de domínio deve ter um endereço IP estâtico.

Ao longo deste artigo vamos considerar um servidor com o nome DC01, endereço IP 192.168.0.2, gateway 192.168.0.1, netmask 255.255.255.0, e um domínio contoso.com (como a Microsoft gosta de usar para exemplificar as suas redes). Usaremos os seguintes IPs como servidores de resolução de nomes externos que nos permitam aceder à Internet: 9.9.9.9 e 8.8.8.8

No momento da instalação do servidor poderemos definir esta configuração. Caso contrário, podemos fazer isso posteriormente, editando as configurações de NetPlan. Segue um breve exemplo de configuração do ficheiro [/etc/netplan/50-cloud-init.yaml]:

network:
  ethernets:
    enp0s3:
      addresses:
      - 192.168.0.2/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
          - 127.0.0.1
          - 9.9.9.9
          - 8.8.8.8
          search:
            - contoso.com
      optional: true
  version: 2

Devemos editar o ficheiro [/etc/hosts] para poder resolver o endereço local diretamente.

...
192.168.0.2 dc01.contoso.com dc01 contoso.com
...

Modificar o ficheiro [/etc/resolv.conf] com o seguinte comando:

systemd-resolve --set-domain=contoso.com

Verificar que conseguimos executar os seguintes comandos com sucesso:

ping -c3 192.168.0.2
ping -c3 192.168.0.1
ping -c3 dc01
ping -c3 dc01.contoso.com

Se os comandos anteriores falham, é preciso rever novamente as configurações.

Limpeza de instalações anteriores

Se já tiver um servidor com o Ubuntu e se já tiver algum software prévio instalado (ou os passos seguintes correm mal e precisa ré-começar), pode executar os seguintes comandos para repor o sistema a um estado razoavelmente “limpo”.

Parar os serviços (ignorar quaisquer erros):

systemctl stop samba-ad-dc.service smbd.service nmbd.service winbind.service
killall samba
killall smbd
killall nmbd
killall winbindd
ps ax | egrep "samba|smbd|nmbd|winbindd"

Limpar software instalado:

apt purge samba samba-common samba-common-bin samba-libs winbind libnss-winbind libpam-winbind krb5-user krb5-config

Limpar outros ficheiros que possam ter ficado no sistema:

rm /etc/samba/smb.conf
rm /etc/krb5.conf
rm /var/run/samba/*.tdb
rm /var/run/samba/*.ldb
rm /var/lib/samba/*.ldb
rm /var/lib/samba/*.tdb
rm /var/lib/samba/private/*.tdb
rm /var/lib/samba/private/*.ldb
rm /var/cache/samba/*.ldb
rm /var/cache/samba/*.tdb

Reiniciar o servidor.

Instalação do servidor de nomes BIND9

O SAMBA oferece um servidor de nomes próprio, mas, como eles próprios admitem, tem funcionalidades limitadas e, além disso, não consegui que funcionasse de forma “limpa” em duas tentativas. O venerável BIND9 não é uma má escolha apesar de ser necessários alguns passos adicionais.

Instalação:

apt install bind9 bind9utils
 ...
 Adding group `bind' (GID 115) ...
 Adding system user `bind' (UID 111) ...
 Adding new user `bind' (UID 111) with group `bind' ...
 wrote key file "/etc/bind/rndc.key"
 bind9-pkcs11.service is a disabled or a static unit, not starting it.
 bind9-resolvconf.service is a disabled or a static unit, not starting it.
 ...

Editar o ficheiro [/etc/bind/named.conf.options] para adicionar os servidores de nomes externos que resolvam os nomes não geridos localmente:

options {
  ...
  forwarders {
    9.9.9.9;
    8.8.8.8;
  };
  ...
};

SAMBA

Instalação:

apt install samba krb5-user krb5-config winbind libnss-winbind libpam-winbind

Serão pedidas informações para configurar Kerberos. Um simples ENTER com os campos vazios será suficiente para avançar ao seguinte passo.

O SAMBA instala um ficheiro de configuração por defeito que deverá ser removido a seguir.

Eliminar o ficheiro de configuração instalado por defeito (obrigatório!):

rm /etc/samba/smb.conf

Executar a configuração inicial para criar o Active Directory:

samba-tool domain provision --use-rfc2307 --interactive
...
Realm=CONTOSO.COM
Domain=CONTOSO
Server role=DC
DNS Backend=BIND9_DLZ
...
Setting up share.ldb
Setting up secrets.ldb
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=contoso,DC=com
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=contoso,DC=com
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates
Setting up sam.ldb rootDSE marking as synchronized
A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf
Server Role: active directory domain controller
Hostname: dc01
NetBIOS Domain: CONTOSO
DNS Domain: contoso.com
DOMAIN SID: S-1-5-21-992680402-2015707017-2908876464
...

Ainda precisamos desabilitar os serviços smbd, nmbd e winbind e habilitar o serviço samba-ad-dc:

systemctl mask smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl enable samba-ad-dc
systemctl start samba-ad-dc
systemctl status samba-ad-dc

Integração do BIND9 com SAMBA

Integrar as configurações de SAMBA editando [/etc/bind/named.conf.local]:

...
include "/var/lib/samba/private/named.conf";
...

Permitir updates dinâmicos em BIND editando [/etc/bind/named.conf.options]:

options {
  ...
  // Kerberos dynamic updates
  tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
};

Alterar as configurações de AppArmor para permitir que BIND use os ficheiros de SAMBA modificando o ficheiro [/etc/apparmor.d/usr.sbin.named]

...
# Samba DNS
/var/lib/samba/private/named.conf r,

# Samba DNS
/var/lib/samba/private/named.conf r,
/usr/lib/x86_64-linux-gnu/samba/** mlr,
/usr/lib/x86_64-linux-gnu/samba/bind9/** mlr,
/usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9.so mlr,
/usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so mlr,
/usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_10.so mlr,
/usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so mlr,

/usr/lib/x86_64-linux-gnu/ldb/modules/ldb/** mlrwk,

/var/lib/samba/private/** mlrwk,
/var/lib/samba/private/dns/** mlrwk,
/var/lib/samba/private/dns/sam.ldb mlrwkix,
/var/lib/samba/private/dns/sam.ldb/** mlrwkix,
...

Neste ponto, alertar para os problemas de permissões que podem acontecer nas pastas em [/var/lib/samba/private/dns].
Eventualmente optei por modificar as permissões como seguem porque estava a ter problemas constantes.

chmod 777 -R /var/lib/samba/private/dns/sam.ldb.d

De certeza haverá uma escolha mais adequada que esta.

Reiniciar Apparmor e verificar a configuração do BIND9:

systemctl restart apparmor
systemctl restart bind9
systemctl status bind9
named-checkconf

KERBEROS

Substituir a configuração do Kerberos com aquela gerada pelo SAMBA:

cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

Os conteúdos do novo ficheiro [/etc/krb5.conf] são muito simples:

[libdefaults]
  default_realm = CONTOSO.COM
  dns_lookup_realm = false
  dns_lookup_kdc = true

Reconfiguração do DNS e validação com os registos de Active Directory (AD)

Em qualquer momento podemos forçar a reconfiguração dos registos DNS para certificar que não há nenhum em falta:

samba_upgradedns --dns-backend=BIND9_DLZ
samba_dnsupdate --verbose --all-names

Reiniciar o servidor.

Ativar as listagens de utilizadores SAMBA

Falta ainda permitir que os grupos e utilizadores do AD sejam visíveis no sistema editando [/etc/nsswitch.conf]:

...
passwd: compat winbind systemd
group: compat winbind systemd
...

Podemos até querer permitir que os utilizadores façam login no nosso sistema:

pam-auth-update
PAM profiles to enable:
[*] Unix authentication
[*] Register user sessions in the systemd control group hierarchy
[*] Create home directory on login
[*] Inheritable Capabilities Management

Servidor de tempo

Ubuntu 18.04 recomenda o uso do Chrony no lugar do NTPd e podemos instalá-lo com:

apt install chrony

Não sendo obrigatório, é recomendável, em Portugal, incluir os servidores do Observatório Astronómico de Lisboa. Editar [/etc/chrony/chrony.conf]:

...
# Observatório Astronómico de Lisboa
pool ntp02.oal.ul.pt iburst maxsources 4
pool ntp04.oal.ul.pt iburst maxsources 4
...

Alterar as permissões:

chown root:_chrony /var/lib/samba/ntp_signd/
chmod 750 /var/lib/samba/ntp_signd/

Configurar AppArmor editando [/etc/apparmor.d/usr.sbin.chronyd]:

...
# Samba
/var/lib/samba/ntp_signd/** rwlkix,
...

Reiniciar o servidor.

Criação de partilhas

Atribuir permissões de administração ao grupo “Domain Admins”:

net rpc rights grant "CONTOSO\Domain Admins" SeDiskOperatorPrivilege -U "CONTOSO\administrator"
Enter CONTOSO\administrator's password:
Successfully granted rights.

Verificar os membros com acesso de administração para a gestão de partilhas:

net rpc rights list privileges SeDiskOperatorPrivilege -U "CONTOSO\administrator"
Enter administrator's password:
SeDiskOperatorPrivilege:
BUILTIN\Administrators
CONTOSO\Domain Admins

Vamos criar duas partilhas, sendo uma para a empresa e outra para armazenar os dados de cada utilizador:

mkdir -p /srv/samba/Users
mkdir -p /srv/samba/Company
chown root:"Domain Admins" /srv/samba/Users/
chmod 0770 /srv/samba/Users/
chown root:"Domain Admins" /srv/samba/Company/
chmod 0770 /srv/samba/Company/

Adicionar as partilhas à configuração SAMBA editando o ficheiro [/etc/samba/smb.conf]:

[global]
...
winbind enum users = yes
winbind enum groups = yes
...
[Users]
path = /srv/samba/Users/
read only = no
[Company]
path = /srv/samba/Company/
read only = no
...

A seguir, ativar a nova configuração:

smbcontrol all reload-config

Fim

Neste ponto já deveríamos ter um servidor funcional equivalente a um domínio Windows equivalente ao 2008 R2.
Devemos conseguir juntar um cliente com o Windows 10 Pro e aceder como “CONTOSO\administrator”.
Após este login inicial na máquina e já com o perfil criado, podemos descargar o pacote RSAT da Microsoft que nos permite fazer a administração remota do servidor e gerir o servidor DNS, criar utilizadores e grupos, gerir as permissões das partilhas, criar políticas, etc.
Espero que esta guia seja útil para quem precisar dela.
Se a sua organização precisa dum servidor com um baixo investimento, podemos ajudar! Contactem-nos!