Samba: guida estesa: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Riga 1: Riga 1:
=Introduzione=
=Introduzione=
Samba e' 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.  
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.
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=
=La suite=
Analizziamo i programmi che otteniamo dall' installazione della suite Samba per Debian GNU/Linux:
Analizziamo i programmi che otteniamo dall'installazione della suite Samba per Debian GNU/Linux:


<pre># apt-get update && apt-get install samba smbfs</pre>
<pre># apt-get update && apt-get install samba smbfs</pre>


In breve:
In breve:
;'''smbd''': questo demone e' sostanzialmente il cuore di Samba; in ascolto sulla 445/tcp, gestisce le autenticazioni e da accesso ai filesystem e allo spooler di stampa.
*'''smbd''': questo demone è sostanzialmente il cuore di Samba; in ascolto sulla 445/tcp, gestisce le autenticazioni e 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. E' il primo dei due demoni ad avviarsi.
*'''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 piu' importanti, quella di listare gli share messi in condivisione dai vari server samba in una rete.
*'''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.
*'''smbmount''' & '''smbumount''': utilizzati per montare/smontare filesystem condivisi.


;'''smbpasswd''': strumento per la creazione utenti Samba. Un utente Samba dovra' essere anche un utente presente sulla macchina.
*'''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.
*'''testparm''': strumento per la verifica del file <code>/etc/samba/smb.conf</code>.


;'''nmblookup''':  risolve i nomi host di un domain Samba (''NetBIOS name'') in indirizzi IP (es: nmblookup ''nomehost'').
*'''nmblookup''':  risolve i nomi host di un domain Samba (''NetBIOS name'') in indirizzi IP (es: nmblookup ''nomehost'').


=Configurazione del server=
=Configurazione del server=
Riga 35: Riga 35:
</pre>
</pre>


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.
Con la sezione <code>global</code> all'interno del file <code>smb.conf</code> 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''', verra' preso come riferimento '''192.168.1.0/24'''.
Ad esempio, se nella successiva sezione non specificassimo il parametro '''allow hosts''', verrà preso come riferimento '''192.168.1.0/24'''.


Ok, in breve:<br>
Ok, in breve:<br>
'''allow hosts''' = range di ip ai quali e' permesso l'accesso alla risorsa<br>
*'''allow hosts''' = range di IP ai quali è permesso l'accesso alla risorsa<br>
'''workgroup''' = nome del gruppo di lavoro<br>  
*'''workgroup''' = nome del gruppo di lavoro<br>  
'''server string''' = stringa che identifica il server<br>
*'''server string''' = stringa che identifica il server<br>
'''create mask''' = determina i permessi dei file in condivisione<br>
*'''create mask''' = determina i permessi dei file in condivisione<br>


{{Box|Nota|Per puntare a semplicita' e rapidita' di utilizzo, inseriremo solo pochi parametri essenziali per sezione, nel nostro smb.conf. Tuttavia i parametri previsti per questo file sono veramente tanti. Per una panoramica completa fate riferimento alla page (man5) di [http://www.samba.org/samba/docs/man/smb.conf.5.html Samba].
{{Box|Nota|Per puntare a semplicità e rapidità di utilizzo, inseriremo solo pochi parametri essenziali per sezione nel nostro <code>/etc/samba/smb.conf</code>. Tuttavia i parametri previsti per questo file sono veramente tanti. Per una panoramica completa fate riferimento alla pagina (man5) di [http://www.samba.org/samba/docs/man/smb.conf.5.html Samba].
}}
}}


==Condivisione di una directory==
==Condivisione di una directory==
Adesso sempre dentro il nostro smb.conf, creiamo la sezione specifica per la risorsa che vogliamo condividere. In questo esempio condivideremo una directory.
Adesso sempre dentro il nostro <code>/etc/samba/smb.conf</code>, creiamo la sezione specifica per la risorsa che vogliamo condividere. In questo esempio condivideremo una directory.
<pre>
<pre>
  [shared]
  [shared]
Riga 61: Riga 61:


Altri parametri:<br>
Altri parametri:<br>
'''comment''' = commento per la directory<br>
*'''comment''' = commento per la directory
'''path''' = percorso della dir condivisa<br>
*'''path''' = percorso della directory condivisa
'''browsable''' = rende visibile lo share<br>
*'''browsable''' = rende visibile lo share
'''public''' = rende la dir di libero accesso<br>
*'''public''' = rende la directory di libero accesso
'''read only''' = setta i files della dir condivisa in sola lettura<br>
*'''read only''' = setta i file della directory condivisa in sola lettura


==Condivisione di una stampante==
==Condivisione di una stampante==
Adesso analizziamo i parametri da aggiungere al file '''smb.conf''' per poter condividere una stampante.
Adesso analizziamo i parametri da aggiungere al file <code>/etc/samba/smb.conf</code> per poter condividere una stampante.
Aggiungiamo alla sezione '''global''':
Aggiungiamo alla sezione '''global''':
<pre>  
<pre>  
Riga 75: Riga 75:
     load printers = yes
     load printers = yes
</pre>
</pre>
Creiamo inoltre la sezione '''printers''' che fornira' i parametri di accesso alle nostre stampanti:
Creiamo inoltre la sezione '''printers''' che fornirà i parametri di accesso alle nostre stampanti:
<pre>
<pre>
[printers]
[printers]
Riga 82: Riga 82:
     printable = yes
     printable = yes
</pre>
</pre>
{{Box|Nota|Debian non crea la directory /var/spool/samba. Questa directory e' adibita solo allo spool di stampa, volendo molti la sostituiscono con /tmp. Se decidete di crearla voi, per un corretto funzionamento impostatele i permessi: nobody:nobody con chmod -R 755.
{{Box|Nota|Debian non crea la directory /var/spool/samba. Questa directory è adibita solo allo spool di stampa, volendo molti la sostituiscono con <code>/tmp</code>. Se decidete di crearla voi, per un corretto funzionamento impostatele i permessi: ''nobody:nobody'' con:
<pre> # chown nobody.nobody /var/spool/samba</pre>
<pre> # chmod -R 755 /var/spool/samba</pre>
}}
}}


Dopodiche' scriviamo la sezione specifica per la nostra stampante (''es. una camon'').
Dopodiché scriviamo la sezione specifica per la nostra stampante (''es. una canon'').
<pre>
<pre>
  [camon]
  [canon]
     comment = Camon Printer
     comment = Canon Printer
     path = /var/spool/samba
     path = /var/spool/samba
     browsable = yes
     browsable = yes
Riga 94: Riga 96:


==Condivisione di dispositivi di lettura (CD-ROM, DVD..)==
==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:
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:
<pre>
<pre>
  [dvd]
  [dvd]
Riga 103: Riga 105:
     writable = no
     writable = no
</pre>
</pre>
Parametri supplementari al nostro smb.conf:<br>
Parametri supplementari al nostro <code>/etc/samba/smb.conf</code>:<br>
'''preexec''' = permette di impostare un'azione che sara' eseguita una volta connessi alla risorsa<br>
'''preexec''' = permette di impostare un'azione che sarà eseguita una volta connessi alla risorsa<br>
'''postexec''' = in questo caso l'azione sara' eseguita quando la risorsa verra' sconnessa<br>
'''postexec''' = in questo caso l'azione sarà eseguita quando la risorsa verrà sconnessa<br>


Al momento che dal client monteremo la risorsa condivisa (con smbmount o smbclient) sul server sentiremo montare il dvd, il quale contenuto sara' a nostra disposizione per trasferire file o, in caso di file audio/video, anche di streaming.  
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 puo' considerarsi sufficientemente configurato per i nostri scopi.
Bene, a questo punto il file può considerarsi sufficientemente configurato per i nostri scopi.


==Autenticazione==
==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:
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:
Creazione utente Samba:
<pre>
<pre>
# smbpasswd -a utente
# smbpasswd -a utente
Riga 121: Riga 123:
</pre>
</pre>


Questi sono user e pass coi quali ci loggheremo nel momento in cui connetteremo le risorse condivise (''smbmount, smbclient'').
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:
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'':
<pre>
<pre>
[shared]
[shared]
Riga 135: Riga 137:
</pre>
</pre>


Cosi' facendo potremo loggarci come ospiti digitando solo invio come password.
Così facendo potremo loggarci come ospiti digitando solo ''invio'' come password.


Bene, riavviamo il server:
Bene, riavviamo il server:
Riga 145: Riga 147:
</pre>
</pre>


Adesso testiamo la validita' del file /etc/samba/smb.conf col comando:
Adesso testiamo la validità del file <code>/etc/samba/smb.conf</code> col comando:


<pre>
<pre>
Riga 151: Riga 153:
Load smb config files from /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Processing section "[shared]"
Processing section "[shared]"
Processing section "[camon]"
Processing section "[canon]"
Processing section "[dvd]"
Processing section "[dvd]"
Loaded services file OK.
Loaded services file OK.
Riga 159: Riga 161:
Premendo enter vedremo il resoconto del nostro file.
Premendo enter vedremo il resoconto del nostro file.


=Lato client=
=Configurazione del client=
==Smbclient==
==Smbclient==
Spostiamoci sul client:
Spostiamoci sul client:
<pre># apt-get install smbfs smbclient</pre>
<pre># apt-get install smbfs smbclient</pre>


Come detto in precedenza, smbclient e' un programma client ftp-like, utilizzato per l'accesso a un server samba. Guardiamo i suoi principali flags e le sue principali funzioni invece, una volta dentro al server.
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===  
===Principali flags===  
(''Usare smbclient --help per uno screen completo''):
(''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 ''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''):
<pre>
<pre>
$ smbclient -L SERVER  
$ smbclient -L SERVER  
Riga 179: Riga 181:
         ---------      ----      -------
         ---------      ----      -------
         shared          Disk      Directory Shared
         shared          Disk      Directory Shared
         camon           Disk      Camon Printer
         canon           Disk      Canon Printer
         dvd            Disk      Lettore DVD-R
         dvd            Disk      Lettore DVD-R
         IPC$            IPC      IPC Service (server@debianizzati.org)
         IPC$            IPC      IPC Service (server@debianizzati.org)
Riga 196: Riga 198:
</pre>
</pre>


Come si vede, nella colonna '''Sharename''' sono elencati i nomi degli share settati in smb.conf, quindi, la nostra directory shared,la nostra stampante e il nostro lettore DVD (''le sezioni [global] e [printers]  non sono visibili poiche' sono sezioni di parametri usate dal programma'').
Come si vede, nella colonna '''Sharename''' sono elencati i nomi degli share settati in <code>/etc/samba/smb.conf</code>, 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 hosts facenti parte del medesimo workgroup.
Nella colonna '''Server ''' sono invece elencati gli host facenti parte del medesimo workgroup.
C'e' poi la colonna '''Workgroup''' che visualizza l'host con ruolo di domain master browser nella subnet.
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'eventule password per il login sulla macchina server.
*'''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.
*'''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===
===Accesso al server===
Riga 212: Riga 214:
</pre>
</pre>


Adesso siamo dentro al nostro server samba il cui hostname e' SERVER. Sostanzialmente il funzionamento smbclient e' il funzionamento di ftp, ma con in piu' degli utilissimi tools per il down/uploading dei files.
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.
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 cmq una lista di comandi utili digitando '''help'''.
Otteniamo comunque una lista di comandi utili digitando '''help'''.


'''Download di un file con get'''.<br>
'''Download di un file con get'''.<br>
Poniamo come esempio che il contenuto della directory condivisa sia un insieme di files immagine con diverse estensioni e una directory con dentro qualsiasi cosa:
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:
<pre>
<pre>
smb: \> ls
smb: \> ls
Riga 228: Riga 230:
</pre>
</pre>


Scarichiamo il file free_kevin.png dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
Scarichiamo il file ''free_kevin.png'' dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
<pre>
<pre>
smb: \> get free_kevin.png  kevin.png
smb: \> get free_kevin.png  kevin.png
Riga 234: Riga 236:
</pre>
</pre>


Il file sara' salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.
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===
===Alcune funzioni===
;'''lowercase''': abilita i files ad essere richiamati da get e mget utilizzando solo caratteri minuscoli. E' utile viste le difficolta' spesso trovate negli share msdos (''case insensitive'').
*'''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'').
<pre>
<pre>
es. di abilitazione dei parametri
es. di abilitazione dei parametri:
smb: \> lowercase on
smb: \> lowercase on
smb: \> prompt on
smb: \> prompt on
</pre>
</pre>
;'''prompt''': Impostando ''' prompt''' su '''on''' prima di ogni trasferimento ci verra' richiesta una conferma.
*'''prompt''': impostando ''' prompt''' su '''on''' prima di ogni trasferimento ci verrà richiesta una conferma.
;'''showconnect''': mostra l' //host/nome_risorsa in uso.
*'''showconnect''': mostra l' //host/nome_risorsa in uso.
<pre>
<pre>
smb: \> showconnect
smb: \> showconnect
Riga 250: Riga 252:
</pre>
</pre>


