Configurar Samba AD-DC (DC1) Controlador de Domínio

=======================================================================

Executar um update e upgrade do sistema:

yum update -y && yum upgrade -y 

Instalar o editor de texto nano:

dnf install nano

=======================================================================

Configurar a Rede

Verificar sua configuração de rede e DNS, bem como nome de domínio. Uma das formas: Abra um terminal e execute o comando nmtui:

 nmtui

Selecione Editar uma conexão.

Então a opção Editar.

Verificar ou alterar seu endereço ip , máscara de sub-rede e seu Gateway.

Na opção Servidor DNS: inserir o DNS desejado.

Não esquecer de inserir em Domínios de pesquisa: seu.domínio.

Vá até o fim e selecione OK para salvar.

Selecione Voltar e então no menu: selecionar a opção: Definir nome de máquina do sistema:dc1.seu.dominio.

Agora selecione a opção: OK para salvar. Novamente selecione OK. Deve retornar para o terminal.

=======================================================================

Editar o arquivo /etc/host:

nano /etc/hosts

Inserir os dados referentes ao seu servidor:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# inserir os dados de seu server
10.1.1.31    dc1                            dc1.seu.dominio

Onde:

10.1.1.31 = IP de seu próprio AD-DC (controlador de domínio)

dc1 = nome simplificado do seu host de seu controlador de domínio

dc1.seu.domínio = nome do host + seu.domínio

=======================================================================

Veririficar processo do Samba

Verificar se existe algum processo do samba rodando:

# ps ax | egrep "samba|smbd|nmbd|winbindd"

Remover qualquer config file que houver, checando com o comando:

# smbd -b | grep "CONFIGFILE"
   CONFIGFILE: /usr/local/samba/etc/samba/smb.conf

Remover todos arquivos de data base que houver. Como: .tdb e .ldb:

# smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
  LOCKDIR: /usr/local/samba/var/lock/
  STATEDIR: /usr/local/samba/var/locks/
  CACHEDIR: /usr/local/samba/var/cache/
  PRIVATE_DIR: /usr/local/samba/private/

=======================================================================

Remover o arquivo /etc/krb5.conf

Remover o arquivo /etc/krb5.conf se houver, com o comando:

rm /etc/krb5.conf

=======================================================================

Instalar Plugins

Instalar plugins e habilitar o repositório PowerTools com os comandos abaixo:

dnf install dnf-plugins-core
dnf install epel-release
dnf config-manager --set-enabled powertools
dnf update

Checar os repositórios adicionados com o comando:

dnf repolist

O resultado deve ser algo como:

id do repo nome do repo
appstream Rocky Linux 8 - AppStream
baseos Rocky Linux 8 - BaseOS
devel Rocky Linux 8 - Devel WARNING! FOR BUILDROOT AND KOJI USE

- epel Extra Packages for Enterprise Linux 8 - x86_64
- extras Rocky Linux 8 - Extras
- powertools Rocky Linux 8 - PowerTools

=======================================================================

Setar a hora local (ntp):

Listando as opções de hora local.

timedatectl list-timezones

Para setar o timezone desejado, usar o comando: 

timedatectl set-timezone America/Sao_Paulo 

Verificando o timezone setado:

timedatectl

O resultado deve parecer como abaixo:

Local time: qua 2023-04-12 09:04:22 -03
           Universal time: qua 2023-04-12 12:04:22 UTC
                 RTC time: qua 2023-04-12 12:00:16
                Time zone: America/Sao_Paulo (-03, -0300)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no 

=======================================================================

Instalar as dependências dos pacotes.

Instalar as dependências dos pacotes. Criar um arquivo do tipo script executável e inserir os comandos:

nano depende.sh

Inserir as linhas abaixo para o seu arquivo:

Atualizado em 03/02/2024

set -xueo pipefail

dnf install -y epel-release
dnf config-manager --enable epel
dnf install -y yum-utils
dnf config-manager --set-enabled powertools
dnf update -y

yum install -y \
gcc.x86_64 \
tar \
python36.x86_64 \
wget \
nano \
perl.x86_64 perl-Parse-Yapp.noarch \
libacl.x86_64 \
nfs4-acl-tools.x86_64 \
gnutls-devel.x86_64 \
zlib.x86_64 \
krb5-devel.x86_64 \
krb5-server \
libblkid.x86_64 \
dbus-devel.x86_64 \
jansson-devel.x86_64 \
readline.x86_64 \
bsdtar.x86_64 \
docbook-dtds.noarch \
pam-devel \
cups \
python3-markdown \
patchutils.x86_64 \
gpgme-devel \
flex \
python3-iso8601.noarch \
python3-cryptography.x86_64 \
python36-devel \
lmdb.x86_64 \
libarchive-devel \
libacl-devel \
openldap-devel \
python3-dns \
perl-Convert-ASN1.noarch \
rpcgen.x86_64 \
perl-App-cpanminus \
popt-devel.x86_64 \
zlib-devel.x86_64 \
lmdb-devel.x86_64 \
bison-devel.x86_64 \
libtasn1-tools \
bison \
perl-JSON \

