Samba: guida estesa
Introduzione
Samba è un diffusissimo software open-source, ideato nel 1991 da Andrew Tridgell e rilasciato sotto licenza GPL, che permette la condivisione di risorse come directory e stampanti fra gli host di una rete. Si avvale sostanzialmente del protocollo SMB (server message block) originario Microsoft, basato a sua volta sul protocollo NetBios (network basic input output system) sviluppato da IBM nel 1984.
Si sceglie solitamente l'uso di Samba per poter condividere file e stampanti in una rete mista (macchine GNU/Linux, MS-Windows, Mac OS..), in modo da sfruttare un unico protocollo e un unico sistema di autenticazione.
La suite
Analizziamo i programmi che otteniamo dall'installazione della suite Samba per Debian GNU/Linux:
# apt-get update && apt-get install samba smbfs
In breve:
- smbd: questo demone è sostanzialmente il cuore di Samba; in ascolto sulla 445/tcp, gestisce le autenticazioni e dà accesso ai filesystem e allo spooler di stampa.
- nmbd: questo demone in ascolto sulla 139/udp, rende note le risorse condivise tutte le volte che viene interrogato dai client. Per fare un esempio è quel demone che permette la visualizzazione dei serventi Samba in Risorse di Rete nei sistemi MS-Windows. È il primo dei due demoni ad avviarsi.
- smbclient: programma client a riga di comando quasi uguale a ftp (smbclient trasferisce solo in binary mode), dotato di diverse funzioni; tra le più importanti vi è quella di listare gli share messi in condivisione dai vari server Samba in una rete.
- smbmount & smbumount: utilizzati per montare/smontare filesystem condivisi.
- smbpasswd: strumento per la creazione utenti Samba. Un utente Samba dovrà essere anche un utente presente sulla macchina.
- testparm: strumento per la verifica del file
/etc/samba/smb.conf
.
- nmblookup: risolve i nomi host di un domain Samba (NetBIOS name) in indirizzi IP (es: nmblookup nomehost).
Configurazione del server
Sezione global
Editiamo il file /etc/samba/smb.conf:
[global] allow hosts = 192.168.1.0/24 workgroup = debianizzati server string = server@debianizzati.org create mask = 0755
Con la sezione global
all'interno del file smb.conf
abbiamo impostato quei parametri che saranno il modello generale di tutte le eventuali sezioni che verranno.
Ad esempio, se nella successiva sezione non specificassimo il parametro allow hosts, verrà preso come riferimento 192.168.1.0/24.
Ok, in breve:
- allow hosts = range di IP ai quali è permesso l'accesso alla risorsa
- workgroup = nome del gruppo di lavoro
- server string = stringa che identifica il server
- create mask = determina i permessi dei file in condivisione
Nota Per puntare a semplicità e rapidità di utilizzo, inseriremo solo pochi parametri essenziali per sezione nel nostro /etc/samba/smb.conf . Tuttavia i parametri previsti per questo file sono veramente tanti. Per una panoramica completa fate riferimento alla pagina (man5) di Samba.
|
Condivisione di una directory
Adesso sempre dentro il nostro /etc/samba/smb.conf
, creiamo la sezione specifica per la risorsa che vogliamo condividere. In questo esempio condivideremo una directory.
[shared] comment = Directory Shared path = /dir/da/condividere browsable = yes read only = yes public = yes create mask = 0755
Altri parametri:
- comment = commento per la directory
- path = percorso della directory condivisa
- browsable = rende visibile lo share
- public = rende la directory di libero accesso
- read only = setta i file della directory condivisa in sola lettura
Condivisione di una stampante
Adesso analizziamo i parametri da aggiungere al file /etc/samba/smb.conf
per poter condividere una stampante.
Aggiungiamo alla sezione global:
[global] printing = [sistema di stampa utilizzato, es: cups, lprng..] load printers = yes
Creiamo inoltre la sezione printers che fornirà i parametri di accesso alle nostre stampanti:
[printers] path = /var/spool/samba guest ok = yes printable = yes
Dopodiché scriviamo la sezione specifica per la nostra stampante (es. una canon).
[canon] comment = Canon Printer path = /var/spool/samba browsable = yes
Condivisione di dispositivi di lettura (CD-ROM, DVD..)
Poniamo come esempio di avere due pc e che solo uno dei due monti un lettore DVD. Bene, guardiamo come poter accedere ad un file, che risiedesse su un supporto DVD, dalla macchina sprovvista di lettore:
[dvd] comment = Lettore DVD-R preexec = mount /media/cdrom postexec = umount /media/cdrom path = /media/cdrom writable = no
Parametri supplementari al nostro /etc/samba/smb.conf
:
preexec = permette di impostare un'azione che sarà eseguita una volta connessi alla risorsa
postexec = in questo caso l'azione sarà eseguita quando la risorsa verrà sconnessa
Nel momento in cui dal client monteremo la risorsa condivisa (con smbmount o smbclient) sul server sentiremo montare il DVD, il cui contenuto sarà a nostra disposizione per trasferire file o, in caso di file audio/video, anche di streaming.
Bene, a questo punto il file può considerarsi sufficientemente configurato per i nostri scopi.
Autenticazione
Preoccupiamoci ora dell'accesso vero e proprio alle risorse messe in condivisione. Due sono i principali metodi di accesso. Possiamo creare un utente Samba con smbpasswd, (tenendo presente che un utente Samba deve anche essere un utente presente sulla macchina) ed attribuirgli poi una password di nostra scelta:
Creazione utente Samba:
# smbpasswd -a utente New SMB password: **** Retype new SMB password: ****
Questi sono user e pass coi quali ci loggheremo nel momento in cui connetteremo le risorse condivise (smbmount, smbclient).
Se volessimo inoltre consentire l'accesso a tutti gli utenti indistintamente, basterebbe inserire il parametro guest ok = yes nelle sezioni desiderate. Ad esempio nella sezione shared:
[shared] comment = Directory Shared path = /dir/da/condividere browsable = yes read only = yes public = yes create mask = 0755 guest ok = yes
Così facendo potremo loggarci come ospiti digitando solo invio come password.
Bene, riavviamo il server:
# /etc/init.d/samba restart Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd. #
Adesso testiamo la validità del file /etc/samba/smb.conf
col comando:
# testparm /etc/samba/smb.conf Load smb config files from /etc/samba/smb.conf Processing section "[shared]" Processing section "[canon]" Processing section "[dvd]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
Premendo enter vedremo il resoconto del nostro file.
Configurazione del client
Smbclient
Spostiamoci sul client:
# apt-get install smbfs smbclient
Come detto in precedenza, smbclient è un programma client ftp-like, utilizzato per l'accesso a un server Samba. Guardiamo i suoi principali flags e, una volta effettuato il login sul server, le sue principali funzioni.
Principali flags
(Usare smbclient --help per uno screen completo):
- smbclient -L hostname: lista tutti gli share di un determinato host. Ad esempio, dal nostro client facciamo richiesta di listare gli share del server (come password digitiamo quella dell'user creato con smbpasswd o solo invio):
$ smbclient -L SERVER Password: **** Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian] Sharename Type Comment --------- ---- ------- shared Disk Directory Shared canon Disk Canon Printer dvd Disk Lettore DVD-R IPC$ IPC IPC Service (server@debianizzati.org) ADMIN$ IPC IPC Service (server@debianizzati.org) Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian] Server Comment --------- ------- SERVER server@debianizzati.org CLIENT server@debianizzati.org Workgroup Master --------- ------- debianizzati SERVER
Come si vede, nella colonna Sharename sono elencati i nomi degli share settati in /etc/samba/smb.conf
, quindi la nostra directory shared,la nostra stampante e il nostro lettore DVD (le sezioni [global] e [printers] non sono visibili poiché sono sezioni di parametri usate dal programma).
Nella colonna Server sono invece elencati gli host facenti parte del medesimo workgroup.
C'è poi la colonna Workgroup che visualizza l'host con ruolo di domain master browser nella subnet.
- smbclient -U: Con questo flag possiamo specificare l'username e l'eventuale password per il login sulla macchina server.
- smbclient -A: Sostanzialmente uguale a -U ma possiamo dargli il path di un file dal quale attingere l'username e la password.
Accesso al server
$ smbclient //SERVER/shared Password: **** Domain=[SERVER] OS=[Unix] Server=[Samba 3.0.14a-Debian] smb: \>
Adesso siamo dentro al nostro server Samba il cui hostname è SERVER. Sostanzialmente il funzionamento di smbclient è il funzionamento di ftp, ma con in più degli utilissimi tools per il down/uploading dei file. Alcuni input uguali a quelli di una shell di bash sono: ls, cd, rm, rmdir, exit, coi quali ci sentiremo subito a casa nostra. Otteniamo comunque una lista di comandi utili digitando help.
Download di un file con get.
Poniamo come esempio che il contenuto della directory condivisa sia un insieme di file immagine con diverse estensioni e una directory con dentro qualsiasi cosa:
smb: \> ls . D 0 Tue Aug 23 23:57:51 2005 .. D 0 Wed Aug 17 03:05:20 2005 directory D 0 Wed Aug 24 12:21:43 2005 free_kevin.png 42604 Mon Aug 22 12:19:34 2005 pokemon.png 43404 Mon Aug 22 15:15:11 2005 dorothy_la_may.gif 46134 Mon Aug 21 21:16:00 2005
Scarichiamo il file free_kevin.png dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
smb: \> get free_kevin.png kevin.png getting file \ free_kevin.png of size 42604 as kevin.png(1386.8 kb/s) (average 1386.8 kb/s)
Il file sarà salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.
Alcune funzioni
- lowercase: abilita i file ad essere richiamati da get e mget utilizzando solo caratteri minuscoli. È utile viste le difficoltà spesso trovate negli share MSDOS (case insensitive).
es. di abilitazione dei parametri: smb: \> lowercase on smb: \> prompt on
- prompt: impostando prompt su on prima di ogni trasferimento ci verrà richiesta una conferma.
- showconnect: mostra l' //host/nome_risorsa in uso.
smb: \> showconnect //SERVER/shared
- stat nomefile: stampa a video i permessi di un file e offre, in ordine temporale, info sugli accessi ad esso:
smb: \> stat free_kevin.png File: \free_kevin.png Size: 101 Blocks: 8 regular file Inode: 810 Links: 1 Access: (0644/-rw-r--r--) Uid: 1000 Gid: 1000 Access: 2005-08-24 00:10:39 +0200 Modify: 2005-08-24 00:10:51 +0200 Change: 2005-08-24 00:10:51 +0200
Mask, mget e recurse
Con il comando mget abilitiamo il download di tutti i file e directory in maniera ricorsiva. Tuttavia possiamo dare a tale comando un parametro (maschera) utilizzando mask . Es. nella nostra directory mettiamo di voler scaricare tutti i file con estensione .png:
smb: \> mask *png smb: \> mget
In questo modo mget intenderà scaricare tutti i files con tale estensione presenti nella directory corrente. Tuttavia con mget è possibile modificare la maschera on-fly digitando semplicemente:
smb: \> mget *png
In questo modo la funzione mask, manterrà il suo valore di default che è '*' (cioè tutto). La funzione recurse on attiva lo scanning & downloading (nel caso di una maschera) o il dowloading, accedendo anche a tutte le directory presenti nella directory da cui parte il comando.
Smbmount & Smbumount
Con smbmount invece montiamo una risorsa in un mountpoint a nostra scelta. Montiamo la risorsa shared col comando:
$ smbmount //SERVER/shared /path/del/mountpoint
(come password digitiamo quella dell'user creato con smbpasswd o solo invio)
Così facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
$ cd /path/del/mountpoint $ ls directory free_kevin.png pokemon.png dorothy_la_may.gif
Conclusioni
Samba è un software semplicemente straordinario. La sua anima, il file /etc/samba/smb.conf
è in perfetto stile Linux; cioè, lo stesso file, può divenire enorme e strutturatissimo oppure snello e semplicissimo, a seconda (e questo è il vero stile Linux) di quello che un utente vuole.
Autore: zmo