;'''stat nomefile''': Stampa a video i permessi di un file e offre in ordine temporale info sugli accessi ad esso:
*'''stat nomefile''': stampa a video i permessi di un file e offre, in ordine temporale, info sugli accessi ad esso:
<pre>
<pre>
smb: \> stat  free_kevin.png
smb: \> stat  free_kevin.png
Riga 263: Riga 265:


===Mask, mget e recurse===
===Mask, mget e recurse===
Con il comando '''mget''' abilitiamo il dowload di tutti i file e directory in maniera ricorsiva. Tuttavia possiamo dare a tale comando un parametro (maschera) utilizzando '''mask''' .
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:
Es. nella nostra directory mettiamo di voler scaricare tutti i file con estensione .png:
<pre>
<pre>
Riga 269: Riga 271:
smb: \> mget
smb: \> mget
</pre>
</pre>
In questo modo mget intendera' scaricare tutti i files con tale estensione presenti nella directory corrente.
In questo modo mget intenderà scaricare tutti i files con tale estensione presenti nella directory corrente.
Tuttavia con mget e' possibile modificare la maschera on-fly digitando semplicemente:
Tuttavia con mget è possibile modificare la maschera on-fly digitando semplicemente:
<pre>  
<pre>  
smb: \> mget *png
smb: \> mget *png
</pre>
</pre>
In questo modo la funzione mask, manterra' il suo valore di default che e' '*' (''cioe' tutto'').
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 dir da cui parte il comando.
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==
==Smbmount & Smbumount==
Riga 284: Riga 286:
(''come password digitiamo  quella dell'user creato con smbpasswd o solo invio'')
(''come password digitiamo  quella dell'user creato con smbpasswd o solo invio'')


Cosi' facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
Così facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
<pre>
<pre>
$ cd /path/del/mountpoint
$ cd /path/del/mountpoint
Riga 292: Riga 294:


=Conclusioni=
=Conclusioni=
Samba e' un software semplicemente straordinario. La sua anima, il file smb.conf e' in perfetto stile Linux; cioe', lo stesso file, puo' divenire enorme e strutturatissimo oppure snello e semplicissimo, a seconda (''e questo e' il vero stile linux'') di quello che un utente vuole.
Samba è un software semplicemente straordinario. La sua anima, il file <code>/etc/samba/smb.conf</code> è 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.


-------
-------

Versione delle 01:44, 9 gen 2010

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
Info.png 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
Info.png Nota
Debian non crea la directory /var/spool/samba. Questa directory è adibita solo allo spool di stampa, volendo molti la sostituiscono con /tmp. Se decidete di crearla voi, per un corretto funzionamento impostatele i permessi: nobody:nobody con:
 # chown nobody.nobody /var/spool/samba
 # chmod -R 755 /var/spool/samba


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