Samba e le reti Windows

(aggiungere indice cliccabile!)


1) Struttura e utilità

Samba si presenta come un insieme di applicazioni che si avvalgono del protocollo SMB (Server Message Block) comune ad altri sistemi operativi di largo utilizzo, come Microsoft Windows e OS/2. Da qui la possibilità di fare fronte a diverse necessità di un network:
--condividere file
--condividere stampanti
--assistere i client nella ricerca delle risorse disponibili (Local Master Browser e Domain Master Browser)
--autenticare i client che si collegano a un donlinio Windows
--assumere la funzione di WINS server.

Samba è reperibile all'indirizzo http://www.samba.org

1.1 Analisi e configurazione di base

Come già accennato in precedenza, Samba si presenta come un insieme di programmi con diverse finalità. In realtà sono due i più importanti, meglio definiti con il termine demoni: smbd e nmbd.
Smbd è il demone responsabile della gestione delle risorse condivise tra il server Samba e i client collegati; fornisce ai client SMB l'accesso ai file condivisi, alle risorse di stampae la visualizzazione delle risorse nella navigazione di rete; è responsabile delle notifiche di funzionamento tra server e client e dell'autenticazione degli utenti.
Nmbd è il demone che imita le funzionalità di un server WINS e NetBIOS; rimane in ascolto delle chiamate dei client fornendo le informazioni appropriate per il collegamento ; è responsabile della lista
dei nomi che compare nella navigazione delle risorse di rete e partecipa nella scelta del server browser primario.
Esistono altri programmi di supporto forniti a corredo:

-- smbclient: un client Unix con una interfaccia simile a quella ftp che può essere utilizzato per connettersi alle condivisioni Samba;
-- smbtar: un piccolo ma efficiente script per eseguire dei backup di dati condivisi SMB/CIFS direttamente su unità nastro;
-- nmblookup: utilizzato per interrogare nomi NetBIOS e mapparli ai loro rispettivi indirizzi IP in un network che fa uso del procotollo NBT (NetBIOS su TCP/IP);
-- smbpasswd: permette di cambiare le password criptate usate da Samba;
-- smbstatus: programma che visualizza le connessioni alle condivisioni in corso
-- testparm: semplice utility per verificare la correttezza di un file di configurazione smbd. Se non restituisce nessun errore si può essere sicuri che la configurazione verrà caricata da smbd, tenendo presente che il controllo non assicura di ottenere i risultati attesi ma solo di non avere commesso errori formali.
A questo punto si è pronti per generare il file di configurazione, chiamato smb.conf. Questo file è fondamentale per gestire il comportamento di Samba dal momento che contiene tutti i parametri necessari al funzionamento nel suo complesso. La fase di installazione non lo genera automaticamente (anche se spesso vengono rilasciati dei file di esempio nella documentazione); si procederà alla sua creazione integrandovi pochi comandi esclusivamente allo scopo di verificare il funzionamento del server. Durante il corso abbiamo visto la generazione di tale file utilizzando l'interfaccia grafica SWAT, in questo articolo si entra più nel dettaglio, non prima di avere spiegato nel suo insieme il funzionamento di una rete Microsoft per una migliore comprensione delle procedure.

1.2 I protocolli: SMB e TCP/IP

La grande popolarità di Samba risiede nell'ottima compatibilità del server con le reti Microsoft grazie al comune utilizzo del protocollo SMB (Server Message Block). Per affrontare con la dovuta preparazione l'argomento, è doveroso analizzare i concetti che stanno alla base di una rete SMB: il NetBIOS di IBM e il successivo NBT.
Il primo venne creato da IBM nel 1984 per affrontare in modo rudimentale il problema della connessione e della condivisione di dati tra computer; consisteva in una semplice interfaccia API (application programming interface) il cui acronimo significava per esteso Network Basic Input/Output System. L'anno successivo ne venne rilasciata una versione migliorata definita NetBEUI che permetteva di creare piccole reti locali (LAN) dove ciascuna macchina possedeva un unico nome di riconoscimento di 15 caratteri per un totale massimo di 255 nodi.
La fondamentale differenza che intercorre tra protocollo NetBIOS e TCP/IP consiste nella rappresentazione dei client sulla rete: il primo si avvale esclusivamente di nomi sotto forma di un range di caratteri alfanumerici; il secondo di un gruppo di triplette numeriche come ad esempio 192.168.1.100. Da qui nacque l'esigenza di unire i due protocolli e nel 1987, l'Internet Engineering Task Force (IETF) pubblicò una serie di documenti (RFC 1001-1002) che esponevano come adattare NetBIOS a reti TCP/UDP; il risultato fu l'implementazione di NetBIOS over TCP/IP (NBT). Il protocollo NBT consiste di tre servizi di rete:
-- un servizio di risoluzione nome-indirizzo
-- un servizio Datagram che si incarica di spedire pacchetti di dati direttamente o in broadcast senza accertarsi dell'arrivo a destinazione (UDP)
-- un servizio Session che instaura una comunicazione che permette di rilevare problemi o inoperabilità di connessione (TCP).

Nel sistema di connessione NetBIOS ogni volta che una macchina accede alla rete, cerca di identificarsi con un nome; questa operazione viene anche definita name registration (fig. 1-2)..

