📁 DC1 Rocky
Controlador de Domínio Primário no Rocky Linux 9
Update do sistema:
yum update -y && yum upgrade -y
Instalar o editor de texto nano:
dnf install nano
Verificar sua configuração de rede e DNS, bem como nome de domínio. Uma das formas: Abra um terminal e chame o nmtui:
nmtui
Selecione Editar uma conexão. Então a opção Editar.
Verificar ou alterar seu endereço ip e 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 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 se houver, com o comando:
rm /etc/krb5.conf
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. Fazer um arquivo do tipo script executável e inserir os comandos:
nano depende.sh
Inserir os comandos:
set -xueo pipefail
yum update -y
yum install -y dnf-plugins-core
yum install -y epel-release
yum -v repolist all
yum config-manager --set-enabled PowerTools -y || \
yum config-manager --set-enabled powertools -y
yum config-manager --set-enabled Devel -y || \
yum config-manager --set-enabled devel -y
yum update -y
yum install -y \
--setopt=install_weak_deps=False \
"@Development Tools" \
acl \
attr \
autoconf \
avahi-devel \
bind-utils \
binutils \
bison \
ccache \
chrpath \
cups-devel \
curl \
dbus-devel \
docbook-dtds \
docbook-style-xsl \
flex \
gawk \
gcc \
gdb \
git \
glib2-devel \
glibc-common \
glibc-langpack-en \
glusterfs-api-devel \
glusterfs-devel \
gnutls-devel \
gpgme-devel \
gzip \
hostname \
htop \
jansson-devel \
keyutils-libs-devel \
krb5-devel \
krb5-server \
libacl-devel \
libarchive-devel \
libattr-devel \
libblkid-devel \
libbsd-devel \
libcap-devel \
libcephfs-devel \
libicu-devel \
libnsl2-devel \
libpcap-devel \
libtasn1-devel \
libtasn1-tools \
libtirpc-devel \
libunwind-devel \
libuuid-devel \
libxslt \
lmdb \
lmdb-devel \
make \
mingw64-gcc \
ncurses-devel \
openldap-devel \
pam-devel \
patch \
perl \
perl-Archive-Tar \
perl-ExtUtils-MakeMaker \
perl-JSON \
perl-Parse-Yapp \
perl-Test-Simple \
perl-generators \
perl-interpreter \
pkgconfig \
popt-devel \
procps-ng \
psmisc \
python3 \
python3-cryptography \
python3-devel \
python3-dns \
python3-gpg \
python3-iso8601 \
python3-libsemanage \
python3-markdown \
python3-policycoreutils \
python3-pyasn1 \
python3-setproctitle \
quota-devel \
readline-devel \
redhat-lsb \
rng-tools \
rpcgen \
rpcsvc-proto-devel \
rsync \
sed \
sudo \
systemd-devel \
tar \
tree \
wget \
which \
xfsprogs-devel \
yum-utils \
zlib-devel \
nano \
krb5-workstation
yum clean all
Salvar o arquivo
Transformar o arquivo em um executável com o comando:
chmod +x depende.sh
Executar o aquivo com o comando:
./depende.sh
Fazer download da última versão do samba ou da versão desejada:
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 para o arquivo de configuração ficar em: /etc/samba/smb.conf com o comando:
./configure --sysconfdir=/etc/samba/
Aguarde o processo finalizar.
E então faça os comandos make e make install:
make && make install
No diretório /root edite o arquivo .bash_profile
nano .bash_profile
E 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
Criar um arquivo de serviço systemd.
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:
[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
Recarrregar o systemd
com o comando:
systemctl daemon-reload
Habilitar o samba-ad-dc
para iniciar no boot do sistema:
systemctl enable samba-ad-dc
Verificar em qual dispositivo de rede está sua conexão:
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
Reestart o sistema:
reboot
Vamos Provisionar o Samba. Abrir um terminal:
samba-tool domain provision --use-rfc2307 --interactive --option="interfaces= lo ens18" --option="bind interfaces only=yes"
Responda as questões referente sua configuração:
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:
cp /usr/local/samba/private/krb5.conf /etc/krb5.conf
Reestart 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 com o comando:
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
klist
Com a resposta 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}
Adicionar portas:
firewall-cmd --add-port={389/udp,135/tcp,135/udp,138/udp,138/tcp,137/tcp,137/udp,139/udp,139/tcp,445/tcp,445/udp,3268/udp,3268/tcp,3269/tcp,3269/udp,49152/tcp}
Recarregar o Firewall:
firewall-cmd --reload
Para Criar um Segundo DC, clique aqui
Replicação do SysVol (backup do AD) para um DC2
Gerar uma chave SSH-Keygen no 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 com 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/
Fazendo o backup do DC1 para o DC2. Para um teste antes, fazer o comando usando a opção --dry-run para apenas 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, pode-se rodar 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
Adicionar um script no crontab 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/ srvad2@10.1.1.38:/usr/local/samba/var/locks/sysvol/
THAT’S ALL FOLKS!!