Sulla scelta del sistema operativo da usare uno dei fattori che pesa maggiormente è l'uso che ne faremo. Non esiste una scelta a priori, ma tutto va ponderato. Le nostre esigenze e la disponibilità di programmi per una determinata piattaforma dovrebbero essere, se non gli unici, i principali fattori decisionali. Spesso quindi la scelta del sistema operativo risulta obbligata.
È altrettanto vero però che spesso per problemi di compatibilità all'interno della propria LAN si tende a utilizzare un unico sistema operativo (si pensi a quei programmi il cui server o il cui client è disponibile solo per un sistema operativo). Ma siamo proprio sicuri che non esistano sempre dei programmi compatibili o equivalenti con gli originali? Su per esempio Linux spesso esistono delle implementazioni di protocolli proprietari o non supportati ufficialmente per questo sistema operativo.
È il caso per esempio di Samba, uno dei progetti OpenSource maggiormente riusciti. Avviato nel 1991 e sviluppato inizialmente da Andrew Tridgell (ora è un vero e proprio team che si occupa del suo sviluppo), è un'implementazione del protocollo SMB/CIFS.
SMB (Server Message Block) è il protocollo che sotto Windows si occupa della condivisione di file e stampanti. Può anche essere utilizzato per le autenticazioni di un server, proprio come NIS. Ma non sarà di questo che tratteremo in questo articolo: ci soffermeremo in particolar modo sull'uso di Samba come file e print server. In questo caso Samba rappresenta quello che per UNIX è NFS e lpd. In più è multipiattaforma. Oltre che con Windows e Linux infatti, è possibile utilizzare il protocollo SMB praticamente su tutti i sistemi operativi (tutti gli altri UNIX, OS/2, Macintosh, AmigaOS e chi più ne ha più ne metta).
Pur essendo disponibili delle soluzioni che permettono di utilizzare NFS anche su DOS e Windows, è altamente sconsigliabile il loro uso per problemi legati a sicurezza: per la natura non multiutente di DOS è impossibile impedire un uso "maldestro" o "male intenzionato" di directory esportate con NFS (l'uso di NFS su sistemi UNIX rimane, invece, una scelta preferibile in quanto l'integrità di sistema è garantita dalla necessaria autenticazione dell'utente). Il protocollo SMB è fatto in modo da appoggiarsi a NetBIOS, un protocollo studiato da IBM per fornire una base allo sviluppo di software per DOS.
Questi due protocolli però non sono in grado di "transitare" su una rete se non vi è un terzo protocollo che si occupa del trasporto. L'implementazione originaria di questo protocollo era studiata per utilizzare NetBEUI (NetBIOS Extended User Interface), in seguito lo si è reso compatibile anche con IPX di Novell. Ma, con la diffusione di Internet, il suo utilizzo con il protocollo TCP/IP è stato quello che ha riscosso maggiore successo, in quanto questo protocollo è praticamente presente ovunque.
Samba utilizza proprio questa implementazione. All'uso di SMB attraverso TCP/IP, Microsoft ha dato il nome di CIFS (Common Internet File System). Samba è costituito da due server: smbd e nmbd. Il primo si occupa della condivisione vera e propria, aprendo la connessione coi client dopo averli autenticati. Il secondo invece è il demone che agisce come il cosidetto "network browser", quello che, in parole povere, è in grado di farci vedere la nostra condivisione in "Risorse di Rete". Può essere utilizzato anche come server WINS (Windows Internet Name Service), del quale però non ci occuperemo in questo articolo. Samba è uno strumento molto potente e flessibile, sono tantissime le opzioni a nostra disposizione, ma la sua configurazione non risulta tanto complessa come potrebbe sembrare. Esiste infatti un unico file di configurazione /etc/samba/smb.conf (che in qualche distribuzione può essere trovato anche in /etc). È strutturato come un file .INI di Windows e permette di avere delle linee commentate con # o con ; .
Samba è quasi sempre incluso nelle installazioni di default. Se non fosse presente sulla vostra distribuzione lo troverete sicuramente sui CD di installazione (su Red Hat dovrete installare i pacchetti samba-versione.i386.rpm, samba-common-versione.i386.rpm, samba-client-versione.i386.rpm, mentre su Debian i pacchetti da installare sono: samba_versione_i386.deb, samba-common_versione_i386.deb, smbclient_versione_i386.deb, smbfs_versione_i386.deb). Altra cosa fondamentale è che sia presente il supporto per il filesystem SMB (dovrebbe essere presente nei kernel che vengono forniti dalle distribuzioni, quindi se ricompilate il kernel ricordatevi di abilitare l'opzione" SMB file system support (to mount Windows shares etc.)" dal sottomenu "Network File Systems" in "File Systems"). È anche essenziale che abbiate già configurato correttamente le schede di rete dei PC presenti sulla vostra LAN. Se non lo aveste fatto potete consultare il nostro articolo su come installare una rete locale.
Passiamo ora all'analisi di un file di configurazione di esempio. Supponiamo di voler rendere condivisibili le home directory ai rispettivi proprietari e le stampanti (se più di una) presenti sul nostro PC con Linux. Il file smb.conf risulterà come segue:
[global]
netbios name = HTML.IT
workgroup = Workgroup
server string = Condivisa su Linux
printing = lprng
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd
[homes]
comment = Home Directory
browseable = no
read only = no
[printers]
browseable = no
guest ok = yes
printable = yes
Ogni parola racchiusa tra [ ] rappresenta una sezione.
[global] contiene le opzioni globali e le impostazioni di default. "netbios name" indica il nome con il quale il nostro server Samba apparirà (è il nome che comparirà in Risorse di Rete). "workgroup" indica il gruppo di lavoro al quale il nostro server appartiene. "server string" ci permette di scrivere un breve commento. "printing" indica il sistema di stampa utilizzato sul nostro sistema. Potremo scegliere tra: BSD (il classico lpr), AIX, LPRNG (il vostro sistema potrebbe anche usare questo), PLP, SYSV, HPUX, QNX, SOFTQ e CUPS (che si sta sempre di più diffondendo). Maggiore attenzione dovremo dedicare invece alle restanti tre voci della sezione [global].
A "security" può essere assegnato il valore "user" che permetterà ad ogni utente di autenticarsi utilizzando la propria username e password, altrimenti potrete usare "share". È possibile mettere anche "server" e "domain" per far autenticare un utente attraverso un server NT (ma data la vastità dell'argomento non prenderemo in considerazione questa ipotesi). "encrypt passwords = yes" vi permetterà di poter utilizzare Samba anche con Windows 98, NT, 2000 ed XP. Questo perché, per motivi di sicurezza, questi sistemi operativi non inviano più la password in chiaro, ma crittata. L'ultima voce della sezione, "smb passwd file" indica il file contenente le password.
Per creare questo file dovrete seguire quanto segue: al prompt dei comandi, con i permessi di root, scrivete:
lnxbox1:~# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
Nota: in alcune distribuzioni il comando mksmbpasswd.sh viene chiamato mksmbpasswd.
Assegnate i permessi di lettura e scrittura per il solo utente root con il comando:
lnxbox1:~# chmod 600 /etc/samba/smbpasswd
Ora dovrete settare le password per gli utenti che vorrete far autenticare con Samba utilizzando il comando smbpasswd (se non assegnerete nuovamente la password con questo comando gli utenti non verranno autenticati).
La sezione [homes] fa in modo di esportare l'home directory di ogni utente. L'utente viene riconosciuto in base alla combinazione username/password. Con "browseable" potremo dire se far visualizzare o meno questa "condivisa" tra le "Risorse di Rete". In questo caso particolare è assegnato il valore "no", perchè la condivisa appare già con il nome dell'utente (altrimenti apparirebbero due condivise, una con il nome homes e una con il nome dell'utente). "read only = no" permette di poter scrivere sulla condivisione, se i permessi ce lo consentono.
Per quel che riguarda la sezione [printers] l'opzione "guest ok = yes" permette l'utilizzo della stampante a tutti gli utenti e non richiede un'autenticazione. A "printable" dovrebbe sempre essere assegnato il valore "yes" per le stampanti.
Se invece, al posto delle rispettive home directory, volessimo rendere condivisibile un altra directory del nostro sistema operativo, dovremmo creare (utilizzando una sezione [global] analoga alla precedente, ma con "security = share") una sezione del tipo:
[nomecondivisa] comment = Commento per questa condivisa path = /home/condivisa valid users = utente1 utente2 utenteN guest ok = no read only = no printable = no browsable = yes
Al posto di [nomecondivisa] dovrete sostituire il nome che volete assegnare alla condivisione. "path" indica la directory che vorrete condividere. "valid users" permette di elencare gli utenti a cui è permesso accedere alla condivisa (se hanno settato una password con smbpasswd) e "guest ok = no" garantisce che non vi siano utenti "ospiti". Se avessimo voluto fare in modo che si possa accedere alla condivisione senza l'uso di una password avremmo dovuto impostare "guest ok = yes" e omettere l'opzione "valid users".
È consigliabile testare il nostro file di configurazione utilizzando il comando testparm. Se vi sono errori verranno indicati nell'output di questo programma. È anche possibile, premendo invio, vedere in dettaglio la nostra configurazione (anche con i parametri passati di default da Samba).
Una volta verificata la correttezza del nostro file di configurazione potremo avviare i demoni smbd e nmbd. Su Red Hat basterà scrivere:
lnxbox1:~# service smb restart
Mentre su Debian scriveremo:
lnxbox1:~# /etc/init/samba restart
È anche possibile caricarli utilizzando il comando:
lnxbox1:~# smbd -D lnxbox1:~# nmbd -D
Se ci dovessimo trovare invece nella situazione opposta, dovendo cioè far "vedere" a Linux una condivisa esportata da Windows, potremmo usare il comando mount. La sintassi è la seguente:
lnxbox1:~# mount -t smbfs -o username=utente,password=passworddiutente
//netbiosname/condivisione /mnt/mountpoint
sostituendo opportunamente utente e passworddiutente se vi sono delle restrizioni su chi può accedere alla condivisa. Al posto di netbiosname va messo il nome del PC sul quale è presente la condivisa e condivisione al posto del assegnato alla nostra condivisa.
Con Samba è anche possibile inviare dei messaggi per il programma WinPopup di Windows. A tal scopo può essere usato il programma smbclient con l'opzione -M nomecomputer. Sarà quindi possibile scrivere il messaggio; una volta finito premete control+D per inviarlo. Per la ricezione e l'invio di messaggi utilizzando il protocollo SMB con Linux si può usare LinPopup.
In questo articolo abbiamo cercato di darvi le nozioni base per la configurazione di Samba. Samba è uno strumento molto complesso, dalle grandi potenzialità. Anche le opzioni a disposizione sono innumerevoli.
Nella maggior parte dei casi gli esempi fatti in questo articolo potranno fare al caso vostro, magari con qualche personalizzazione. Vi invito pertanto a una lettura più attenta dell'abbondante documentazione distribuita assieme a Samba e alla vastità del materiale reperibile online per una più completa e piena comprensione di questo protocollo.