Configurazione di Samba 4 come Domain Controller Active Directory
Questi sono appunti preliminari, scritti purtroppo senza avere chiaro come funziona ogni singolo pezzo. Il punto di partenza e` l'howto dal sito di Samba, qui: https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO
Prerequisiti
- Samba richiede l'uso delle ACL Posix e degli attributi estesi sul file system. Occorre quindi usare ext4 (che li supporta di default) oppure abilitarli sul file system che volete usare.
Non ci deve essere un DNS server sulla macchina che fa da AD, perche` lo fa Samba e non si puo` fare diversamente. Per impostare correttamente il DNS in modo da non avere problemi, se necessario, verificare prima come gestire dnsmasq con samba per non farli cozzare. E` importante avere il DNS di Samba funzionante senza che cozzi con altri programmi per l'uso della porta 53 perche` altrimenti poi anche il provisioning sembra funzionare ma fallisce, e i test non passeranno, a partire dal primo. Fare riferimento anche a: ../IntegrazioneSambaDnsmasq
- Usare NTP perche` la sincronizzazione dell'ora e` importante (anche nei member server. Sui client windows si arrangia a chiedere NTP al DC)
Installazione di Samba in Debian 9 (senza systemd)
- Installare normalmente i pacchetti di Samba "ufficiali"
aptitude install samba winbind smbclient libnss-winbind libpam-winbind
Ora si puo` eseguire il provisioning del dominio come indicato piu` sotto, poi avviare con /etc/init.d/samba-ad-dc start
Installazione di Samba in Debian 8 (senza systemd)
Questa installazione e` stata fatta usando i pacchetti di samba 4.5.2 da van-belle.nl (https://downloads.van-belle.nl/samba4/) ma probabilmente l'elenco dei pacchetti e` lo stesso di samba ufficiale di Debian 8.
La procedura che uso e` parecchio manuale: in pratica scarico dal sito il tgz con dentro tutti i pacchetti, lo piazzo dentro a una directory e poi creo una config di apt che punta a quella directory come se fosse un repository personalizzato. Ovviamente in questo modo non si hannno aggiornamenti automatici, ma visto che sono pacchetti non ufficiali tutto sommato credo che sia meglio avere un controllo molto stretto su cosa si aggiorna, quindi e` perfetto cosi`.
- Scarichiamo il pacchetto TGZ contenente Samba per la nostra architettura dal sito.
Spacchettiamo dentro una directory (diciamo /root/samba/) il che ci porta ad avere, considerando ache l'architettura, i files sotto a /root/samba/amd64. (o i386)
- Aggiungiamo la directory ai repo di apt, con questo pratico comando:
echo "deb [trusted=yes] file:/root/samba amd64/" > /etc/apt/sources.list.d/samba-van-belle.list
- A quest punto possiamo installare Samba cosi`:
aptitude install samba winbind smbclient libnss-winbind libpam-winbind
Ora si puo` eseguire il provisioning del dominio come indicato piu` sotto, poi avviare con /etc/init.d/samba-ad-dc start
Installazione di Samba da Sernet (deprecato visto che sono passati a pagamento)
Vai su https://portal.enterprisesamba.com/ e segui le istruzioni per installare samba piu` moderno disponibile non a pagamento.
Installa il pacchetto sernet-samba-ad che si porta dietro le dipendenze richieste
Modifica il file /etc/default/sernet-samba per impostare SAMBA_START_MODE="ad"
- Disabilita gli script di init che non servono in modo ad:
insserv -r sernet-samba-nmbd insserv -r sernet-samba-smbd insserv -r sernet-samba-winbindd
Ricorda che gli script di init si chiamano sernet-samba-qualcosa, e che quello che ti interessa usare e` /etc/init.d/sernet-samba-ad
Provisioning del dominio
Prima di partire, occorre ricordare che il dominio AD funziona con il DNS, ergo e` esigente e invadente al riguardo. Occorre controllare che l'hostname fully qualified (con anche il dominio) del server dove stiamo installando Samba sia congruente con quello che sara` il nome del dominio AD, e sia risolvibile correttamente sia dal server stesso che dai client che poi aggiungeremo, sia a dritto che a rovescio. Qui le best practice sono tante e non tutte concordano, ma il senso importante e` che il nome del dominio AD NON SI CAMBIA MAI PIU` dopo averlo impostato. Molti suggeriscono di usare un subdomain di un nome di dominio ufficiale e registrato (tipo ad esempio dominiosamba.pippo.it) ma io nell'unica prova che ho fatto ho preferito usare un dominio non registrato pubblicamente, tipo "nomeazienda.locale". Badate bene di NON usare ".local" che e` stato "rubato" da Avahi (Bonjour) e quindi ci sarebbero problemi nella risoluzione dei nomi. Se si prevede di avere una "foresta" (come la chiama MS) di domini correlati, allora occorre considerare bene la scelta dei nomi, ma questo va oltre lo scopo attuale del sottoscritto, che e` di avere un dominio AD e basta.
Essendo una nuova installazione, partiamo da zero.
- Fermare samba
- Cancellare o rinominare /etc/samba/smb.conf
- Se ci sono, cancellare tutti i files tdb e ldb
- Effettuare il provisioning del dominio con il comando samba-tool (Se il server ha piu` di una NIC, scegliere quella giusta per Samba a mezzo delle due option relative alle interfacce. Se ne ha una sola non e` necessario)
samba-tool domain provision --use-rfc2307 --interactive --option="interfaces=lo eth0" --option="bind interfaces only=yes"
- Rispondere alle domande (e ricordarsi la password impostata per administrator). Attenzione alla policy di default per la password: almeno 8 caratteri con almeno un simbolo o un numero e una maiuscola e una minuscola se ricordo bene.
Se tutto ha funzionato senza errori, si puo` riavviare Samba. (Se usate Sernet su Debian il comando e` /etc/init.d/samba-ad-dc start; Se usate Samba di van-belle.nl il comando e` /etc/init.d/samba-ad-dc start)
Il tool di provisioning avra` creato una serie di cose:
- un file /etc/samba/smb.conf (guardateci dentro)
- due share di sistema necessari (indicati in smb.conf), che come potete vedere hanno gia` impostati attributi estesi, ACL posix, e appartengono a un gruppo che non esiste nel sistema. Questo e` normale per Samba 4 in modo AD che a differenza di samba 3 non usa utenti e gruppi locali.
- un database LDAP dentro al suo personale server LDAP (io odio fortissimamente LDAP, ma qui e` necessario)
- Tre utenti in Samba: administrator, krbtgt e nobody.
- Un server DNS locale (integrato in Samba) che risolve i nomi buffi necessari per il funzionamento del dominio AD. Vedremo poi come usarlo.
Reimpostare il DNS
Samba vuole risolvere i suoi nomi interni per funzionare, ergo se il server dove e` installato samba usa come DNS un altro DNS che non sia se` stesso, o che non sia in qualche modo configurato per richiedere a Samba i nomi giusti, allora Samba quando si avvia dara` errori nel log (e non so poi se possa funzionare bene).
Il bello di Samba in versione AD e` che e` semplice (sarcasmo).
Quindi, la cosa piu` facile da fare e` impostare in /etc/resolv.conf il dns per essere localhost (127.0.0.1) prima di avviare Samba.
Avviare Samba per la prima volta
Avviamo Samba per la prima volta e verifichiamo se ci sono errori nel syslog.
Configurazione di NTP
Ntp deve essere installato sul DC (e l'abbiamo gia` detto). Pero` deve anche essere configurato. Occorre che NTPD legga un socket messo a disposizione da Samba (per la quale cosa faremo apposita configurazione), che supporti ntptd_signd (Quello di Debian 7 e` a posto), e ovviamente che sia accessibile dai client del dominio sulla LAN.
Per ottenre questo risultato, dobbiamo:
- Installare NTP dal pacchetto Debian
Verificare i permessi della directory /var/lib/samba/ntp_signd, la quale deve poter essere letta dal server NTP, che gira con user e gruppo "ntp". Modifichiamo i permessi come segue:
chgrp ntp /var/lib/samba/ntp_signd chmod 750 /var/lib/samba/ntp_signd
Modificare /etc/ntp.conf per leggere questo socket:
# aggungere questa riga: ntpsigndsocket /var/lib/samba/ntp_signd # modificare queste righe (mssntp aggiunto in fondo a tutte e due) restrict -4 default kod notrap nomodify nopeer noquery mssntp restrict -6 default kod notrap nomodify nopeer noquery mssntp
- Riavviare ntp
Verificare nel syslog che NTP riporti questo messaggio: ntpd[30129]: MS-SNTP signd operations currently block ntpd degrading service to all clients.
- Nel dubbio riavviare Samba
* Per verificare se un client legge NTP, eseguire un CMD come amministratore e usare il comando
w32tm /resync
Configurare nnswitch
Per poter vedere correttamente gli utenti di Samba dal sistema (sulla macchina stessa del DC AD), usando samba 4.2 o superiore, e` sufficiente verificare che winbindd stia girando (ps ax) e poi modificare il file /etc/nsswitch.conf come segue:
passwd: compat winbind group: compat winbind
(occorre che le librerie libnss-winbind libpam-winbind siano installate)
Test
I test minimali li ho presi direttamente dall' HOWTO.
Prima di tutto il test con smbclient, che si fa cosi`:
smbclient -L localhost -U%
L'output e` tipo questo:
Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.x.y] Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.x.y) Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.x.y] Server Comment --------- ------- Workgroup Master --------- -------
Poi l'accesso a uno share:
smbclient //localhost/netlogon -UAdministrator -c 'ls'
L'output e` tipo questo:
Enter Administrator's password: passw0rd Domain=[SAMDOM] OS=[Unix] Server=[Samba 4.x.y] . D 0 Sat Jul 5 08:40:00 2014 .. D 0 Sat Jul 5 08:40:00 2014 49386 blocks of size 524288. 42093 blocks available
Passo successivo il test del DNS. Queste query devono dare tutte risposte sensate e mai un not found.
host -t SRV _ldap._tcp.<dominio.tld>. host -t SRV _kerberos._udp.<dominio.tld>. host -t A <hostname FQDN del domain controller>
Nell' HOWTO si parla anche di un test con Kerberos, senza pero` dire nulla di piu`. A quanto ho capito io non e` necessario installare il client Kerberos sul server AD, se non per il test. Magari ho capito male. In ogni caso, la procedura per installare il client Kerberos e`:
aptitude install heimdal-clients cd /etc/ mv krb5.conf krb5.conf.originale ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf
La procedura di test per Kerberos richiede due comandi, kinit e klist:
kinit administrator@DOMAIN.LOCALE
Notare che il dominio deve essere in maiuscolo! Viene chiesta la password di administrator.
klist
Viene mostrato un output tipo questo:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@SAMDOM.EXAMPLE.COM Valid starting Expires Service principal 07/05/14 23:20:17 07/06/14 09:20:17 krbtgt/SAMDOM.EXAMPLE.COM@SAMDOM.EXAMPLE.COM renew until 07/06/14 23:20:15
Test dell'integrazione con il sistema (solo per samba 4.2.x o superiore)
- Verificare se Winbind legge correttamente i dati da Samba (devi vedere i gruppi e gli utenti di Samba come output)
wbinfo -u administrator krbtgt guest wbinfo -g enterprise read-only domain controllers domain admins domain users domain guests domain computers domain controllers schema admins enterprise admins group policy creator owners read-only domain controllers dnsupdateproxy
- Verificare se NSS vede utenti e gruppi di Samba
id administrator uid=0(root) gid=0(root) groups=0(root) id guest uid=3000011(guest) gid=3000012(domain guests) groups=3000012(domain guests),3000011(guest),3000015(BUILTIN\guests) getfacl /var/lib/samba/sysvol getfacl: Removing leading '/' from absolute path names # file: var/lib/samba/sysvol # owner: root # group: BUILTIN\134administrators user::rwx user:root:rwx user:BUILTIN\134administrators:rwx group::rwx group:BUILTIN\134administrators:rwx group:BUILTIN\134server\040operators:r-x group:3000002:rwx group:3000003:r-x mask::rwx other::--- default:user::rwx default:user:root:rwx default:user:BUILTIN\134administrators:rwx default:group::--- default:group:BUILTIN\134administrators:rwx default:group:BUILTIN\134server\040operators:r-x default:group:3000002:rwx default:group:3000003:r-x default:mask::rwx default:other::---