Samba è un progetto Open Source per implementare il protocollo SMB (Server Message Block), utilizzato dai sistemi Windows, anche su GNU/Linux. Questo protocollo serve per condividere file, cartelle e stampanti su reti locali. Quindi, attraverso Samba, una macchina GNU/Linux può essere configurata per offrire tali servizi a computer con Windows, con GNU/Linux o con altri sistemi operativi che supportino tale sistema di comunicazione. Opportunamente configurato un server di questo tipo renderà visibili sulla rete le cartelle condivise (dette share) nelle quali gli utenti potranno facilmente mettere i propri file e scambiare documenti. Inoltre, anche le stampanti connesse al server possono essere rese pubbliche e tutti i computer potranno stampare su di queste con estrema facilità, con un conseguente notevole risparmio economico. Come se non bastasse con Samba è anche possibile gestire l’autenticazione dei singoli utenti rendendo quindi sicuro l’accesso ai dati. Questo progetto nato diversi anni fa, è attivamente sviluppato e largamente usato; inoltre, il fatto che sia rilasciato con licenza GNU/GPL lo rende il compagno ideale di ogni sistema GNU/Linux e la soluzione ottimale per incrementare la produttività di una rete locale, sia essa un ufficio, un dipartimento o, più semplicemente, la LAN di casa. Certamente esistono alternative alla condivisione di file e stampanti per reti solo GNU/Linux, ma se si gestisce una rete eterogenea con la presenza di diversi sistemi operativi, Samba è praticamente una scelta obbligata.

Client o server? Servono entrambi
Tutte le distribuzioni mettono a disposizione gli strumenti della suite Samba. Essi vengono sostanzialmente divisi in due categorie; il server e il client. Nel primo caso parleremo di pacchetto Samba vero e proprio, mentre per il secondo ci limiteremo a parlare di smbfs ovvero solo di quegli elementi che ci permettono di eseguire un collegamento ad un server che utilizzi il protocollo SMB (sia esso un server Samba o un qualsiasi altro sistema che supporti il protocollo, quindi anche un server Windows). Ovviamente la configurazione di un server, per permettere ai client presenti nella rete di accedere alle risorse condivise, e limitarne l’accesso in base alle credenziali dei singoli utenti, rappresenta la parte più complessa e richiede maggiore attenzione per non mettere a repentaglio la sicurezza dei dati. Vediamo, dunque, come configurare un server Samba.

Installazione del server

Quasi sicuramente le parti relative ai client sono già presenti all’interno della configurazione di base della propria distribuzione GNU/Linux, invece per quando riguarda la modalità server si dovrà procedere manualmente alla sua installazione. Fortunatamente il passaggio è molto semplice, visto che praticamente ogni distro mette a disposizione dei pacchetti pronti all’uso e quindi basterà provvedere alla loro installazione. Le differenze, da sistema a sistema, sono minime e basta cercare con il package manager il nome Samba per trovare i pacchetti in questione; nel caso, ad esempio, che si disponga di Ubuntu basterà eseguire:
sudo apt-get install Samba
Installato il necessario passimao alla configurazione a che si basa sul file smb.conf che, a seconda delle distribuzioni, si può trovare nella cartella /etc oppure /etc/samba. Si può lavorare direttamente su questo file di testo utilizzando il proprio editor preferito, oppure ricorrere a software di amministrazione via browser come, ad esempio, SWAT (un’interfaccia web che permette di agire graficamente sui vari parametri del file smb.conf) o, ancora, utilizzando i singoli applicativi delle varie distribuzioni.

La Configurazione
Come accennato, il file smb.conf contiene tutte le direttive necessarie per configurare un server Samba. Si tratta di un semplice file di testo e quindi è facilmente modificabile con un qualsiasi editor, ma vista la quantità di direttive che possono essere presenti, è consigliabile, specialmente a chi si avvicina per la prima volta a questo progetto, usare le interfacce grafiche. A ogni modo, anche nel caso in cui si propenda per l’uso di software di alto livello, è importante conoscere almeno gli elementi fondamentali per una configurazione minimale di un server. Il file smb.conf è sostanzialmente diviso in due grandi parti una chiamata [global] che contiene le impostazioni generali del server e una sezione definita [share] e che definisce le singole cartelle e stampanti che saranno condivise.

