User Tools

Site Tools


doc:appunti:linux:sa:samba_ad

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 ServicesAdd 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 WindowsImpostazioniAccountLe 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 ConfigurationPoliciesAdministrative TemplatesSystemUser 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 localeConfigurazione computerModelli amministrativiSistemaProfili 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%

Web References

doc/appunti/linux/sa/samba_ad.txt · Last modified: 2021/10/27 18:15 by niccolo