Desde a versão 4.16 o Samba4 está implementando o suporte (Samba 4.16 replication of Windows AD 2019) aos níveis funcionais 2012, 2012R2 e 2016.
A partir da versão 4.19 do Samba4 as implementações de novos níveis funcionais suportam até 88 - Windows Server 2022 : https://wiki.samba.org/index.php/AD_Schema_Version_Support
Release Planning for Samba - https://wiki.samba.org/index.php/Samba_Release_Planning
Mais informações sobre os níveis funcionais: https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/active-directory-functional-levels
Embora chamamos o Active Directory de Multi Master, permitindo que alterações possam acontecer em qualquer DC, algumas regras devem ser observados pelo FSMO:
https://wiki.samba.org/index.php/Flexible_Single-Master_Operations_(FSMO)_Roles
https://samba.tranquil.it/doc/en/samba_fundamentals/about_fsmo.html
Em 2008 implantei Samba 3 + OpenLDAP. Era necessário um conhecimento MUITO avançado em OpenLDAP e Samba para levantar um PDC. Depois do Samba 4, tudo ficou mais fácil.
Em 04/Mar/2024 fiz um vídeo Instalando Fedora 39 no VirtualBox que eu recomendo assistirem antes de prosseguir.
Porque Fedora Server e não Debian/Ubuntu/AlmaLinux/RockyLinux/OracleLinux?
Debian/Ubuntu funcionam, mas o Fedora 40 possui a versão mais recente do samba4 disponível via pacote, simplificando muito o processo de instalação/atualização.
Distribuições AlmaLinux/RockyLinux/OracleLinux por serem derivados do RedHat não possuem os pacotes que incorporam o samba-ad que depende do Heimdal Kerberos para suporte ao Active Directory, apenas distribui e oferece suporte a produtos baseados no Kerberos-MIT.
Se ainda assim você não for utilizar o Fedora, é possível utilizar os pacotes já compilados pela Tranquil.it disponível para várias distros (RPM ou DEB).
NOTA: Fiz vários laboratórios com AlmaLinux 9 e Rocky Linux 9, mesmo seguindo a documentação oficial do Tranquil.it não consegui instanciar o Samba4. O ERRO foi idêntico a esse: https://bugzilla.samba.org/show_bug.cgi?id=14110
No dia 04/Fev/2024 quando instalamos utilizamos o Fedora 39 (https://fedoramagazine.org/announcing-fedora-linux-39/) que desde 07/Nov/2023 estava disponível.
No dia 23/Abr/2024 houve um lançamento do Fedora 40 (https://fedoramagazine.org/announcing-fedora-linux-40/).
Vamos proceder com a atualizção entre versões (https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/)
# Garantir que o Fedora 39 esteja atualizado
# dnf -y upgrade --refresh
# Reboot
reboot
# Preparar para atualização entre versões
dnf -y install dnf-plugin-system-upgrade
# Baixar todas as atualizações entre versões
dnf -y system-upgrade download --releasever=40
# Efetivar as atualizações
dnf -y system-upgrade reboot
No dia 29/Out/2024 houve um lançamento do Fedora 41 (https://fedoramagazine.org/announcing-fedora-linux-41/).
Vamos proceder com a atualizção entre versões (https://docs.fedoraproject.org/en-US/quick-docs/upgrading-fedora-offline/)
# Garantir que o Fedora 40 esteja atualizado
# dnf -y upgrade --refresh
# Reboot
reboot
# Preparar para atualização entre versões
dnf -y install dnf-plugin-system-upgrade
# Baixar todas as atualizações entre versões
dnf -y system-upgrade download --releasever=41
# Efetivar as atualizações
dnf -y system-upgrade reboot
Manter o SO sempre Atualizado
# Atualização manual
dnf -y upgrade --refresh
# Atualização programada via crontab
(crontab -l 2>/dev/null; echo "0 2 * * * dnf upgrade -y --refresh >/tmp/dnf-upgrade.txt 2>&1") | crontab -
# Conferindo a entrada no crontab
crontab -l
Firewalld e SELinux
Desabilitado (NÃO usar em PRODUÇÃO) - Apesar de o Firewalld e o SELinux serem ferramentas que ajudam na segurança de um Linux, é possível que algumas regras impeçam o funcionamento correto do samba, principalmente se sua configuração estiver fora dos "padrões" de portas e localização dos arquivos.
# Desabilitar o firewalld imediatamente
systemctl disable --now firewalld
# Desativar o Selinux
setenforce 0
# Desabilitar o SELinux na Inicialização
sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
Habilitado (usar em PRODUÇÃO)
ZONE=`firewall-cmd --get-default-zone`
firewall-cmd --zone=$ZONE --permanent --add-service=samba-dc
firewall-cmd --reload
firewall-cmd --list-all
setenforce 1
sed -i s/^SELINUX=.*$/SELINUX=permissive/ /etc/selinux/config
Em máquinas expostas na internet (acesso externo), aconselho também instalar o fail2ban.
Sincronizar a data e Ajustar o timezone. Esse procedimento é crucial para o bom funcionamento dos DCs e FSs
# Instalar pacote de sincronismo de tempo
dnf install chrony
# Garantir que a data/hora esteja correta com o NTP
systemctl enable --now chronyd
# Ajustar o timezone para a sua localização
timedatectl set-timezone America/Campo_Grande
Instalar alguns pacotes adicionais
dnf -y install wget htop tmux nmap mc nano vim bash-completion sysstat jq expect \
PackageKit-command-not-found s3fs-fuse ccze tree net-tools whois speedtest-cli \
fastfetch cpufetch boxes figlet cowsay toilet \
unzip p7zip p7zip-plugins unrar zip gzip bzip2 unzip \
yum-utils fping duf rsyslog cronie NetworkManager-tui
Customizar Login
cat << '_EOF' > /etc/profile.d/zz-welcome.sh
echo -e "Servidor Fedora 41 - $HOSTNAME\n\n`date`" | boxes -d parchment -a c -s 80
fastfetch
_EOF
cat << '_EOF' >> ~/.bashrc
# Root Prompt
PS1='\[\e[1;31m\]\342\224\214\342\224\200\[\e[1;31m\][\[\e[1;33m\]\u\[\e[1;37m\]@\[\e[1;36m\]\h\[\e[1;31m\]]\[\e[1;31m\]\342\224\200\[\e[1;31m\][\[\e[1;33m\]\w\[\e[1;31m\]]\[\e[1;31m\]\342\224\200[\[\e[1;37m\]\d \t\[\e[1;31m\]]\n\[\e[1;31m\]\342\224\224\342\224\200\342\224\200\342\225\274\[\e[1;37m\] \$ \[\e[0m\]'
_EOF
Desabilitar o DNS do systemd-resolved
Quando da instalação de um Linux via DHCP, o systemd-resolved
é responsável pela resolução de DNS criano um DNS local para atuar como um cache, objetivando um menor tempo de resposta nas consultas DNS.
# Uma olhada na resolução de DNS
cat /etc/resolv.conf | grep -v -E '^(#|$|[[:space:]])'
nameserver 127.0.0.53
options edns0 trust-ad
search .
# Certificando que a porta 53 está ocupada
netstat -atunp | grep '127.0.0.53:53'
tcp 0 0 127.0.0.53:53 0.0.0.0:* OUÇA 631/systemd-resolve
udp 0 0 127.0.0.53:53 0.0.0.0:* 631/systemd-resolve
Esse comportamento é muito saudável para desktops, mas para o nosso Samba, o ajuste se faz necessário, pois o serviço de DNS interno do Samba não inicia se o systemd-resolved
estiver ocupando a porta 53 que será utilizada pelo DNS do Samba.
# Criar diretório para armazenar configurações de rede
mkdir /etc/systemd/resolved.conf.d/
# Remover o comportamento STUB
cat <<_EOF >> /etc/systemd/resolved.conf.d/custom.conf
[Resolve]
DNSStubListener=no
_EOF
# Restart no systemd-resolved
systemctl restart systemd-resolved
# Como ficou a resolução de nomes via DNS
cat /etc/resolv.conf | grep -v -E '^(#|$|[[:space:]])'
nameserver 8.8.8.8
nameserver 1.1.1.1
search .
Note que entradas de nameserver's foram configuradas no servidor DHCP (que no meu caso é o roteador da Vivo).
Desabilitando o cockpit
Dê uma conferida nas portas abertas antes da instalação do samba
nmap localhost
Starting Nmap 7.94 ( https://nmap.org ) at 2024-03-30 09:05 -04
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
9090/tcp open zeus-admin
Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds
Notamos que há uma porta desconhecida (9090) aberta. É o serviço
cockpit
que vem instalado por default.Mais informações: https://www.redhat.com/en/blog/linux-system-administration-management-console-cockpit
Este serviço não será abordado nesse momento, então opcionalmente podemos desabilitá-lo.
systemctl disable --now cockpit.socket
Algumas definições de variáveis que irão ajudar no transcorrer da configuração.
cat <<'_EOF' > /root/set-vars-samba
# Variáveis auxiliares do Samba4
#===============================
_REALM="SEUDOMINIO.COM.BR"
_SYSVOL="`echo $_REALM | tr '[:upper:]' '[:lower:]'`"
_DOMAIN="SEUDOMINIO"
_PASSWORD="SuperSecretPassword@2024"
_NETBIOS="`hostname -s`"
_TEMP_PASSWORD="TempSuperSecretPassword@2024"
_EOF
. /root/set-vars-samba
echo ". /root/set-vars-samba" >> ~/.bashrc
Adicione no /etc/hosts os registros dos seus DCs e FSs
cat <<_EOF >> /etc/hosts
# Servidores Samba
192.168.15.201 dc01.${_SYSVOL} dc01
192.168.15.202 dc02.${_SYSVOL} dc02
192.168.15.203 fs01.${_SYSVOL} fs01
_EOF
Instalar pacotes necessários
# Pacotes do Samba como DC
dnf -y install samba samba-dc samba-client krb5-workstation
# Pacotes para ingresso do domínio
dnf -y install realmd sssd oddjob oddjob-mkhomedir adcli \
samba-common-tools samba-winbind-clients samba-winbind samba-winbind-clients
Fixar IP dos Servidores. Em se tratando de servidores, sempre fixe o IP ao invés de utilizar algum DHCP.
Tenha certeza que o hostname do seu servidor esteja no formato FQDN (fully-qualified domain name)
hostnamectl hostname dc01.${_SYSVOL}
Lembre-se de colocar o IP correspondente 192.168.15.201/24 com o nmtui
hostnamectl hostname dc02.${_SYSVOL}
Lembre-se de colocar o IP correspondente 192.168.15.202/24 com o nmtui
hostnamectl hostname fs01.${_SYSVOL}
Lembre-se de colocar o IP correspondente 192.168.15.203/24 com o nmtui
O reboot aqui é necessário para garantir que as atualizações de kernel e configurações de rede estejam conforme foi previamente configurado.
Agora que já temos as configurações gerais nos servidores que serão utilizados como DCs e FSs, podemos iniciar o processo de configuração de cada serviço.
Configurações baseadas na documentação oficial: https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
CUIDADO:
Execute apenas no DC01
No DC02 faremos apenas um join como Domain Controler adicional
No FS01 faremos apenas um join como Member
# Certificar que o samba está OFF
systemctl stop samba
# Removendo arquivos antigos
rm -rf /etc/samba/smb.conf /var/run/samba/* /var/lib/samba/* /var/log/samba/*log* /etc/krb5.conf
# O Provisionamento
samba-tool domain provision --server-role=dc --realm=${_REALM} --use-rfc2307 --domain=${_DOMAIN} --adminpass=${_PASSWORD} \
--dns-backend=SAMBA_INTERNAL \
--option="dns forwarder = 8.8.8.8 1.1.1.1" \
--option="template shell = /bin/bash"
# Copiar a configuração gerada para o kerberos
cp /var/lib/samba/private/krb5.conf /etc/
# Não expirar senha do Administrador
samba-tool user setexpiry Administrator --noexpiry
# Alterando Políticas do Domínio
samba-tool domain passwordsettings set --complexity=on --history-length=3 --min-pwd-age=0 --max-pwd-age=365 --min-pwd-length=8
# Validando politicas do Domínio
samba-tool domain passwordsettings show
# Determinar a versão do esquema do AD em um Samba DC
samba-tool domain level show
Domain and forest function level for domain 'DC=seudominio,DC=com,DC=br'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
# Conferindo o nível com ldbsearch
ldbsearch -H /var/lib/samba/private/sam.ldb -b 'cn=Schema,cn=Configuration,dc=seudominio,dc=com,dc=br' -s base objectVersion
# record 1
dn: CN=Schema,CN=Configuration,DC=seudominio,DC=com,DC=br
objectVersion: 88
# returned 1 records
# 1 entries
# 0 referrals
# Iniciando e Ativando o samba na inicialização do servidor
systemctl enable --now samba
# Dê uma conferida nas portas abertas pelo samba
nmap localhost
# Consultas no DNS do samba
host ${_SYSVOL}
host google.com
# Verificar conexão anônima ao samba
smbclient -L localhost -U%
# Verificar autenticação do Administrator ao netlogon
smbclient //dc01.${_SYSVOL}/netlogon -UAdministrator ${_PASSWORD} -c 'ls'
# Verificar o Ldap no DNS
host -t SRV _ldap._tcp.${_SYSVOL}.
# Verificar o Kerberos no DNS
host -t SRV _kerberos._udp.${_SYSVOL}.
# Verificar o DNS Local
host -t A ${_NETBIOS}.${_SYSVOL}.
# Encontrar o PDC Emulator on a Unix machine
host -t SRV _ldap._tcp.pdc._msdcs.${_SYSVOL}
# Gerando o ticket kerberos
echo ${_PASSWORD} | kinit administrator
# Listando o ticket
klist
# Removendo o ticket
kdestroy
# Informações Básicas sobre o Servidor AD
net ads info
samba-tool user list
samba-tool group list
Também conhecido pelo termo estrutura organizacional, essas serão as OUs que serão criadas para armazenar nossos objetos (pessoas, grupos, listas).
Vamos povoar com nomes dos personagens retirados da Turma do Mônica - na Wikipedia
Vamos considerar o seguinte para povoamento de nosso Active Directory:
samba-tool nos fornece uma interface para executar tarefas de administração de Domínio
samba-tool --help
samba-tool ou add --help
samba-tool user add --help
samba-tool group add 'Turma da Monica' --description "Grupo de Usuários da Turma da Mônica"
samba-tool ou add 'OU=Presidente'
samba-tool ou add 'OU=Financeiro'
samba-tool ou add 'OU=RH'
samba-tool ou add 'OU=TI'
samba-tool ou add 'OU=Contabil'
samba-tool ou add 'OU=Producao'
samba-tool ou add 'OU=Comercial'
samba-tool ou add 'OU=Logistica'
samba-tool user add seu.cebola --random-password --use-username-as-cn --userou='OU=Presidente'
samba-tool user add cebolinha --random-password --use-username-as-cn --userou='OU=Financeiro'
samba-tool user add anjinho --random-password --use-username-as-cn --userou='OU=Financeiro'
samba-tool user add monica --random-password --use-username-as-cn --userou='OU=RH'
samba-tool user add dudu --random-password --use-username-as-cn --userou='OU=RH'
samba-tool user add rolo --random-password --use-username-as-cn --userou='OU=RH'
samba-tool user add xaveco --random-password --use-username-as-cn --userou='OU=TI'
samba-tool user add horacio --random-password --use-username-as-cn --userou='OU=TI'
samba-tool user add marina --random-password --use-username-as-cn --userou='OU=TI'
samba-tool user add cascao --random-password --use-username-as-cn --userou='OU=Contabil'
samba-tool user add ze.vampir --random-password --use-username-as-cn --userou='OU=Contabil'
samba-tool user add magali --random-password --use-username-as-cn --userou='OU=Producao'
samba-tool user add rosinha --random-password --use-username-as-cn --userou='OU=Producao'
samba-tool user add carminha.frufru --random-password --use-username-as-cn --userou='OU=Producao'
samba-tool user add chico.bento --random-password --use-username-as-cn --userou='OU=Comercial'
samba-tool user add capitao.feio --random-password --use-username-as-cn --userou='OU=Comercial'
samba-tool user add piteco --random-password --use-username-as-cn --userou='OU=Comercial'
samba-tool user add franjinha --random-password --use-username-as-cn --userou='OU=Logistica'
samba-tool user add rita.najura --random-password --use-username-as-cn --userou='OU=Logistica'
samba-tool user add juca --random-password --use-username-as-cn --userou='OU=Logistica'
samba-tool group addmembers 'Turma da Monica' monica,cebolinha,cascao,magali
samba-tool group addmembers 'Turma da Monica' seu.cebola,anjinho,dudu,rolo,xaveco,horacio,marina,ze.vampir,rosinha,carminha.frufru,chico.bento,capitao.feio,piteco,franjinha,rita.najura,juca
samba-tool group list
samba-tool group listmembers 'Turma da Monica'
samba-tool ou list
samba-tool ou listobjects OU=Financeiro
samba-tool user add tiozao ${_TEMP_PASSWORD} --use-username-as-cn \
--given-name="Tiozão" --surname="do Linux" --job-title="Título do Cargo" \
--company="Nome da Empresa" --department="Nome do Departamento" \
--description="Descrição Opcional" [email protected] --telephone-number="+55 67 9 81183482" \
--physical-delivery-office="Endereço Completo" --login-shell=/bin/bash
samba-tool user show tiozao
pdbedit -L -v tiozao
# Trocar a senha do usuário tiozao que foi criado como senha ${_TEMP_PASSWORD} para ${_PASSWORD}
samba-tool user setpassword tiozao --newpassword=${_PASSWORD}
# Validando a data da troca da senha
pdbedit -L -v tiozao
Vemos que o Zabbix possui um template para monitoramento do Active Directory baseado em event-logs do Windows - https://github.com/zabbix/community-templates/tree/main/Operating_Systems/Windows/template_windows_ad_event_log_(2008_r2-2012_r2)/6.0
Será que conseguimos fazer o mesmo com os logs do samba4?
Os logs do samba são bastante flexíveis de serem configurados. Com apenas uma linha adicional na secão [global] do
/etc/samba/smb.conf
é possível obter diversas métricas.Veja mais em https://wiki.samba.org/index.php/Interpreting_JSON_Audit_Logs
Adicione a linha abaixo e
systemctl reload samba.service
log level = 0 auth_json_audit:3@/var/log/samba/auth_json_audit.log dsdb_json_audit:5@/var/log/samba/dsdb_json_audit.log
dsdb_password_json_audit:5@/var/log/samba/dsdb_password_json_audit.log dsdb_group_json_audit:5@/var/log/samba/dsdb_group_json_audit.log
dsdb_transaction_json_audit:5@/var/log/samba/dsdb_transaction_json_audit.log
# Backup com samba-tool
samba-tool domain backup online --server=${_NETBIOS}.${_SYSVOL} --targetdir=/var/backups/ --username=Administrator --password="${_PASSWORD}"
...
...
# Listando os arquivos de backup
ll -h /var/backups/
-rw-r--r-- 1 root root 1.5M May 19 16:21 samba-backup-seudominio.com.br-2024-05-19T16-21-21.695739.tar.bz2
No Windows Server, temos contas locais e depois da instalação do AD (Active Directory) a autenticação pode ser feita tanto com usuários locais quanto usuários do AD.
No Linux, também temos contas locais e depois da instalação do AD a autenticação não utiliza essa base de dados, ou seja, não há login no Linux com usuários do AD.
NOTA: Esse processo se aplica a todos os DCs e FSs.
Essa diferença na abordagem de autenticação após instalação do AD pode ser vista de duas formas: usabilidade X segurança. É muito mais cômodo que todas as contas do AD possam fazer login no Linux, uma vez que a gestão de contas é centralizada. Por outro lado, imagine que o usuário cascao teve sua senha comprometida e inadvertidamente foi utilizada para login no Linux, possibilitando um acesso indevido à configurações do AD. Essa balança entre usabilidade e segurança deve ser tratada com muito cuidado pelas áreas competentes.
Se optar pela segurança: (é o comportamento default)
authselect select local
Se optar pela usabilidade:
# Habilita logins via AD
authselect select winbind with-mkhomedir
# Cria diretório de cada usuário do AD no login
systemctl enable --now oddjobd.service
# Verifica existência do usuário no AD
wbinfo -n Administrator
# Verifica existência do usuário no Linux
id Administrator
# Busca informações adicionais do usuário
getent passwd Administrator
Agora podemos fazer um SSH remotamente com os usuários do AD:
Ainda conectado no DC01 veja os logs de autenticação:
tail -f /var/log/secure | ccze -A
Abra um novo console e se autentique com o usuário/senha do AD:
ssh -o PreferredAuthentications=password [email protected]
[email protected]'s password:
Last login: Sun May 19 16:27:57 2024 from 192.168.15.10
[SEUDOMINIO\tiozao@dc01 ~]$ pwd
/home/SEUDOMINIO/tiozao
[SEUDOMINIO\tiozao@dc01 ~]$
Com a autenticação no DC pelos usuários do AD, várias outras medidas podem ser aplicadas:
Limitar o acesso remoto (ssh) à determinados usuários/grupos
Limitar o escalonamento (su e sudo) a deterinados usuários/gruposQuer saber mais? Veja o Capitulo 6 do livro Active Directory com Samba 4 indicado nas referências.
Configurações baseadas na documentação oficial: https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
Porquê são necessários mais controladores de domínio?
Quais são os riscos de manter apenas um?
Se minha empresa tiver apenas um DC e ele falhar, qual é o impacto?
Quanto tempo vou levar para restabelecer um AD comprometido?Quer saber mais? Veja o Capitulo 4 do livro Active Directory com Samba 4 - Tópicos Avançados indicado nas referências.
As configurações são basicamente as mesmas que o DC01, mas a configuração do Kerberos é ligeiramente diferente.
# Certificar que o samba está OFF
systemctl stop samba
# Removendo arquivos antigos
rm -rf /etc/samba/smb.conf /var/run/samba/* /var/lib/samba/* /var/log/samba/*log* /etc/krb5.conf
echo "
[libdefaults]
default_realm = ${_REALM}
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
${_REALM} = {
default_domain = ${_DOMAIN}
kdc = 192.168.15.201
}
[domain_realm]
dc01.${_SYSVOL} = ${_REALM}
" > /etc/krb5.conf
# Consultas no DNS do samba
host ${_SYSVOL}
host dc01.${_SYSVOL}
# Validando a autenticação remota no DC01
smbclient //dc01.${_SYSVOL}/netlogon -Utiozao ${_TEMP_PASSWORD} -c 'ls'
# Gerando o ticket kerberos
echo ${_PASSWORD} | kinit administrator
# Listando o ticket
klist
# Removendo o ticket
kdestroy
samba-tool domain join ${_REALM} DC --realm=${_REALM} -U Administrator%${_PASSWORD} \
--dns-backend=SAMBA_INTERNAL \
--option="idmap_ldap:use rfc2307 = yes" \
--option="dns forwarder = 8.8.8.8 1.1.1.1" \
--option="template shell = /bin/bash" \
--option="log level = 0 auth_json_audit:3@/var/log/samba/auth_json_audit.log dsdb_json_audit:5@/var/log/samba/dsdb_json_audit.log \
dsdb_password_json_audit:5@/var/log/samba/dsdb_password_json_audit.log dsdb_group_json_audit:5@/var/log/samba/dsdb_group_json_audit.log \
dsdb_transaction_json_audit:5@/var/log/samba/dsdb_transaction_json_audit.log"
# Iniciando e Ativando o samba na inicialização do servidor
systemctl enable --now samba
# Habilita logins via AD
authselect select winbind with-mkhomedir
# Cria diretório de cada usuário do AD no login
systemctl enable --now oddjobd.service
# Dê uma conferida nas portas abertas pelo samba
nmap localhost
# Depois de alguns minutos, podemos verificar a replicação:
samba-tool drs showrepl
Há duas replicações do DC01 que precisam ser feitas o DC02:
-- o mapeamento de usuários do AD para usuários do Linux (/var/lib/samba/private/idmap.ldb
) -
-- diretório SYSVOL (/var/lib/samba/sysvol
)
Em servidores Windows Server esse sincronismo é automático, mas o Samba4 não implementa nem o antigo FRS (File Replication Service) e nem o atual DFS-R (Distribuited File System Replication):-- https://wiki.samba.org/index.php/Joining_a_Samba_DC_to_an_Existing_Active_Directory
-- https://wiki.samba.org/index.php/Distributed_File_System_(DFS)
-- https://wiki.samba.org/index.php/Bidirectional_Rsync/Unison_based_SysVol_replication_workaroundQuer saber mais? Veja o Capitulo 4 do livro Active Directory com Samba 4 - Tópicos Avançados indicado nas referências.
Configurações baseadas na documentação oficial: https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Domain_Member
Um controlador de domínio até pode ser um servidor de arquivos e de impressão, mas sugerimos fortemente que você não faça isso, por questões de desempenho e segurança. Quanto mais funções o DC tiver, mais difícil será mantê-lo seguro, devido às diversas exigências de cada tarefa.
# Removendo arquivos antigos
rm -rf /var/log/samba/*log*
find /var/lib/samba/ -name "*?db" -exec rm {} \;
# Desativar o samba como DC na reinicialização
systemctl disable --now samba.service
# Ativar o nmbd e winbind na reinicialização
systemctl enable nmb.service winbind.service
# Criar diretório de compartihamentos
mkdir -p /home/samba/{dados,temp}
# Configurações do samba como MEMBER
cat << _EOF > /etc/samba/smb.conf
# Global parameters
[global]
security = ADS
server role = member server
workgroup = $_DOMAIN
netbios name = $_NETBIOS
realm = $_REALM
# Parâmetros do Winbind - Mapeamento entre os RID (Windows) e UID (Linux)
# Para grupos e usuários BUILTIN
idmap config *:backend = tdb
idmap config *:range = 3000-7999
# Para os demais grupos e usuários do domínio
idmap config $_DOMAIN:backend = rid
idmap config $_DOMAIN:range = 10000-9999999
idmap config $_DOMAIN:base_rid = 0
idmap config $_DOMAIN:unix_primary_group = yes
idmap config $_DOMAIN:unix_nss_info = no
# LOGS
log level = 2
log file = /var/log/samba/%h.log
# Renovação automática dos tiquetes kerberos
winbind refresh tickets = yes
# Remove o prefixo "$_DOMAIN" em "$_DOMAIN\usuário"
winbind use default domain = yes
# Definir shell e homedir dos usuários
template shell = /bin/bash
template homedir = /home/%D/%U
# Desabilitando o compartilhamento de impressoras
load printers = no
printing = bsd
printcap name = /dev/null
disable spoolss = yes
#=============================
#===== Compartilhamentos =====
#=============================
[homes]
comment = Diretorio Pessoal do Usuario %u ( U:\ )
browseable = No
writeable = Yes
create mask = 0600
directory mask = 0700
valid users = %S
[dados]
comment = Sistemas e Dados de Usuarios ( P:\ )
path = /home/samba/dados
writeable = Yes
force create mode = 0660
force directory mode = 02770
[temp]
comment = Dados Temporarios ( X:\ )
path = /home/samba/temp
writeable = Yes
force create mode = 0666
force directory mode = 02777
_EOF
echo "
[libdefaults]
default_realm = ${_REALM}
dns_lookup_realm = false
dns_lookup_kdc = true
" > /etc/krb5.conf
# Gerando o ticket kerberos
echo ${_PASSWORD} | kinit administrator
# Listando o ticket
klist
# Removendo o ticket
kdestroy
# Consultas no DNS do samba
host ${_SYSVOL}
host google.com
# Consultando informações dos DCs
samba-tool domain info dc01.${_SYSVOL}
samba-tool domain info dc02.${_SYSVOL}
samba-tool domain join ${_REALM} MEMBER -U Administrator%${_PASSWORD}
# Inicia serviços samba como MEMBER
systemctl start nmb.service winbind.service
# Habilita logins via AD
authselect select winbind with-mkhomedir
# Cria diretório de cada usuário do AD no login
systemctl enable --now oddjobd.service
net ads info
wbinfo --ping-dc
Agora já podemos criar os compartilhamentos que desejamos: https://wiki.samba.org/index.php/Setting_up_a_Share_Using_Windows_ACLs
ou https://ubuntu.com/server/docs/member-server-in-an-active-directory-domain
Quer saber mais? Veja o Capitulo 7 do livro Active Directory com Samba 4 indicado nas referências.
Ferramentas de Administração de Servidor Remoto (RSAT) para Windows: https://learn.microsoft.com/pt-br/troubleshoot/windows-server/system-management-components/remote-server-administration-tools
Iniciar (powershell - abrir como Administrador)
Get-WindowsCapability -Online | ? Name -like 'RSAT*'|Where {$_.State -eq 'NotPresent'} |foreach {Add-WindowsCapability -online -name $_.Name}
Comigo domonou bastante. Então aguarde a conclusão da instalação.
Não esquecer de setar o DNS do Windows para os dois DCs.
https://www.techtudo.com.br/noticias/2016/02/como-configurar-um-dns-no-windows-10.ghtml
Mais detalhes: https://www.windows-active-directory.com/active-directory-users-and-computers-i.html
Veja detalhes dos Atributos do Atribute Details Active Directory
Para dirimir dúvidas e/ou sugestões entre no Grupo Tiozão do Linux
https://t.me/Grupo_Tiozao_Do_Linux
Gostou? Então não deixe de assistir ao vídeo onde explico melhor essa implementação.
https://youtu.be/9_lVXZmbBoQ