I livelli di sicurezza
Scegliamo quello giusto per la nostra LANPer gestire la sicurezza dei dati si possono, anzi sarebbe meglio dire si devono, proteggere le cartelle tramite una parola chiave. Samba offre tre diverse modalità di gestione della parola chiave per le risorse condivise che vengono definite mediante la definizione security =. I valori possono essere tre. Il livello share serve per assegnare una password alla singola risorsa, quindi ogni utente che sia a conoscenza della parola chiave potrà accedere alla cartella. Presuppone una rete di dimensioni ridotte e la condivisione di documenti non troppo riservati. Il livello user specifica che solo gli utenti che sono definiti nell’elenco del server possono accedere a determinate risorse. Questo livello prevede, quindi, la creazione dei singoli utenti mediante la definizione del loro nome e password. Le cartelle possono quindi essere sfogliate e i file letti o scritti solo da chi decidiamo noi; altresì ogni utente può disporre di zone private allo stesso dedicate. Infine, server rappresenta un ulteriore livello rispetto a user; in questo caso, ogni utente deve essere autenticato da una macchina specifica che si occupa di gestire gli utenti. È un approccio utile (se non necessario) in ambienti complessi, in cui sono presenti più macchine server Samba e dove è quindi più facile gestire un solo elenco di utenti (senza quindi duplicarlo su ogni server).

La sezione [Global]
All’interno di questa sezione si trovano i tanti elementi che caratterizzano un server Samba, come ad esempio il workgroup, ovvero il gruppo di lavoro con cui si identifica la propria rete e che servirà ai vari client per conoscere quali risorse vengono loro messe a disposizione. Qui si definisce anche l’interfaccia su cui Samba si metterà in ascolto (definita dalla stringa interface) come, ad esempio, eth0 o eth1 (molto utile nel caso in cui la macchina disponga di più schede di rete e agisca magari anche come firewall) e l’os level, con cui si assegna una priorità al server Samba che si sta costruendo per decidere se farlo diventare un server LMB (Local Master Browser) per il workgroup locale oppure no. Normalmente questo livello è molto basso per non interferire con eventuali altre macchine che svolgono già questo compito, ma nel caso in cui non ve ne siano, si può alzare il valore affinché il server sia in grado si mantenere una lista di tutti i sistemi presenti nel workgroup attuale. Prima però di rendere il server Samba un LMB è bene provvedere a far funzionare tutti gli altri aspetti del sistema per evitare eventuali conflitti. Nella sezione global possono essere presenti anche molte altre definizioni oltre a quelle accennate, tutte descritte minuziosamente nei manuali di uso di Samba e tutte gestibili dai sistemi grafici come SWAT e con cui adattare al meglio il server alle esigenze della propria rete locale.

La sezione [share]
Share letteralmente significa condivisione, e come si può facilmente intuire, in questa parte del file vengono definite le varie risorse che si vogliono mettere a disposizione sulla rete. A ogni risorsa va assegnato un nome (tra parentesi quadre) a cui seguono il precorso della stessa sul server è una serie di opzioni che le caratterizzano, come il tipo di accesso, gli utenti che possono utilizzarla e via dicendo. Supponiamo, ad esempio, di voler creare una cartella condivisa chiamata disco_condiviso a cui possono accedere gli utenti linuxmag e maglinux e che tale risorsa faccia riferimento alla cartella locale del server /home/linuxmag disco, non dovremo fare altro che aggiungere le seguenti direttive nel file smb.conf:
[disco_condiviso]
path = /home/linuxmag/disco
valid users = linuxmag, maglinux
per aggiungere altre risorse sarà sufficiente creare nuovi nomi tra parentesi graffe e definirne il percorso e gli utenti ammessi. In questo caso si suppone che il livello di sicurezza nella sezione globale sia impostato su user, scelta che rappresenta un buon compromesso tra privacy e facilità di utilizzo, specificato tramite la direttiva security = user (vedi “Livelli di sicurezza”).

