Versão utilizada: Debian 11 + Samba
Nota: A configuração com Samba_Internals é para ambientes pequenos e que não requerem redundância ou ambientes de estudos.
ATENÇÃO: A versão do Samba4 do repositório bullseye é a 4.13 e até a versão 4.15 ocorre incompatibilidade para reconhecer a autenticação no Win11 22H2. Para contornar isso é possível atualizar o repositório bullseye-backports que contem a versão 4.17.3.
Defina o nome de domínio a ser utilizado, um exemplo para domínio local seria LOCAL.DOMAIN.
Defina qual modo de serviço ira utilizar (DC, RODC, MEMBER, SUBDOMAIN).
Nota: Para criação do NOME de domínio interno utilizar [LOCAL,OFFICE,HOME,LAN].SEUDOMINIO, esta é uma forma de evita conflito com nomes de domínios externos e serviços como Zeroconf e MAC.
DC - Domain controller - Utilizado tanto para criar PDC ou para ingressar um BDC em uma estrutura existente.
RODC - Domain controller somente leitura - Precisa que o PDC esteja sempre on-line para consultas.
MEMBER - Com esta função o Samba faz é integrante de um domínio - É possível utilizar ACLs e compartilhar arquivos/impressoras com relação de confiança.
SUBDOMAIN - Com esta função é possível criar um domínio filho.
Reserve as informações para facilitar a instalação. A tabela abaixo serve para ajudar na orientação.
Utilize o link do site oficial do Samba como controlador de domínio para maiores esclarecimentos.
Role: dc
Quantos sites: 1
Quantos Domain controllers: 1
Top level Domain: LOCAL.DOMAIN
Hostname: home10
Authentication Domain: home10.local.domain
Endereço IP: 192.168.10.10
Serviço DNS: BIND9_DLZ ou SAMBA_INTERNAL
Primary Domain Controller - PDC: YES
Backup Controlador de Domínio: NO
DNS Resolver: 1.1.1.3; 9.9.9.11;
Quantos usuários: Pequenas/Medias estruturas (200) -> ou mais, não tenho relação de performance.
Ajustar o nome do servidor
# hostnamectl set-hostname home10 <- Ou outro conforme sua escolha
Ajustes o arquivo hosts
# vi /etc/hosts
127.0.0.1 localhost
192.168.10.10 home10.local.domain home10
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Configurar a interface de rede
# vi /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug ens18
iface ens18 inet static
address 192.168.10.10/24
gateway 192.168.10.1
# This is an autoconfigured IPv6 interface
#iface ens18 inet6 auto
# LAN de Gerencia
allow-hotplug ens19
iface ens19 inet static
address 192.168.1.110/24
Reinicialize o servidor.
# reboot
Instalar pacotes e dependências:
# apt update && apt install acl attr samba smbldap-tools samba-dsdb-modules samba-vfs-modules winbind libpam-winbind libnss-winbind krb5-user dnsutils smbclient ldb-tools python3-cryptography ntp ntpdate -y
Default Kerberos version 5 realm: LOCAL.DOMAIN <- Pressione Enter
Kerberos servers for your realm: <vazio> <- Pressione Enter
Administrative server for your Kerberos realm: <vazio> <- Pressione Enter
# samba -V <- Informara a versão
Configurar o serviço NTP para ajudar a data e hora do servidor:
# /etc/ntp.conf
Testar o serviço NTP
# ntpq -p
# ntpdate -u <IP ou NOMESERVER>
Confirme se os serviços estão rodando e pare-os:
# ps axf | egrep "samba|smbd|nmbd|winbindd"
# systemctl stop smbd.service nmbd.service winbind.service samba-ad-dc.service
Remova o arquivo de configuração smb.conf existente:
# smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
# mv /etc/samba/smb.conf /etc/samba/smb.conf.default
Remova os arquivos de Database do Samba, *.tdb e *.ldb.
Para descobrir onde estão os arquivos utilize o comando smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
# rm -f /run/samba/*.tdb || rm -f /run/samba/*.ldb
# rm -f /var/lib/samba/*.tdb || rm -f /var/lib/samba/*.ldb
# rm -f /var/cache/samba/*.tdb || rm -f /var/cache/samba/*.ldb
# rm -f /var/lib/samba/private/*.tdb || rm -f /var/lib/samba/private/*.ldb
Configure o resolv.conf
# vi /etc/resolv.conf
domain local.domain
search local.domain
nameserver 127.0.0.1
Provisionando
# samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=LOCAL.DOMAIN --domain=DOMAIN --adminpass=Passw0rd --option="interfaces=lo ens18" --option="bind interfaces only=yes" --option="dns forwarder = 192.168.10.1" --option="dns zone scavenging = Yes" --option="log file = /var/log/samba/SAMBA-AD.log" --option="log level = 1 auth:5 winbind:5" --option="max log size = 1000"
Nota: A senha do parâmetro adminpass será a senha do usuário Administrator. O parâmetro --use-rfc2307 -> usado para criar um novo domínio. Configure a interface network correta.
Revise o arquivo smb.conf gerado com o comando de provisionamento:
# cat /etc/samba/smb.conf
Disponibilize o KRB5
# mv /etc/krb5.conf /etc/krb5.conf.default && cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
Inicie o serviço do Samba
# systemctl disable smbd.service nmbd.service winbind.service samba-ad-dc.service
# systemctl unmask samba-ad-dc.service
# systemctl enable samba-ad-dc.service
# systemctl start samba-ad-dc.service
# systemctl daemon-reload
Criando a Zona Reversa
# mkdir /etc/samba/lmhosts <- Quando upgrade pode requerer a criação do diretório
# samba-tool dns zonecreate home10.local.domain 10.168.192.in-addr.arpa -U Administrator
# samba-tool dns zonecreate home10.local.domain 20.168.192.in-addr.arpa -U Administrator
Testar o funcionamento do serviço DNS
# host local.domain
# host -t SRV _ldap._tcp.local.domain
_ldap._tcp.local.domain has SRV record 0 100 389 samba.local.domain.
# host -t SRV _kerberos._udp.local.domain
_kerberos._udp.local.domain has SRV record 0 100 88 samba.local.domain.
# host -t A home10.local.domain
home10.local.domain has address 192.168.10.10
Para descobrir quais portas o serviço esta usando e funcionando:
# netstat -ntlup | egrep "samba|smbd" <- Caso tenha instalado o pacote net-tools o comando funcionará
# smbclient //localhost/netlogon -U Administrator -c 'ls'
Enter DOMAIN\Administrator's password:
. D 0 Sat Nov 19 11:17:45 2022
.. D 0 Sat Nov 19 11:17:51 2022
36115224 blocks of size 1024. 33696080 blocks available
# smbclient -L local.domain -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.13.13-Debian)
SMB1 disabled -- no workgroup available
Validar o funcionamento do Kerberos
# kinit administrator
Password for administrator@LOCAL.DOMAIN:
Warning: Your password will expire in 41 days on Sat 31 Dec 2022 11:17:51 AM -03
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@LOCAL.DOMAIN
Valid starting Expires Service principal
11/19/2022 11:47:59 11/19/2022 21:47:59 krbtgt/LOCAL.DOMAIN@LOCAL.DOMAIN
renew until 11/20/2022 11:47:55
# wbinfo -u
# wbinfo -g
# wbinfo -t
# wbinfo --ping-dc
Após criar um usuário e possível testar
# wbinfo -i DOMAIN\\NomeUser
Avalia o domain level
# samba-tool domain level show
Domain and forest function level for domain 'DC=local,DC=domain'
Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2
Avalia se existe falha de consistência na base
# samba-tool dbcheck --cross-ncs
Caso altere as configurações do smb.conf execute o comando abaixo para atualizar sem reiniciar o serviço. (Opcional)
# smbcontrol all reload-config