Fig 1: Registrazione del nome senza un NetBIOS Name server. Fig 2: Registrazione del nome con un NetBIOS Name Server.

Ovviamente il maggiore problema che si può riscontrare in questa fase è nella verifica che non esistano due macchine con lo stesso nome in un dato momento. Due sono le soluzioni utilizzabili: avvalersi di un NetBIOS Name Server (NBNS) che tenga traccia delle differenti identità nome­macchina, oppure lasciare che sia compito del client “difendere” il proprio nome. Oltre al problema sopra esposto si deve garantire l'abbinamento tra un nome NetBIOS a uno specifico indirizzo IP; questa fase è anche conosciuta con il termine name resolution (fig. 3-4).

Fig 3: Risoluzione del nome senza un NetBlOS Name Server. Fig 4 Risoluzione del nome con un NetBlOS Name Server.

NBT affronta il problema permettendo a ciascuna macchina di rispondere a una richiesta in broadcast del nome NetBIOS con il proprio indirizzo IP o, in alternativa, awalendosi di un NBNS nella risoluzione nomi NetBlOS/indirizzi IP.
Di seguito si può vedere la tabella dei tipi di nodi NBT:

Se si desidera verificare il tipo di nodo utilizzato
da una macchina Windows, digitare al prompt dei comandi MSDOS

C:\>ipconfig /all

La finestra restituita dovrebbe mostrare alla voce "tipo di nodo" il termine ibrido (scelta usuale nelle reti Microsoft).

 

2) Funzionamento delle reti Microsoft

Quanto detto fino ad ora permette di descrivere il funzionamento tipico di una rete Microsoft fornendo le necessarie informazioni per il successivo approfondimento dei parametri di configurazione smb.conf.

2.1 Windows Domains

È possibile definire un gruppo di lavoro (workgroup) come un insieme di computer SMB che risiedono in una sottorete (subnet) e che accedono allo stesso gruppo SMB. Un dominio Windows consiste in un workgroup con un server in qualità
di domain controller.
Questa mansione è di fondamentale importanza dal momento che:
-- gestisce il processo di autenticazione (garantire o negare l'accesso a risorse condivise attraverso l'uso di password)
-- gestisce il sistema di controllo username-password per mezzo di un security account manager (SAM)
Una volta che un client viene autenticato, non necessita
più di una seconda verifica e viene considerato collegato
al workgroup; (riferirsi alla figura 5 per lo schema di funzionamento).
Il domain controller attivo in un dominio viene anche dèfinito Primary Domain Controller (PDC); esiste anche la possibilità di configurare una seconda macchina in qualità di Backup Domain Controller (BDC) nel caso (non così infrequente) che il PDC diventi inaccessibile.
Questa lunga disgressione ci permette di asserire che Samba può assumere il ruolo di PDC in luogo di soluzioni ben più costose.

2.2 Sistema di Browsing

Ogni volta che una macchina collegata a un workgroup ricerca le risorse condivise, effettua una operazione di browsing.
In un network SMB ne esistono di due tipi:
-- browsing di una lista di macchine (con delle risorse condivise)
-- browsing di risorse condivise di una particolare macchina.

In un workgroup Windows, la macchina adibita al mantenimento di una lista aggiornata di macchine si chiama
Local Master Browser.

Fig 5: Autenticazione con un domain controller

L'accesso alle risorse di una singola macchina awiene invece attraverso il collegamento diretto alla stessa. Il ruolo del Local Master Browser è di grande importanza poiché ogni volta che un server si autentica in workgroup con un nome NetBIOS, lo comunica al LMB. In una rete Microsoft praticamente tutti i S.O. Windows possono ricoprire tale mansione, quindi per decidere il responsabile di questo compito si deve effettuare un'elezione (election). Una "elezione" consiste nell'invio in broadcast del proprio ruolo ricoperto nella rete attraverso il servizio datagram; questa informazione consiste in un valore numerico (si entrerà nel dettaglio più avanti). Ovviamente anche Samba vi partecipa attivamente. Accanto al ruolo di LMB è possibile trovare quello di Domain Master Browser. Quest'ultimo entra in gioco quando si hanno più subnet collegate tra loro: i vari LMB comunicano e si sincronizzano con il DMB permettendo l'aggiornamento delle liste delle risorse a disposizione di tutto il dominio Windows (spesso impossibile con un semplice broadcast dal momento che molti amministratori di rete bloccano questa operazione sui router).
La figura 6 riassume quanto esposto.

Fig 6: Wins Server

2.3 Il server WINS

Ultimo argomento da trattare a sommario completamento della panoramica sulle reti Microsoft è il Windows Internet Name Service (WINS). Questo servizio è la risposta Microsoft a NBNS, grazie ad esso è possibile gestire i client con i loro nomi, indirizzi e workgroup di appartenenza. Anche in questo caso esiste un WINS server attivo definito col nome di Primary WINS Server; accanto a esso si può collocare un server secondario che entra in azione nel caso che il principale non sia più disponibile. Samba può rivestire il ruolo di primary WINS Server come vedremo più avanti nell'analisi del file di configurazione.

2.4 Configurare un client Windows XP

