====== 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 [[#scelta_del_nome_del_dominio|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% ===== Web References ===== * **[[https://www.server-world.info/en/note?os=Debian_10&p=samba&f=4|Configute Samba Active Directory Domain Controller]]** * **[[https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller|Setting up Samba as an Active Directory Domain Controller]]** * **[[https://wiki.samba.org/index.php/User_and_Group_management|User and Group management]]**