Configurazione più semplice con swat
SWAT (Samba Web Administration Tool) è una delle tante interfacce grafiche che offrono una modalità alternativa per configurare Samba, rispetto al lavorare direttamente sul file smb.conf (chi fosse interessato a conoscere altre interfacce grafiche dedicate all’amministrazione di Samba può consultare l’indirizzo www.samba.org/samba/GUI). Il vantaggio più grande di SWAT è che, oltre a rendere più facile la configurazione (anche complessa) del file smb.conf, ogni elemento presente nelle sue varie pagine è ben documentato e ogni opzione rimanda alle singole pagine di aiuto del manuale; non a caso anche gli amministratori più esperti finiscono per ricorrere sempre a questo strumento. L’uso di SWAT è decisamente intuitivo, infatti, dopo averlo installato (ad esempio su Ubuntu tramite il comando sudo apt-get install swat) e aver attivato la relativa sezione all’interno del demone inetd o xinetd, ci si può collegare all’interfaccia web digitando l’indirizzo http://localhost:901. Dopo essersi autenticati come amministratore Samba (nel caso in cui tale utente non sia ancora stato definito va bene ugualmente eseguire il login come utente root locale), sarà possibile accedere ad una serie di pagine attraverso le quali configurare le sezioni Global, Shares e Printers. è presente anche un comodo wizard con cui creare una configurazione di base per avere subito un server operativo. Sempre nella pagina principale si trovano altre 3 sezioni. La prima, Status, serve a monitorare la condizione del server, delle sue risorse e degli utenti che attualmente le utilizzano, la seconda, denominata View, visualizza il contenuto del file di configurazione. Mentre, l’ultima, Password, permette di lavorare e cambiare le password degli utenti e di amministrazione.

Aggiungere utenti
Garantire l’accesso a Samba. Ma non a tutti
Se abbiamo scelto di condividere una risorsa con livello di sicurezza user è necessario definire degli utenti e le loro relative password che verranno utilizzati per accedere alla cartella condivisa. La definizione degli utenti avviene tramite il comando smbpasswd che va digitato da shell, con le credenziali di amministratore:
sudo smbpasswd -a nome_utente
Premuto Invio verrà richiesta per due volte la parola chiave da assegnare all’utente per renderlo operativo. Un utente può anche essere rimosso dal sistema in qualsiasi momento utilizzando lo switch -d (per disabilitarlo momentaneamente), o -x (per eliminarlo in maniera definitiva). In linea di massima è sempre consigliabile creare prima un utente GNU/Linux normale e poi aggiungere l’utente Samba, in modo che sia più agevole per l’amministratore gestire i permessi per le cartelle e sottocartelle condivise.

Un test dal lato client