È ora possibile inoltrarsi nella configurazione di una macchina Windows per un primo tentativo di accesso al server Samba. La scelta di Windows XP è legata principalmente alla sua attuale diffusione e alla presenza di alcuni problemi di connessione (come nel caso di Samba con mansione di PDC); in questo modo si ha l'occasione di approfondire questi aspetti assai dibattuti nella comunità Internet. Windows XP rende il processo di configurazione della rete abbastanza semplice e automatizzato (ora si può “addirittura” modificare i paramwetri di rete senza necessità di riavviare il sistema!!). Il riconoscimento della presenza di una scheda di rete ethernet genera automaticamente una connessione locale; dovrebbe essere solamente necessario impostare i parametri di collegamento (ip, dns, wins). Dal pannello di controllo selezionare "connessioni di rete", nel caso sia già presente una connessione alla rete locale, si procederà direttamente alla configurazione dell'indirizzo IP e subnet mask. Per crearne una nuova utilizzare "Crea nuova connessione" oppure "Installa una rete domestica o una piccola rete aziendale". La prima permette di configurare il singolo client, la seconda dà la possibilità di creare un disco d'installazione con i parametri scelti da applicare a tutte le macchine del workgroup. Una volta fatta la scelta, si passa alla fase vera e propria di configurazione. La finestra che segue richiede la tipologia di collegamento che si desidera installare per gli scopi prefissati, la terza opzione (installazione di una rete domestica o di una piccola rete aziendale) può andare bene. A questo punto Windows XP ci vuole informare riguardo a come il client è collegato alla rete; si scelga l'opzione più appropriata. Infine si arriva alle richieste che coinvolgono più direttamente i concetti fino a qui esposti: il nome NetBIOS della macchina e il workgroup di appartenenza. Gli esempi qui riportati utilizzano rispettivamente FIREFOX ed ESEMPIO: sostituiteli con quelli impostati nella vostra rete. Ultimato il processo di rilevamento, si dovrebbe essere in grado di visualizzare l'icona di connessione in "Connessioni di rete". Nel caso il client non abbia raccolto i dati necessari (in assenza di un DHCP server), si dovrà procedere all'inserimento manuale dei parametri: la richiesta delle "proprietà" sull'icona sopra citata aprirà la finestra di dialogo per cambiare i parametri TCP/IP della macchina.
Per le prove qui eseguite è stata configurata con:
indirizzo IP 192.168.1.111,subnet mask 255.255.255.0, WINS server 192.168.1.100 (gestito da Samba). Si presti attenzione nel caso d'utilizzo di valori differenti di mantenere nella stessa subnet l'indirizzo del server samba e quello del client di prova. Comunque, è possibile (anche se meno elegante e flessibile) utilizzare il file /etc/hosts sotto Linux e c:\windows\hosts nelle macchine Windows per la risoluzione dei nomi e dei loro rispettivi indirizzi IP.

2.6 Il file di configurazione smb.conf

Abbiamo visto il comando:

#~smbclient -L localhost

per testare il funzionamento del servizio; ègiunto il momento di verificare l'utilità di Samba con una macchina remota Windows. Per prima cosa è necessario cambiare i permessi d'accesso della cartella /prova affinché utenti non registrati sulla macchina Linux possano comunque operare in lettura e scrittura:

#~chmod 777 /prova

Chiaramente, l'impostazione di una così scarsa politica di sicurezza di accesso è da sconsigliare; in questo caso tornerà utile per agevolare l'introduzione di parametri più complessi su una condivisione pubblica. Spostiamoci sul client FIREFOX di prova (si consiglia di impostare una connessione ssh per il controllo remoto del server per evitare inutili e faticosi sposta menti di consolle) e cerchiamo all'interno delle "Risorse di Rete" la condivisione "test su Samba Server" impostata. Se non si riuscisse a visualizzarla, selezionare dal menu a sinistra "Tutta la rete": a questo punto, dovrebbe comparire il workgroup di appartenenza e le relative condivisioni, tra le quali il server Samba predisposto. Ora si è operativi con una cartella pubblica; si provi a copiarvi dei dati all'interno, rinominarli e cancellarli per testarne il buon funzionamento. Il file di configurazione smb.conf è strutturato in diverse sezioni, delimitate da alcuni parametri tra parentesi quadre:

[global]
...

[homes]
...

[printers]
...

[test]
...

Tutte le sezioni indicano qualche sorta di condivisione risorse, che sia una parte di disco o una stampante, ad eccezione della prima [global] che racchiude i parametri generali di Samba e comuni al resto del file di configurazione. All'interno di ciascuna di esse sono raccolti i parametri sotto forma di

opzione = valore

È anche possibile inserire delle linee aggiuntive di informazione (commenti) preceduti dal segno "#" o";".

Passiamo all'inserimento di nuovi comandi nella sezione global, che dovrebbe mostrare le seguenti linee:

[global]
# Parametri di configurazione Server

netbios name =LIGHTLORD
server string = Samba %v on (%L)
workgroup = ESEMPIO
security = share

Le due righe di comandi inserite annunciano rispettivamente, la presenza del server Samba sul network NBT con il nome LlGHTLORD e come descrizione aggiuntiva, la versione in uso e di nuovo il nome del server. L'utilizzo delle variabili, indicate con il segno %<n>, sono utili laddove occorra in casi particolari; nel box qui sotto il significato delle varibili.

Procediamo con le altre opzioni.
Inserire nella sezione

[global]
hosts deny = 192.168.1.111