yum autoremove -y

yum clean all 

Salvar o arquivo

Para salvar: control+o e para sair: control+x

Transformar o arquivo em um executável com o comando:

chmod +x depende.sh

Executar o aquivo com o comando:

./depende.sh 

=======================================================================

Fazer download do Samba

Fazer download do samba ou da versão desejada, utilizando o comando:

wget https://download.samba.org/pub/samba/stable/samba-4.18.0.tar.gz

Descompactar o arquivo baixado:

tar -zxvf samba-nome-arquivo

Mudar para o diretório onde foi descompactado:

cd samba-nome-arquivo/

=======================================================================

Compilar o Samba

Compilar o samba e fazer o arquivo de configuração (smb.conf) ficar em: /etc/samba/smb.conf com o comando:

./configure --sysconfdir=/etc/samba/

Aguarde o processo finalizar.

=======================================================================

Comandos make e make install

E então, execute os comandos make e make install:

make && make install

Mude para o diretório /root e edite o arquivo .bash_profile com os comandos:

cd /root
nano .bash_profile

Inserir a linha:

# User specific environment and startup programs
PATH=$PATH:$HOME/bin

# ESTA LINHA
PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH

export PATH

Salvar o arquivo

Para salvar: control+o e para sair: control+x

=======================================================================

Serviço Systemd Samba

Criar um arquivo de serviço systemd do samba

Executar os comandos:

 systemctl mask smbd nmbd winbind
 systemctl disable smbd nmbd winbind

Criar o arquivo em: /etc/systemd/system/samba-ad-dc.service

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

Com as seguintes linhas (copie e cole para seu arquivo):

[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
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Salvar o arquivo

Para salvar: control+o e para sair: control+x

Recarregar systemd com o comando:

systemctl daemon-reload

Habilitar o samba-ad-dc para iniciar no boot do sistema:

systemctl enable samba-ad-dc

=======================================================================

Verificar dispositivo de rede

Verificar em qual dispositivo de rede está sua conexão. No terminalexecute o comando:

ip a

O resultado deve ser parecido com isso:

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether de:1e:07:63:42:51 brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 10.1.1.31/24 brd 10.1.1.255 scope global noprefixroute ens18

OBS: o ens18 neste caso é seu dispositivo

=======================================================================

Desabilitar SELinux

Editar o arquivo /etc/selinux/config :

nano /etc/selinux/config

Encontre a linha e mude para disabled como mostra abaixo:

#  disabled - No SELinux policy is loaded.
SELINUX=disabled

Salve o arquivo:

Para salvar: control+o e para sair control+x

======================================================================

Reboot o sistema

Fazer um reboot do sistema com o comando:

reboot

=======================================================================

Provisionar o Samba

Provisionando o Samba. No terminal execute o comando:

Obs: não esqueça de alterar para o seu dispositivo de rede

samba-tool domain provision --use-rfc2307 --interactive --option="interfaces= lo ens18" --option="bind interfaces only=yes"

Responda as questões referente ao seu cenário:

Realm: SEU.Dominio 
Domain [AD]: Domínio  
Server Role (dc, member, standalone) [dc]: dc 
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) SAMBA_INTERNAL]: SAMBA_INTERNAL 
DNS forwarder IP address (write 'none' to disable forwarding) [SEU_IP_DNS]:IP DNS  
Administrator password: escolher uma senha  
Retype password: repetir a mesma senha

OBS: Guarde a senha de provisionamento

=======================================================================

Configurar Kerberos:

Execute o comando abaixo:

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

Restart o serviço do samba-ad com o comando:

systemctl restart samba-ad-dc

Para parar serviço fazer o comando:

systemctl stop samba-ad-dc

Se necessitar desabilitar o serviço, utilizar o comando:

systemctl disable samba-ad-dc

=======================================================================

Verificar a versão do samba

smbclient --version

=======================================================================

Testar o samba

smbclient -L localhost -U%

=======================================================================

Verificar o DNS (_ldap)

host -t SRV _ldap._tcp.seu.dominio

=======================================================================

Verificar _kerberos

 host -t SRV _kerberos._udp.seu.dominio.

=======================================================================

A Gravação A

host -t A seu.dominio

=======================================================================

Verificando o Kerberos

kinit Administrator
Password for Administrator@SEU.DOMINIO:
Warning: Your password will expire in 41 days on Tue 22 Sep 2020 03:41:22 PM IST

=======================================================================

Listar o cache dos tickets

Listar o cache dos tickets com o comando:

klist

A resposta deve ser parecida com essa:

