Table of Contents
Samba Active Directory
Come installare un host Samba con funzioni di Active Directory Domain Controller . Installazione testata su Debian 10 Buster con Samba 4.9.5.
Scelta del nome del dominio
Sembra una banalità, ma non lo è perché cambiare nome ad un dominio esistente è operazione molto complessa, inoltre vi sono delle restrizioni rispetto al nome dell'host e vi è interazione fra il realm Kerberos e il DNS. In generale si devono individuare i seguenti nomi:
Nome | Esempio | Funzione |
---|---|---|
Domain | RIGACCI-DOM | È il nome del dominio Active Directory, generalmente maiuscolo. Deve essere diverso dal nome NetBIOS dell'host. |
Nome NetBIOS | RIGACCI-AD | Si tratta del nome da assegnare all'host che avrà funzione di DC, si tratta del nome breve NetBIOS che generalmente è maiuscolo. Per comodità conviene assegnare lo stesso nome (però in minuscolo) anche come hostname Unix. |
Realm Kerberos | RIGACCI-DOM.RIGACCI.ORG | Simile ad una zona DNS, è il suffisso che raggruppa gli host appartenenti al dominio AD. Eventualmente può avere radice uguale a un dominio DNS appartenente alla stessa organizzazione. In genere il realm si esprime in maiuscolo, mentre la zona DNS è in minuscolo. È consigliabile che il nome del realm non sia risolto a livello di DNS pubblico, mentre nel dominio la risoluzione dei nomi - se fallisce nel realm Kerberos - viene tentata sul DNS. |
Server Kerberos | rigacci-ad.rigacci-dom.rigacci.org | È il nome DNS dell'host che fornisce il servizio Kerberos. Nel nostro caso è la stessa macchina Samba. |
Hostname e Resolv
Si imposta il nome Unix in /etc/hostname e una risoluzione statica dal nome all'indirizzo IP sulla LAN in /etc/hosts:
127.0.0.1 localhost.localdomain localhost 10.0.1.190 rigacci-ad.rigacci-dom.rigacci.org rigacci-ad
DNS server
Nella configurazione Active Directory Domain Controller, Samba si porrà in ascolto sulla porta 53 e fornirà il servizio di DNS, pertanto è necessario eventualmente fermare e disabilitare Bind:
systemctl stop bind9.service systemctl disable bind9.service
Il file /etc/resolv.conf si imposta come segue (usando i resolver di Cloudflare e Google come fallback):
domain rigacci-dom.rigacci.org nameserver 127.0.0.1 nameserver 1.1.1.1 nameserver 8.8.8.8
È opportuno anche creare una zona DNS reverse:
samba-tool dns zonecreate 10.0.1.190 1.0.10.in-addr.arpa --username='administrator' Password for [RIGACCI-DOM\administrator]: Zone 1.0.10.in-addr.arpa created successfully
Installazione pacchetti Debian
Si installano i seguenti pacchetti Debian:
apt-get install samba krb5-config winbind smbclient
Durante l'installazione viene configurato il sistema Kerberos, se è necessario si può ripetere la configurazione con dpkg-reconfigure krb5-config. Durante l'installazione vengono richieste tre informazioni (vedere la tabella sopra):
- Default Kerberos realm.
- Hostnames of Kerberos servers, nel nostro caso se ne indica uno solo.
- Hostname of the administrative (password changing) server, nel nostro caso coincide con l'unico Kerberos server.
La configurazione viene salvata in /etc/krb5.conf.
Creazione (provisioning) del dominio
Esiste il tool specifico per creare il dominio, si tratta di samba-tool. Prima di utilizzarlo è opportuno creare un ambiente “pulito” fermando i processi in esecuzione e cancellando ogni eventuale configurazione.
Fermare i processi
In genereale con questi comandi si verifica se ci sono processi in esecuzione e li si arresta:
ps ax | egrep "samba|smbd|nmbd|winbindd" systemctl stop winbind smbd nmbd
Eliminare la configurazione preesistente
È possibile interrogare Samba per sapere quale è il file e le directory di configurazione:
smbd -b | grep "CONFIGFILE" CONFIGFILE: /etc/samba/smb.conf smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR" LOCKDIR: /var/run/samba STATEDIR: /var/lib/samba CACHEDIR: /var/cache/samba PRIVATE_DIR: /var/lib/samba/private
Quindi si rimuove ogni configurazione:
mv /etc/samba/smb.conf /etc/samba/smb.conf.dist rm /var/run/samba/*.tdb rm /var/run/samba/*.ldb rm /var/lib/samba/*.tdb rm /var/lib/samba/*.ldb rm /var/cache/samba/*.tdb rm /var/cache/samba/*.ldb rm /var/lib/samba/private/*.tdb rm /var/lib/samba/private/*.ldb
Creazione del dominio
Il comando samba-tool domain provision provvede a verificare la correttezza dei parametri e a creare i file di configurazione:
samba-tool domain provision \ --use-rfc2307 \ --realm=RIGACCI-DOM.RIGACCI.ORG \ --domain=RIGACCI-DOM \ --server-role=dc \ --dns-backend=SAMBA_INTERNAL \ --adminpass=MySuperS3cret \ --option="interfaces=lo eth0" \ --option="bind interfaces only=yes"
Vengono mostrate alcune informazioni di riepilogo:
Server Role: active directory domain controller Hostname: rigacci-ad NetBIOS Domain: RIGACCI-DOM DNS Domain: rigacci-dom.rigacci.org DOMAIN SID: S-1-5-21-473854151-3979321753-9043109535
Vengono creati diversi file:
- /etc/samba/smb.conf
- /var/lib/samba/*.tdb
- /var/run/samba/*.tdb
- /var/cache/samba/*.tdb
- /var/lib/samba/private/krb5.conf
Il file /var/lib/samba/private/krb5.conf deve essere travasato (merge) in quello di sistema /etc/krb5.conf.
Verificare in /etc/samba/smb.conf che siano stati indicati correttamente i DNS forwarder (dovrebbero essere stati dedotti da /etc/resolv.conf):
dns forwarder = 1.1.1.1 8.8.8.8
Abilitazione del servizio
L'installazione predefinita Debian imposta il serivizio Active Directory Domain Controller in modalità masked, cioè non attivo e impossibile da avviare da altri servizi (la unit è symlinkata a /dev/null):
systemctl -p LoadState --value show samba-ad-dc.service masked
Si deve fermare e disabilitare i servizi Samba standard (quelli usati in modalità NON Active Directory), quindi avviare e abilitare Samba AD-DC:
systemctl stop smbd nmbd winbind systemctl disable smbd nmbd winbind systemctl unmask samba-ad-dc systemctl start samba-ad-dc systemctl enable samba-ad-dc
Verifica stato del servizio
Verificare che sia in esecuzione:
systemctl status samba-ad-dc
Devono risultare in esecuzione i processi
- /usr/sbin/winbindd
- /usr/sbin/smbd
Il comando samba-tool fornisce informazioni sulla configurazione del dominio (non sullo stato di attività):
samba-tool domain level show Domain and forest function level for domain 'DC=rigacci-dom,DC=rigacci,DC=org' Forest function level: (Windows) 2008 R2 Domain function level: (Windows) 2008 R2 Lowest function level of a DC: (Windows) 2008 R2
Con smbclient si dovrebbero ottenere queste informazioni:
smbclient -L localhost -U% -N Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.9.5-Debian) Reconnecting with SMB1 for workgroup listing. Server Comment --------- ------- Workgroup Master --------- ------- WORKGROUP RIGACCI-AD
Gli share netlogon e sysvol sono stati creati durante il provisioning e devono esistere su un DC.
Verifica risoluzione DNS
Si deve verificare la risoluzione dei nomi da parte di Samba. La richiesta per il record SRV _ldap deve risolvere nel nome del Domain Controller. La richiesta per il record di tipo A deve ovviamente risolvere nell'IP:
host -t SRV _ldap._tcp.rigacci-dom.rigacci.org. _ldap._tcp.rigacci-dom.rigacci.org has SRV record 0 100 389 rigacci-ad.rigacci-dom.rigacci.org.
host -t A rigacci-ad.rigacci-dom.rigacci.org. rigacci-ad.rigacci-dom.rigacci.org has address 10.0.1.190
Anche la richiesta per il record SRV _kerberos deve puntare al DC:
host -t SRV _kerberos._udp.rigacci-dom.rigacci.org. _kerberos._udp.rigacci-dom.rigacci.org has SRV record 0 100 88 rigacci-ad.rigacci-dom.rigacci.org.
Verificare che Samba si comporti anche come un resolver ricorsivo:
host www.rigacci.org www.rigacci.org has address 176.9.39.130 www.rigacci.org has IPv6 address 2a01:4f8:150:5091::2
Porte firewall
Il Samba Domain Controller riceve dai client richieste per diversi servizi, che richiedono l'apertura di alcune porte sul firewall, in particolare conviene aprire:
Servizio | Porta |
---|---|
domain | 53 tcp/udp |
ldap | 389 tcp/udp |
microsoft-ds | 445 tcp/udp |
netbios-ssn | 139 tcp/udp |
epmap | 135 tcp/udp |
Test logon come Administrator
È necessaria la password indicata durante il provisioning:
smbclient //localhost/netlogon -UAdministrator -c 'ls' Enter KOSTELIA-DOM\Administrator's password: . D 0 Fri Aug 20 17:33:05 2021 .. D 0 Fri Aug 20 17:33:08 2021
Creazione utente
samba-tool user create niccolo.rigacci New Password: MySecret
L'utente NON viene aggiunto come utente Unix. Verificare che esista interrogando pdbedit e/o wbinfo:
pdbedit -L -w wbinfo -i 'niccolo.rigacci'
Verificare che il logon funzioni:
smbclient -L //localhost/netlogon -Uniccolo.rigacci%MySecret
Gestione utenti e gruppi
Per elencare utenti e gruppi esistenti si può usare samba-tool:
samba-tool user list samba-tool group list
oppure wbinfo (l'opzione relativa al domain è necessaria per mostrare sia i gruppi BUILTIN che quelli specifici, nel nostro caso il dominio RIGACCI-DOM):
wbinfo -u wbinfo --domain='*' -g
Per aggiungere o togliere un utente al gruppo Administrators
samba-tool group addmembers "Administrators" niccolo.rigacci samba-tool group removemembers "Administrators" niccolo.rigacci
Altri comandi utili:
samba-tool user delete username samba-tool user setpassword username samba-tool user setpassword username --newpassword="NewSecret" samba-tool user setexpiry username --days=7 samba-tool user disable username samba-tool user enable username samba-tool group list samba-tool group add 'Unix Admins' samba-tool group listmembers 'Domain Admins' samba-tool group listmembers 'Domain Users'
Accesso in Remote Desktop
Come impostazione predefinita solo gli utenti del gruppo Domain Admins possono accedere in dekstop remoto ad un host del dominio Active Directory; contrariamente a quanto ci si potrebbe aspettare non è sufficiente appartenere al gruppo Remote Desktop Users.
Per abilitare l'accesso al gruppo Remote Desktop Users è necessario sulla singola macchina eseguire secpol.msc e quindi seguire Allow log on through Remote Desktop Services ⇒ Add Users or Group e aggiungere il gruppo.
Solo dopo questa impostazione da fare su ogni singola macchina sarà sufficiente aggiungere l'utente del dominio al gruppo opportuno:
samba-tool group addmembers "Remote Desktop Users" niccolo.rigacci
Integrazione di utenti e gruppi Samba in Unix
Grazie al demone winbindd e con l'aggiunta della libreria contenuta nel pacchetto Debian libnss-winbind è possibile utilizzare in ambiente Unix gli utenti e i gruppi definiti nel dominio Samba. È sufficiente configurare opportunamente il Name Service Switch aggiungendo il service winbind
a /etc/nsswitch.conf:
passwd: compat systemd winbind group: compat systemd winbind
Diventa quindi possibile utilizzare ad esempio il comando chown:
chown niccolo.rigacci test-file ls -l test-file -rw-r--r-- 1 RIGACCI-DOM\niccolo.rigacci root 0 Aug 23 09:29 test-file
È possibile vedere lo UID Unix generato automaticamente da Winbind per ciascun utente utilizzando il comando:
root@kostelia-ad:~# wbinfo -i niccolo.rigacci RIGACCI-DOM\niccolo.rigacci:*:3000019:100::/home/RIGACCI-DOM/niccolo.rigacci:/bin/false
Opzioni dominio
samba-tool domain passwordsettings show Password informations for domain 'DC=rigacci-dom,DC=rigacci,DC=org' Password complexity: on Store plaintext passwords: off Password history length: 24 Minimum password length: 7 Minimum password age (days): 1 Maximum password age (days): 42 Account lockout duration (mins): 30 Account lockout threshold (attempts): 0 Reset account lockout after (mins): 30
Con questo comando si disabilita l'opzione che impone password complesse:
samba-tool domain passwordsettings set --complexity=off
Windows 10 join a dominio
Impostare DNS
È necessario che la macchina Windows usi come server DNS il Samba Domain Controller, in modo che possa risolvere l'indirizzo IP del server LDAP, ecc.
- Pannello di controllo ⇒ Rete e Internet
- Centro connessioni di rete e condivisione ⇒ Modifica impostazioni scheda (a sx dello schermo)
- Scheda di rete ⇒ click destro ⇒ Proprietà ⇒ Protocollo TCP/IP v4 ⇒ Proprietà
- DNS ⇒ Impostare l'indirizzo IP del Samba AD-DC, nel nostro esempio 10.0.1.190
Impostare suffisso DNS
- Pannello di controllo ⇒ Rete e Internet
- Centro connessioni di rete e condivisione ⇒ Modifica impostazioni scheda (a sx dello schermo)
- Scheda di rete ⇒ click destro ⇒ Proprietà ⇒ Protocollo TCP/IP v4 ⇒ Proprietà
- Avanzate
- DNS ⇒ Suffisso DNS: Dominio DNS, nel nostro esempio rigacci.org
Join dominio
- Pannello di controllo ⇒ Sistema e sicurezza ⇒ Sistema ⇒ Impostazioni di sistema avanzate
- Nome computer
- Per rinominare il computer oppure modificare il suo dominio… ⇒ Cambia
- Dominio: Nome del dominio, es. RIGACCI-DOM
Risuluzione problemi
Durante il join a dominio può essere utile verificare le richieste DNS che vengono fatte al Domain Controller (ad esempio con tcpdump). La procedura prevede di interrogare per diversi record di tipo SRV, uno dei problemi più frequenti è il suffisso DNS che viene aggiunto automaticamente in coda al record.
tcpdump -i eth0 -n 'port 53'
Verifica
Dopo aver fatto il join, sul Domain Controller Samba si può verificare che il PC risulti correttamente aggiunto con:
samba-tool computer list
Windows 10 logon a dominio
Alla schermata di avvio di Windows si utilizza la seguente sintassi DOMINIO\username per effettuare il logon a dominio, nel nostro esempio RIGACCI-DOM\niccolo.rigacci.
Per verificare le credenziali con cui si è fatto accesso: Pulsante Windows ⇒ Impostazioni ⇒ Account ⇒ Le tue info.
Per accedere invece con utente locale del PC si usa la sintassi NOMEPC\username.
Modifica record LDB di un utente
Le informazioni che riguardano gli utenti sono contenute in un database LDB. È è possibile utilizzare il comando ldbedit (fornito dal pacchetto Debian ldb-tools) per visualizzare e modificare direttamente il contenuto di un record:
ldbedit -H /var/lib/samba/private/sam.ldb 'sAMAccountName=niccolo.rigacci'
Viene lanciato l'editor ($VISUAL oppure vi) ed è possibile correggere o aggiungere campi. Ad esempio è possibile aggiungere il percorso per il profilo roaming (senza slash finale):
profilePath: \\server\profiles\niccolo.rigacci
Attivare i profili roaming
È necessario creare la directory che conterrà i profili utente e condividerla con uno share di nome profiles. Nel file /etc/samba/smb.conf aggiungere la sezione:
[profiles] path = /home/samba/profiles read only = no
La directory /home/samba/profiles deve avere mode 2775 e appartenere a root:users. Non è necessario riavviare il servizio, la modifica al file viene riconosciuta al volo e resa attiva.
Attivazione per il singolo utente
Per attivare il profilo roaming per un singolo utente è sufficiente aggiungere l'attributo profilePath al record LDB di quell'utente. Sull'host Samba Active Directory si esegue:
ldbedit -H /var/lib/samba/private/sam.ldb 'sAMAccountName=niccolo.rigacci'
quindi si aggiunge l'attributo:
profilePath: \\server\profiles\niccolo.rigacci
Questa impostazione è sufficiente ad ottenere il profilo roaming, non è necessario alcuna modifica alla configurazione del singolo host. In alternativa alla riga di comando GNU/Linux si può utilizzare il programma Windows Active Directory Users and Computers.
Attivazione per tutti gli utenti di un computer
ATTENZIONE: Questa ricetta non attiva il profilo roaming per tutti gli utenti del dominio, ma per tutti gli utenti che si collegano ad un certo computer.
Per attivare il profilo roaming per tutti gli utenti del dominio si può utilizzare il programma Windows chiamato Group Policy Management Console, che ovviamente richiede i privilegi di Administrator. Seguendo il percorso Computer Configuration ⇒ Policies ⇒ Administrative Templates ⇒ System ⇒ User Profiles si arriva alla dialog box Set roaming profile path for all users logging onto this computer.
Nella versione italiana: si cerca Modifica Criteri di gruppo, viene trovato ed avviato l'Editor Criteri di gruppo locali, quindi ⇒ Criteri Computer locale ⇒ Configurazione computer ⇒ Modelli amministrativi ⇒ Sistema ⇒ Profili utente si arriva a Imposta percorso profilo mobile per tutti gli utenti che accedono al computer.
Nell'apposita edit box sarà sufficiente aggiungere qualcosa del tipo:
\\SERVER\PROFILES\%USERNAME%