e ritentare la connessione dopo avere riavviato Samba (/etc/init.d/samba restart - come root). Si potrà verificare l'impossibilità a connettersi: si è negato l'accesso a Samba dall'IP indicato. Il funzionamento di hosts deny (e il suo contrario, hosts allow) è simile a quello di /etc/hosts.allow e /etc/hosts.deny. Se quindi si procede all'inserimento (dopo l'eliminazione del parametro sopra riportato):

hosts allow = 192.168.1. except 192.168.1.111
hosts deny = all

Si otterrà un risultato identico al precedente, con una importante differenza: l'accesso alle condivisioni è garantito all'intero range di indirizzi 192.168.1 tranne che al client FIREFOX che usiamo di prova, oltre che a bloccare tutti gli IP al di fuori della subnet. I comandi appena mostrati possono tornare utili se si vuole permettere l'accesso di certi client a un server (attraverso una policy basata sul file /etc/hosts) con un secondo controllo da parte di Samba per l'utilizzo delle risorse condivise. Rimettiamo in funzione la mini rete di prova, con i concetti di sicurezza sopra esposti:

[global]
# Parametri di configurazione Server

netbios name = LlGHTLORD server string = Samba %v on (%L) workgroup = ESEMPIO
security = share

#Parametri diconfigurazione permessi di accesso globali
hosts allow = 191.168.1. 127.0.0.1
hosts deny = all

Un ulteriore elemento di controllo sono i parametri interfaces e bind interfaces. Il primo permette di definire le schede di rete da utilizzare per comunicare (di default eth0); il secondo istruisce nmbd a respingere i dati che provengono dal broadcast tranne che dalle subnet definite da interfaces. Nel caso della macchina in prova, la eth0 ha come IP 1.15.141.42 mentre la eth1 192.168.1.100; definiremo nella sezione global:

#Parametri di scelta interfaccia
interfaces = 192.168.1.0/255.255.255.0 127.0.0.1
bind interfaces only = yes

Come è possibile notare, non si introduce l'IP esatto della scheda ma la subnet di appartenenza, con l'inserimento dell'indirizzo localhost altrimenti c'è il rischio che lo script smbpasswd non sia in grado di colloquiare con il server nella modalità di default. A questo punto è necessario presentare due comandi fondamentali per la fase di debugging di Samba: log level e log file.
Log level indica il livello di dettaglio (da 1 a 10) del file di log degli eventi accaduti durante l'esecuzione di Samba, compresi owiamente i possibili errori riscontrati. Si consiglia di settare sempre questo parametro almeno al suo valore più basso, cioè 1, per la verifica dei possibili problemi giornalieri che possono insorgere.
Il valore di riferimento per un buon equilibrio tra dettaglio e performance è 3, oltre il quale si rischia di incorrere in file di log molto grandi (che possono presto saturare lo spazio libero sull'hard disk) e utili solo ai programmatori del servizio. I creatori di Samba hanno comunque pensato anche a questa eventualità, fornendo il comando max log size per limitarne le dimensioni (in KB). Log file permette di definire la posizione dei file di log e il modo nel quale vengono rinominati; la directory di default è /var/log/samba.
Aggiungiamo quanto detto alla definizione global di smb.conf

# Parametridi configurazione dei log
log level = 3
log file = /var/log/samba.log.%m
max log size = 50


2.7 Local Master Browser

Esaminiamo ora l'attivazione delle proprietà di master browsing, PDC e supporto Wins iniziando dal Local Master Browser. Per fare in modo che Samba partecipi a vari livelli all'elezione come Local Master Browser inserire sempre in [global]

#Parametri di elezione browsing
os level = 34
local master = yes
preferred master = yes

Analizziamo i nuovi parametri inseriti:
os level utilizza un numero intero (da O a 255) per stabilire in che modo partecipare all'elezione (vedere le tabelle 4 e 5). In prima istanza si verifica il livello dei sistemi operativi; in caso di parità si procede alla comparazione del ruolo di ciascuna macchina all'interno del workgroup. Nell'esempio qui citato, utilizzando anche il comando preferred master si associa il valore 8 al server Samba, permettendogli di battere una possibile macchina Windows con la quale ha ottenuto un pareggio con il valore os level.
local master informa il server Samba di partecipare all'elezione come local master browser.
preferred master fa in modo di forzare una elezione ogni volta che Samba si connette al workgroup, anche se un local master browser è già attivo (con un valore di 4).

Per verificare la situazione di browsing nel network, è possibile dal prompt di MS-DOS lanciare il comando:

C:\>nbtstat -a LIGHTLORD

Si ottiene un output dei Nomi di Netbios del computer remoto confrontabile con la tabella:

Nome Tipo   Stato
LIGHTLORD
<00>
UNICO
REGISTRATO
LIGHTLORD
<03>
UNICO
REGISTRATO
LIGHTLORD
<20>
UNICO
REGISTRATO
_MSBROWSE_
<O1>
GRUPPO
REGISTRATO
ESEMPIO
<00>
GRUPPO
REGISTRATO
ESEMPIO
<1D>
UNICO
REGISTRATO
ESEMPIO
<1E>
GRUPPO
REGISTRATO

La riga di nostro interesse è la quarta (MSBROWSE): comunica all'utente che la macchina interrogata possiede i privilegi di local master browser del workgroup ESEMPIO.


I valori esadecimali tra i segni di minore e maggiore indicano il ruolo ricoperto:

RisorsaNetBIOS Valore Tipo
Standard Workstation Service
<00>
UNICO
Messenger Service (WinPopup)
<03>
UNICO
RAS Server Service
<06>
UNICO
Domain Master Browser (con PC
<1B>
UNICO
Master Browser name
<1D>
UNICO
NetDDE Service
<1F>
UNICO
Fileserver (incluso printer server)
<20>
UNICO
RAS Client Service
<21>
UNICO
Network Monitor Agent
BE
UNICO
Network Monitor Utility
BF
UNICO
 

Standard Workstation
<00>
GRUPPO
Logon Serve
<1C>
GRUPPO
Master Browser name
<1D>
GRUPPO
Normal Group name
<1E>
GRUPPO
Internet Group name
<20>
GRUPPO

 

2.8 Primary Domain Controller

L'attivazione di Samba come Primary Domain Controller risulta abbastanza articolata; editare come già visto smb.conf e aggiungere a [global] i seguenti parametri (i comandi identici a quelli già trattati vanno sostituiti con i valori in corsivo qui esposti):

#Parametri PDC
domain master = yes
domain logons = yes
os level = 255
security = user
encrypt passwords = yes

Brevemente analizziamo i nuovi comandi
domain master = yes: attiva la funzione di domain master browser verificabile con nbtstat e la comparsa del nome NetBIOS del dominio con il ruolo di <1B>
domain logons = yes: attiva la finestra di login nei client Windows per l'accesso al dominio
os level = 255: il massimo valore utilizzabile garantisce la vittoria di Samba come PDC;
security = user: ciascuna condivisione è assegnata ad utenti specifici
encrypt passwords = yes: attiva la transazione delle password in criptato tra client e server.

Il passo successivo è generare un utente in Linux e in Samba (nell'ordine):

#~adduser <utenteprova>
#~smbpasswd - a <utenteprova>

e aggiungere la macchine (client) del dominio:

#~useradd -s /bin/false -d /dev/null firefox$
#~smbpasswd -a -m firefox

Si consiglia di evitare di assegnare password identiche sia per motivi di sicurezza che di amministrazione di sistema. Si può inoltre generare una password samba per l'utente root (responsabile delle possibili modifiche dei parametri di dominio)

#smbpasswd -a root

Infine, affinché Windows XP accetti Samba come PDC, intervenire sul registro (regedit.exe) modificando i seguenti valori:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Netlogon\Parameters]
"requiresignorseal"=dword:00000000
"signsecurechannel"=dword:00000000

e aprire in seguito da "Pannello di Controllo" la voce "Sistema". Nel sotto menu "Nome computer" scegliere l'opzione "Cambia" e attivare nella finestra che compare la voce (Membro di) "Dominio' digitando ESEMPIO. La conferma dei dati inseriti provoca la comparsa di una finestra di autorizzazione per le modifiche apportate: la prima volta che ci si collega inserire come nome utente root e la relativa password Samba. AI termine della procedura (disconnettersi e ricollegarsi) si dovrebbe essere in grado di connettersi al dominio ESEMPIO introducendo come login il nome dell'utente Linux e Samba precedentemente inseriti e come password quella impostata con smbpasswd.
La configurazione di un Windows Domain Controller coinvolge molti altri aspetti (primi tra i quali i roaming profiles) che saranno approfonditi più avanti.

2.9 WINS server

Il supporto di risoluzione dei nomi offerto da Samba può diventare molto utile laddove non si abbia a disposizione un server DNS. Per l'attivazione del server WINS, introdurre i seguenti comandi in [global]:

# WINS server
wins support = yes
name resolve order = hosts bcast

Il parametro wins support è responsabile dell'avvio vero e proprio del supporto server WINS, mentre name resolve order indica l'ordine in cui Samba tenta la risoluzione. I valori possibili sono:

lmhosts: file localizzato in /etc/samba; il contenuto è simile a quello di /etc/hosts, con la differenza che all'indirizzo IP viene associato un nome NetBIOS (Es. 192.168.1.111 FIREWINS#OO)

wins: cerca di risolvere il nome avvalendosi di un server WINS sul network; questo comando si accompagna al parametro wins server = <IP wins server>;

hosts: utilizza il file /etc/hosts;

bcast: si avvia un broadcast per rilevare i nomi delle macchine presenti.

A questo punto editare il file /etc/hosts e aggiungere:

192.168.1.111 firefoxsuwins

e riavviare Samba (operazione che si ricorda deve essere effettuata per qualunque modifica apportata a smb.conf).
Un semplice ping dal client FIREFOX ci informerà del funzionamento di WINS su Samba:

ping firefoxsuwins


3) Politiche di accesso e parametri di sicurezza

E' giunto il momento di sperimentare alcune soluzioni di accesso e le diverse modalità di autenticazione. A causa delle continue prove che verranno effettuate, si consiglia di volta in volta di resettare le connessioni di rete in esecuzione digitando dal prompt di MS-DOS del client il seguente comando:

C:\>net use * /delete /yes

3.1 Sicurezza e autenticazione

Riassumendo quanto è stato inserito nelle prove precedenti, il file smb.comf dovrebbe comparire come segue:

[global]
#Parametri di configurazione Server
netbios name = LlGHTLORD
server string = Samba %v on (%L)
workgroup = ESEMPIO

#Parametri di accesso security
security = share
encrypt passwords = yes

#Parametri di configurazione permessi di accesso globali hosts allow = 192.168.1. 127.0.0.1
hosts deny = all

#Parametri di scelta interfaccia
interfaces = 192.168.1.0/255.255.255.0 127.0.0.1
bind interfaces only = yes

#Parametri di configurazione log
log level = 2
log file = /var/log/samba/samba.log.%m.prova
max log siee = 50

#Parametri di elezione browsing
os level = 34
local master = yes
preferred master = yes

#Parametri PDC
#domain master = yes
#domain logons = yes

#WINS server
wins support = yes
name resolve order = hosts bcast

[test]
comment = Test di funzionamento
path = /prova
read only = no
guest ok = yes

Come si può notare è stato disattivato il supporto PDC dal momento che, per le prove che si andranno a eseguire, non è necessario. Il parametro di nostro interesse è security, attualmente impostato sulla modalità "share". Samba fornisce quattro diverse possibilità: sicurezza a livello condivisione (share-level security), a livello utente (user-level security),a livello server (server-level security) e a livello di dominio (domain-level security). Qualunque sia l'impostazione adottata, è fondamentale la presenza della direttiva encrypt passwords = yes che permette la transazione in criptato delle coppie login/password.

3.2 Share-level security

L'impostazione security = share istruisce Samba affinché controlli gli accessi a livello di condivisione: viene inviata esclusivamente una password e il nome dell'utente viene dedotto confrontandola con quelle rispettive
-- dei nominativi utenti indicati con la direttiva valid users se presente;
-- della macchina del client;
-- dei nominativi-utenti indicati con la direttiva guest account se presente (devono anche essere presenti all'interno dei parametri della condivisione i comandi guest ok = yes guest only = yes).

Questo livello di sicurezza viene adottato quando gli utenti Windows e Linux non coincidono e si desidera condividere delle porzioni di file system mantenendo gli stessi diritti sui file condivisi; il parametro guest account (se non indicato, di default "nobody") indica il nome dell'utente Linux grazie al quale i client Windows opereranno sulla condivisione, indipendentemente dalle loro rispettive identità.
Impostiamo nuovamente la share "test" seguendo lo schema di funzionamento appena spiegato. Generiamo un nuovo utente Linux generico che verrà utilizzato dai client per l'autenticazione e la politica dei permessi di file e directory:

#~adduser samba

(verrà creato automaticamente anche il gruppo Samba)

#chsh /bin/false samba

(disattia la possibilità di login all'utente)

Ridefiniamo la maschera dei permessi della directiry /prova

#~chmod -R 0700 /prova
#~chown -R samba.samba /prova

Editiamo smb.conf per accettare qualunque accesso senza controllo di password:

[global]

#Definizidne dell'utente che accede alle condlvisioni
guest account = samba

[test]
comment = tst di funzionamento
path = /prova
read only = no
guest ok = yes
guest only= yes
create mask= 0600
directory mask = 0700

Come sempre, si riawia il server per l'attivazione delle modifiche; apparentemente non è cambiato nulla nell'utilizzo della share, ma in realtà sono state inseriti importanti politiche di sicurezza:
-- la directory "prova" non è più accessibile a chiunque ma solo all'utente generico "samba";
-- viene forzato, a scopo di autenticazione, l'utilizzo dell'utente definito in guest account attraverso la direttiva guest only (e nessuno altro);
-- create mask 0600: qualunque file creato all'interno della share [test] ha una maschera di permessi 600, leggibile e scrivibile solo dal proprietario (nel nostro caso "samba");
-- directory mask 0700: qualunque directory creata in [test] ha una maschera di permessi 700. Può essere aperta, cancellata e riscritta solo dal proprietario "samba".
Nel caso intendessimo richiedere una password per accedere a [test], dovremo intervenire su smb.conf con smbpasswd, fornito da Samba.

Editiamo nuovamente il file di configurazione:

[test]
comment = test di funzionamento
path = /prova
read only = no
#guest ok = yes
guest only = yes
valid users= samba
create mask = 0600
directory mask = 0700

Occorre disabilitare la direttiva per rendere pubblica la share e abilitare il controllo della password con l'opzione valid users. Quest'ultima funzione permette di definire gli utenti o gruppi (valid users = @group) in grado di accedere alla condivisione; se si intende adottare una politica di sicurezza basata su utenti specifici si consiglia di utilizzare una security di tipo “user” molto più adatta allo scopo.
Un'osservazione di carattere generale: la validità di una p
assword risiede nella sua segretezza; adottarne una in "condivisione" ne fa perdere l'efficacia. Di norma gli amministratori di rete evitano di impostare una security share sui loro server per avere maggiore controllo sui singoli utenti con una security user.
Passiamo alla creazione della password di Samba; quest'ultima è necessaria per l'autenticazione in fase di accesso e può essere generata solo se è già presente il rispettivo utente sul sistema Linux. Samba registra le sue password nel file /etc/samba/smbpasswd (smbpasswd -a il comando da usare).
Se visualizziamo il file /etc/samba/smbpasswd dovremmo vedere qualche cosa del genere:

samba:499:9720F5DDD2A634CEAAD3B435851404EE:D37EA50CSC784C33FP6CBBC38499A5PB:[UX ]:LCT.3EAE3937:

I due punti suddividono le varie sezioni: la prima indica il nome dell'utente inserito, la seconda la UID di riferimento, la terza la "LAN Manager Password Hash", sequenza esadecimale di 32 bit che rappresenta la password utilizzata da sistemi Windows 95 e 98, la quarta la "NT Password Hash" per le password Windows NT, l'ultima la rappresentazione in esadecimale del tempo intercorso in secondi dall'ultima modifica. La quinta parte, racchiusa tra i segni
[ U/W I X I D I N] indicano:
U - tipo di account utente
W - tipo di account workstation
X - nessuna scadenza per la password dell'account
D - account disabilitato
N - l'account non ha password

Siamo in grado di verificare le impostazioni fino a qui inserite. Prima di tentare di accedere si consiglia di resettare la connessione precedentemente stabilita dal client con il comando net use accennato prima (altrimenti si incorre nel rischio di trasmettere i vecchi dati di autorizzazione, con il conseguente blocco dell'accesso).
Riavviamo il server e tentiamo la connessione; dovrebbe venire richiesto l'inserimento di una password quando si cerca di accedere a [test]: introducendo quella impostata con il comando smbpasswd, avremo il via libera a procedere.

3.3 User-Ievel security

Il livello di sicurezza generalmente scelto (oltre che di default se non specificato) è quello utente: il client che desidera accedere alle condivisioni invia una login e una password (a differenza del livello share dove si manda esclusivamente una password) che vengono controllate da Samba con i dati inseriti in smbpasswd; se c'è corrispondenza l'utente ottiene i privilegi di accesso. L'elemento che contraddistingue questo tipo di configurazione consiste nella corrispondenza tra l'utenza GNU/Linux e quella Samba: chi cerca di connettersi a una share deve essere registrato come utente anche su Linux, obbligo che può creare problemi nelle autenticazioni a causa del limite degli otto caratteri nel sistema Unix rispetto ai nomi estesi (fino a 255 caratteri) utilizzati da Windows. Può risultare quindi necessario avvalersi di un file che abbini gli utenti Linux a quelli Windows: smbusers.
Passiamo alla fase di configurazione; aprire smb.conf, commentare security = share, inserire una nuova direttiva security = user e commentare la direttiva guest account:

[global]

#Parametri di accesso security
#security = share
security = user
...
#guest account = samba

e condividiamo la home di un utente Linux sul server grazie
a Samba: nel nostro caso [marco]

[marco]
path = %H
comment = homedir dell'utente Marco
writable = yes
valid users = marco
create mask = 0664
directory mask = 0755

Come appena spiegato, dobbiamo ricordarci di inserire l'utente marco nel file delle password di Samba:

#~smbpassd -a marco
New SMB password:
Retype new SMB password:

Si può evitare di immettere una password identica a quella dell'account Linux per aumentare la sicurezza
Una volta riavviato il server (e resettato la connessione con net use), a differenza di quando si settava la security a livello di share, non appena si apre dalle risorse di rete il server Samba viene richiesta l'autenticazione con una login e una password. Terminata la procedura, si dovrebbe essere in grado di visualizzare le condivisioni [marco] e [test] a disposizione.
In realtà in questo momento non si hanno i privilegi di accesso per la share test che deve essere modificata per accettare i nuovi parametri introdotti, ma prima è necessario completare la panoramica dei parametri più importanti legati a questo tipo di impostazione di sicurezza. Come accennato in precedenza, spesso il nome dell'utente è molto più lungo dei tradizionali otto caratteri degli username di Linux; in questo caso ci viene in aiuto la direttiva username map. Aprire il file smbusers (è anche possibile creare un file nuovo e mapparne l'indirizzo con username map) e aggiungere alle linee già presenti:

root = admin administrator
nobody = guest pcguest samba

la seguente:

marco = “utente marco”

Editare smb.conf e introdurre in [global] il pararnetro che informa Samba della presenza di un file di traduzione dei nomi:

...
#Mappa dei nomi-utente
username map = /etc/samba/smbusers

Riavviare Samba (si ricorda ancora il reset con net use) e tentare dal client Windows una connessione; come nome-utente digitare "utente marco" e a seguire la password impostata. Samba dovrebbe garantire l'accesso senza nessun problema. È giunto il momento di risolvere il problema dell'accesso a [test]: in questo momento viene rifiutata la connessione per problemi di autorizzazione. Per prima cosa è necessario impostare le diverse appartenenze ai gruppi degli utenti inseriti; aggiungiamo l'utente marco al gruppo samba:

#~adduser marco samba

Si ricorda che anche i permessi della directory /prova devono essere modificati per accettare gli accessi degli utenti non proprietari:

#~chmod -R 770 /prova

Infine editiamo smb.conf affinché la share [test] accetti
le richieste di accesso di "marco":

[test]
...
valid users = samba, marco
create mask = 0660
directory mask = 0770

Dopo il riavvio del server (e solito net use), l'utente marco (o "utente marco") sarà in grado di creare, modificare e cancellare i file della propria home directory
su Linux e di operare sulla condivisione comune [test] essendo appartenente al gruppo samba. La differente maschera dei permessi garantisce ad entrambi gli utenti di interagire reciprocamente con i file e le cartelle presenti nella directory. È importante notare che la proprietà dei file, a differenza della soluzione in security = share dove l'unico proprietario era "samba", rimane differente a seconda di chi accede alla share.

A completamento di quanto visto, diamo una rapida occhiata alla share speciale [homes], che non abbiamo ancora implementato in smb.conf. Il suo utilizzo torna utile quando sono presenti molti utenti che intendono accedere alla propria home di sistema, con il vantaggio di inserirvi tutte le direttive di funzionamento generiche. Un secondo aspetto è che viene interrogata quando un utente cerca di connettersi a una condivisione non specificata in smb.conf: in questo caso il nome immesso nell'UNC (barra degli indirizzi) in Windows Explorer verrà utilizzata per identificare l'utente Linux grazie a /etc/passwd. Per verificare quanto detto, si crei un nuovo utente Linux:

#~adduser roberto

Definita la password in GNU/Linux, si prepari quella in Samba:

#~smbpasswd -a roberto

L'utente "roberto" appena creato non compare con nessuna share nel file di configurazione; introduciamo la [homes]
che permetterà a chiunque possieda un account su Linux
di accedervi via Samba:

[homes]
browsable = no
writable = yes
create mask = 0600
directory mask = 0700

È stata inserita una nuova direttiva, browsable = no, che non permette la visualizzazione di questa particolare condivisione in fase di browsing. Si apra "risorse di rete" e si immetta direttamente l'UNC (barra deli indirizi) (barra che punta alla home dell'utente (\\lightlord\roberto); riferirsi alla figura 3. In questo modo si ha a disposizione un metodo rapido ed efficace di fare accedere i nostri utenti alle rispettive home directory.

3.4 Server-level security

Il livello di sicurezza server è simile a quello utente. Questa opzione delega la fase di autenticazione delle password a un altro server SMB che può essere sia Samba che Windows NT Server con il ruolo di PDC. Quando un client tenta una connessione, il server di appoggio viene interrogato per convalidare la coppia username/password; in caso di conferma viene reso possibile l'accesso. In figura lo schema di autenticazione:

Fig 7 L'autenticazione secondo la modalità server-level security

La configurazione di smb.conf risulta semplice:

[global]
security = server
passwd server = NOMENETBIOS_SERVER1 NOMENETBIOS_SERVER2

Si noti come sia possibile specificare più di un server di appoggio; Samba procederà nella lista delle macchine elencate nel caso che la prima non sia raggiungibile. Un tentativo fallito di autenticazione terminerà la procedura d'interrogazione.

3.5 Domain-level security

Il livello di sicurezza dominio utilizza lo stesso meccanismo di autenticazione di quello utente, con l'importante differenza che il server Samba viene posizionato all'interno di un dominio Windows 2000/NT. Come accennato prima, un dominio è un workgroup con un domain controller normalmente un server Windows NT che copre il ruolo di PDC: in questo caso sarà proprio quest'ultimo a gestire il processo di autenticazione degli utenti (SAM) evitando che Samba copra tale ruolo non perfettamente compatibile (data la strutturazione delle password tipicamente Unix) con i network Microsoft.
I passi da compiere sono i seguenti:

-- fermare il demoni di Samba; (/etc/init.d/samba stop)
-- aggiungere il server Samba al dominio NT sul PDC con il server manager di Windows NT oppure ad una active directory sul server Windows 2000 con la MMC (Microsoft management console) con il tool "Utenti e computer di Active Directory";
eseguire:

#~smbpasswd -j nome_dominio -r nome_server -Unome_utente%password.

nome_dominio è lo stesso indicato nella direttiva workgroup in smb.conf;
nome_server coincide con quello indicato in password server;
nome_utente e password rappresentano la username e password dell'utente con i privilegi necessari ad aggiungere nuove utenze nel server Windows NT/2000;

riavviare Samba.

#~/etc/init.d/samba start

L'utilizzo di una sicurezza livello dominio rispetto a quella server evita un carico eccessivo di dati al PDC: infatti la seconda mantiene un collegamento di rete permanente tra i due server mentre la prima interroga il PDC solo quando è necessario autenticare un utente. Un aspetto importante da considerare quando si adotta la soluzione del dominio consiste nell'allineamento dell'elenco delle utenze tra il server Windows e quello GNU/Linux. In quest'ultimo caso vengono in aiuto due direttive che ne automatizzano l'aggiornamento:

[global]
add user = script1 %u
delete user = script2 %u

La prima direttiva si attiva quando un client Windows tenta l'autenticazione ma l'utente corrispondente GNU/Linux
non esiste: lo "script1", adeguatamente scritto e testato, dovrà creare l'utente ricevendolo come parametro dalla variabile %u. La seconda entra in funzione nel caso contrario, cioè quando un client Windows con il corrispondente utente GNU/Linux si connette e Samba chiede l'autorizzazione al PDC, ottenendo una risposta negativa: lo "script2" dovrà cancellare l'utente in questione.

4) Breve conclusione

Sono state trattate le differenti modalità di sicurezza fornite da Samba, evitando di entrare nel dettaglio nel caso di server-level security e domain-level security, a causa della loro complessità.
Consideriamo inoltre che il panorama di Samba è in continua evoluzione, e il rilascio di Samba 3 ha introdotto nuove funzionalità che non sono state qui trattate.




img
img
Valid XHTML 1.0 Transitional