Dal lato degli utilizzatori è logicamente tutto molto più semplice, infatti i singoli computer devono solo connettersi alle risorse e autenticarsi per poterle usare, non servono quindi configurazioni ne definizioni di utenti o livelli di sicurezza. Le distro mettono a disposizione diversi strumenti della suite Samba per poter accedere alle cartelle condivise o alle stampanti come ad esempio smbclient, un interessante comando con cui testare il corretto funzionamento del server. Questo applicativo, attraverso un’interfaccia a linea di comando, molto simile a quella del più noto FTP, permette di accedere alle risorse presenti su di un server, di elencarle e di autenticarsi dichiarando nome e password. Il tool smbclient è ideale per verificare il corretto funzionamento del server e va quindi considerato come un valido aiuto nella fase di prima configurazione del sistema, infatti, eseguendo:
smbclient -L //indirizzo_del_sever -U utente
il programma cercherà di connettersi come utente specificato dall’opzione -U (quindi indipendentemente dal nome usato per il login locale) alla macchina indicata con l’indirizzo o con il nome specificato dopo i caratteri // per conoscere le risorse disponibili. Dopo aver premuto Invio, verrà richiesta la parola chiave e se tutto funziona l’output che si avrà è la risposta del server. La prima riga conterrà il nome del server e altre varie informazioni appartenenti alla sezione [Global] e subito dopo verranno elencate tutte le risorse condivise; per prime le cartelle (che vengono viste come dischi remoti) e poi le stampanti. Con lo stesso programma ci si può anche connettere alla risorsa e quindi leggere o scrivere file al suo interno; per fare questo è necessario rimuovere lo switch -L e aggiungere il nome della risorsa condivisa che si intende utilizzare, quindi, ad esempio, eseguendo
smclient //192.168.0.1/disco_condiviso -U linuxmag
ci si connetterà, come utente linuxmag, alla condivisione disco_condiviso (opportunamente definita nella sezione share) presente sul server 192.168.0.1. Non appena si sarà digitata la password si potrà navigare all’interno della cartella utilizzando dei comandi molto simili a quelli dei client FTP, il cui elenco completo può essere ottenuto digitando il comando help al prompt smb: \>.

Condividere una directory

Basta aprire il browser, collegarsi a http://localhost:901, accedere come root e selezionare Shares

Quasi tutte le pagine possono essere visualizzate in modalità “Vista semplice” o “Vista Avanzata” influenzando così la quantità di informazioni e opzioni disponibili. La Vista Semplice soddisfa la maggior parte dei casi. Il primo passaggio consiste nella creazione della condivisione dandole un nome con cui identificarla in rete, ad esempio disco_condiviso.

Cosa condividere

Dopo aver premuto il tasto “Crea Condivisione”, si accede alla pagina di configurazione nella quale si dovranno definire il percorso completo, a livello del server, della cartella, gli utenti che potranno accedervi e i permessi di sola scrittura o scrittura/lettura. Inoltre sarà possibile definire se a tale risorsa possano anche accedere gli ospiti (i guest).

Sotto controllo

Il server può sempre essere tenuto sotto controllo dalla pagina di stato, dove è anche possibile riavviare i singoli moduli. In questa pagina sarà possibile monitorare in ogni istante, sia il numero di utenti attualmente connessi, sia l’elenco delle risorse comprensivo dei nomi di chi vi sta accedendo. Una preziosa risorsa per gli amministratori del sistema!

Configurazione rapida
Setup di un server Samba con SWATCon il wizard di SWAT, bastano pochi passaggi per creare un file di configurazione (smb.conf) con il minimo sforzo e senza dover avere una profonda conoscenza del sistema. Basta infatti scegliere il tipo di server che si vuole creare (nel caso in cui vi sia una sola macchina server è da scegliere l’opzione Stand Alone) e decidere se rendere accessibili le cartelle home dei singoli utenti presenti sul server. Se si sceglie Yes in questa opzione, tutti gli utenti che verranno definiti da GNU/GNU/Linux saranno anche utenti Samba, con le loro relative risorse, ovvero le cartelle a loro assegnate (/home/nome_utente). Basta premere il tasto “Rewrite smb.conf” per fare in modo che la configurazione venga generata e far ripartire il server per renderla attiva. E’ anche consigliabile modificare la sezione globale del file appena creato per inserire i propri parametri come ad esempio il gruppo di lavoro e il livello di sicurezza.

