Versão utilizada: Debian 11 + Samba + Bind
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].DOMAIN, 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 é possivel 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: 2
Top level Domain: LOCAL.DOMAIN
Hostname: home10
Authentication Domain: home10.local.domain
Endereço IP: 192.168.10.10
Serviço DNS: BIND9_DLZ
Primary Domain Controller - PDC: YES
Backup Domain Controller - BDC: 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
192.168.10.11 home11.local.domain home11 <- caso for usar um DC somente desconsidere adicionar o secundário
# 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 ldap-utils bind9-utils bind9 -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 192.168.10.10
nameserver 192.168.10.11
nameserver 127.0.0.1
Provisionando
# samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=BIND9_DLZ --realm=LOCAL.DOMAIN --domain=DOMAIN --adminpass=Passw0rd --option="interfaces=lo ens18" --option="bind interfaces only=yes" --option="dns forwarder = 127.0.0.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
Confira as entradas estão no arquivo named.conf:
# cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
Ajuste o arquivo named.conf.options
# mv /etc/bind/named.conf.options /etc/bind/named.conf.options.default
# vi /etc/bind/named.conf.options
acl "trusted" { 192.168.10.0/24; 192.168.20.0/24; 127.0.0.0/8; localhost; };
options {
directory "/var/cache/bind";
dnssec-validation yes;
listen-on-v6 { none; };
version none;
hostname none;
server-id none;
allow-update { none; };
datasize default;
listen-on port 53 { 192.168.10.10; 127.0.0.1; ::1; };
auth-nxdomain yes;
notify no;
empty-zones-enable no;
minimal-responses yes;
tkey-gssapi-keytab "/var/lib/samba/bind-dns/dns.keytab";
allow-query { trusted; };
allow-query-cache { trusted; };
allow-recursion { trusted; };
recursion yes;
forwarders { 192.168.10.1; }; <- Ajuste conforme necessário
allow-transfer { none; };
};
Validar a configuração do arquivo named.conf.options
# named-checkconf /etc/bind/named.conf.options
Por padrão de instalação o Bind9 ira usar os arquivos existentes em:
O arquivo /usr/share/dns/root.hints que contem as entradas hints.
O arquivo /etc/bind/db.local que contem a entrada localhost.
O arquivo /etc/bind/db.127 que contem o reverso para 127.0.0.1.
Ajsute o arquivo named.conf.local:
# vi /etc/bind/named.conf.local
include "/var/lib/samba/bind-dns/named.conf";
Reinicie o serviço Bind
# systemctl restart named.service
# tail -f /var/log/syslog <- para acompanhar a evolução do funcionamento do Bind
Testar o funcionamento do serviço DNS
# host -t A localhost 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:
localhost has address 127.0.0.1
# host -t PTR 127.0.0.1
1.0.0.127.in-addr.arpa domain name pointer localhost.
# 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
# dig @localhost local.domain
# dig @localhost home10.local.domain
# dig -t SRV @localhost _ldap._tcp.local.domain
Criar as zonas reversas dos IP's conhecidos:
# samba-tool dns zonecreate home10.local.domain 10.168.192.in-addr.arpa -U Administrator --password=Passw0rd
Zone 10.168.192.in-addr.arpa created successfully
# samba-tool dns zonecreate home10.local.domain 20.168.192.in-addr.arpa -U Administrator --password=Passw0rd <- Adicione as outras redes
Adicionar entrada no A - Pular esse passo - Opcional
# samba-tool dns add home10.local.domain local.domain home10.local.domain A 192.168.10.10 -U Administrator --password=Passw0rd
Nota: O comando acima é somente informativo de como adicionar uma entrada A.
Adicionar entrada PTR
# samba-tool dns add home10.local.domain 10.168.192.in-addr.arpa 10 PTR home10.local.domain -U Administrator --password=Passw0rd
Password for [DOMAIN\Administrator]:
Record added successfully
# host -t PTR 192.168.10.10
10.10.168.192.in-addr.arpa domain name pointer home10.local.domain
# host local.domain
local.domain has address 192.168.10.10
Para descobrir quais portas o serviço esta usando e funcionando:
# netstat -ntlup | egrep "samba|smbd|named" <- 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
AVALIAR COMANDO
# smbclient //home10.local.domain/netlogon -k -c 'ls'
. D 0 Sat Nov 19 11:17:45 2022
.. D 0 Sat Nov 19 11:17:51 2022
36115224 blocks of size 1024. 33696200 blocks available
# 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\\tiochico
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