Valid starting       Expires              Service principal
13/04/2023 13:54:57  13/04/2023 23:54:57  krbtgt/SEU.DOMINIO@SEU.DOMINIO
    renew until 14/04/2023 13:54:50

=======================================================================

Configurar o Firewall

Adicionar serviços:

firewall-cmd --add-service={dns,ldap,ldaps,kerberos}

Abrir portas TCP :

firewall-cmd --permanent --zone=public --add-port={53/tcp,135/tcp,139/tcp,389/tcp,445/tcp,465/tcp,636/tcp,3268/tcp,3269/tcp,49152-65535/tcp};

Abrir portas UDP:

firewall-cmd --permanent --zone=public --add-port={88/udp,123/udp,137/udp,138/udp,389/udp,464/udp};

Recarregar o Firewall:

firewall-cmd --reload

=======================================================================

Replicação do SysVol

Replicação do SysVol (backup do AD) para um Segundo Controlador de Domínio: DC2

Gerar uma chave SSH-Keygen no primeiro Controlador de Domínio: DC1 com o comando:

ssh-keygen -t rsa

Algumas perguntas serão feitas:

Onde salvar o arquvo de chave, que neste caso: (/root/.ssh/id_rsa) teclar enter

Entre com uma senha (ou apenas digite enter para ficar sem senha), teclar enter

Entre com a senha novamente: teclar enter

A saída será algo como:

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Quando a chave for criada, copiar para o servidor que será o segundo DC2 com o comando:

ssh-copy-id user-dc2@IP-Seu-DC2

Agora pode-se conectar através do ssh sem requerer senha de acesso.

Conecte-se via ssh em seu DC2 e mude as permissões de acesso para que o usuário do dc2 possa escrever no diretório, com o comando:

chown root.user-dc2 -R /usr/local/samba/var/locks/sysvol/

======================================================================

Backup arquivo idmap.ldb

Voltando ao seu DC1

Para fazer a replicação do sysvol do DC1 para o DC2, o dc2 deve ter o mesmo mapa ID para os usuários e grupos. Execute o comando abaixo para fazer um backup do arquivo idmap.ldb:

tdbbackup -s.bak /usr/local/samba/private/idmap.ldb idmap.bak

Com o arquivo de backup gerado: idmap.bak copie o mesmo para o caminho de seu DC2 com o comando:

scp /usr/local/samba/private/idmap.bak root@IP-SEU-DC2:/usr/local/samba/private/

Conecte-se ao DC2 para renomear o arquivo de backup enviado através do DC1 (idmap.bak), usando o comando:

mv /usr/local/samba/private/idmap.bak idmap.ldb

======================================================================

NTACL (samba-tool)

Logo após executar o comando abaixo nos dois DCs

samba-tool ntacl sysvolreset

=======================================================================

Sysvol Backup (DC1 para DC2)

Executando um backup do DC1 para o DC2. Para testar, execute o comando utilizando a opção --dry-run para um teste sem alteração:

rsync --dry-run -XAavz --delete-after --progress --stats /usr/local/samba/var/locks/sysvol user-dc2@IP-DC2:/usr/local/samba/var/locks/sysvol/

O comando rsync fará uma copia do sysvol de seu DC1 (parte1) para o sysvol de seu DC2 (parte2):

Parte 1:

rsync --dry-run -XAavz --delete-after --progress --stats /usr/local/samba/var/locks/sysvol/


Parte 2:

user-dc2@IP-DC2:/usr/local/samba/var/locks/sysvol/

O resultado deve ser algo parecido com:

building file list ... 
12 files to consider
./
seu.dominio/
seu.dominio/Policies/
seu.dominio/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/
seu.dominio/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI
seu.dominio/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/
seu.dominio/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/
seu.dominio/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/
seu.dominio/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI
seu.dominio/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/
seu.dominio/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/
seu.dominio/scripts/

Number of files: 12 (reg: 2, dir: 10)
Number of created files: 9 (reg: 2, dir: 7)
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 40 bytes
Total transferred file size: 40 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.038 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 2,011
Total bytes received: 51

sent 2,011 bytes  received 51 bytes  1,374.67 bytes/sec
total size is 40  speedup is 0.02 **(DRY RUN)**

Com o resultado positivo, utilize o comando sem a opção --dry-run:

rsync -XAavz --delete-after --progress --stats /usr/local/samba/var/locks/sysvol dc2@IP-DC2:/usr/local/samba/var/locks/sysvol/

Para automatizar o processo, inserir o comando no crontab. Para aprender mais sobre o crontab clique aqui

Script no crontab

Adicionar um script no crontab para o backup ser automático,com o comando:

crontab -e

E insira a linha:

0 12 * * 1-5 root rsync -XAavz --delete-after --progress --stats /usr/local/samba/var/locks/sysvol dc2@IP-DC2:/usr/local/samba/var/locks/sysvol/