Montare i dischi remoti
Con il comando smbclient ci si può collegare ad un server, ma solo per debug, vista la scomodità di accesso ai dati; quindi per il lavoro quotidiano sulle cartelle condivise diventa necessario utilizzare modalità più pratiche e veloci. Questo avviene “montando” i dischi remoti su cartelle locali, che si comporteranno come ogni altro disco locale; ogni altro programma potrà quindi leggere e scrivere al loro interno utilizzando le interfacce grafiche, unica differenza, la velocità, visto che molto dipende dalle prestazioni di rete. Per fare questo è però necessario che il supporto a Samba venga esteso anche al comando mount. Le differenze tra distribuzioni sono minime, e in molti casi basta verificare la presenza del comando smbmount per essere certi che il supporto sia già presente. Qualora questo comando non fosse disponibile, basterà provvedere installando il supporto smbfs; nel caso ad esempio che si utilizzi Ubuntu basterà installare l’apposito pacchetto eseguendo:
sudo apt-get install smbfs
Appena si è certi che il supporto per il mount sia installato, basterà creare una cartella locale e utilizzarla per montare il disco remoto:
mkdir /samba_mnt
mount -t smbfs -o username=linuxmag //192.168.0.1/
disco_condiviso /samba_mnt
in questo esempio, dopo aver creato la cartella locale samba_mnt, viene montata la risorsa disco_condiviso con file system smbfs. La cartella locale punterà al server e sarà disponibile fino a quando non si smonterà il disco, inoltre ogni programma potrà accedervi come se fosse parte del computer locale anche se essa si trova da tutt’altra parte. Da questi semplici esempi, è chiaro che Samba è indispensabile per GNU/Linux, ma anche per gli altri sistemi derivati da Unix, tipo Mac OS X e le distribuzioni BSD, per condividere file all’interno di una rete mista. In realtà, per i soli sistemi Unix è possibile usare anche NFS, ma è meno sicuro di Samba e non è supportato da Windows, quindi se l’obiettivo è garsantire la massima interoperabilità, Samba rappresenta il sistema di condivisione migliore in assoluto. Questo protocollo è abbastanza veloce, stabile e tutto sommato sicuro, anche se a volte succede che si scopre qualche vulnerabilità, anche pericolosa, come accaduto di recente.

I protocolli Samba
Grazie a loro Windows e GNU/Linux comunicano
SMB (Server Message Block) si basa sui servizi di tipo NetBIOS. Samba implementa questo protocollo “sopra” il TCP/IP, che deve essere presente e configurato su tutti i PC della LAN). NetBIOS è un’interfaccia software che permette la comunicazione tra macchine all’interno di una rete. Il tutto si basa sui nomi che tramite questa interfaccia vengono assegnati alle singole macchine in modo che ad esse si possa accedere tramite nome e non tramite indirizzo IP. In pratica è un name service, ma non vi è un processo centrale che controlla i nomi, quindi in linea teorica più macchine potrebbero avere lo stesso nome; lo ottiene chi arriva per primo. CIFS è un altro protocollo usato da Samba che definisce l’accesso ai file system remoti in modo da poter condividere documenti all’interno della rete.

Montare un disco graficamente
Con Gnome e Ubuntu bastano pochi passaggi per creare un collegamento sul desktop

La connessione

Dal menu “Risorse” bisogna selezionare la voce “Connetti al server” e impostare come “Tipo di servizio” la “Condivisione Windows” (ovvero quella gestita da Samba). Si devono poi specificare il nome o l’indirizzo IP del server, la risorsa di rete e il nome dell’utente con cui autenticarsi. Appena si preme “Connetti” una cartella verrà creata sul desktop.

Dati di accesso

La prima volta che si accede alla cartella Samba, se il livello di sicurezza richiede una parola chiave, verrà chiesto immediatamente di autenticarsi. Oltre logicamente a scrivere il nome utente e la password, possiamo scegliere se tenere oppure no in memoria la parola chiave; opzione molto utile nel caso si utilizzi solo temporaneamente un altro computer.

Risorse Samba

Per non fare confusione, le cartelle Samba vengono identificate con un’icona diversa dalla altre, in pratica il simbolo classico della LAN più la scritta SMB. Accedendo alle sue proprietà possiamo notare come il tipo sia x-directory/smb-share. Se, invece, vogliamo rimuovere il collegamento basta premere il tasto destro del mouse e selezionare Smonta volume.