Samba: guida estesa: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
 
(137 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{SAMBA
|precedente=Samba: guida rapida
|successivo=Samba e OpenLDAP: creare un controller di dominio}}{{Versioni compatibili}}{{SAMBA1}}
 
== Introduzione ==
== 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.  
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.  
È 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.


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 ==
{{Autori
Analizziamo i programmi che otteniamo dall'installazione della suite Samba per Debian GNU/Linux:
|Autore = [[Utente:Zmo.zmo|zmo]]
 
|Estesa_da =
<pre># apt-get update && apt-get install samba smbfs</pre>
: [[Utente:Ferdybassi|Ferdybassi]]
 
: [[Utente:Wtf|Wtf]] 20:48, 9 nov 2011 (CET)
In breve:
|Verificata_da =
*'''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.
: [[Utente:Wtf|Wtf]]
 
|Numero_revisori = 1
*'''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 <code>/etc/samba/smb.conf</code>.
 
*'''nmblookup''':  risolve i nomi host di un domain Samba (''NetBIOS name'') in indirizzi IP (es: nmblookup ''nomehost'').
<br/>
Installiamo poi alcuni tool utili, grafici e da linea di comando:
<pre>
# apt-get install smbc tksmb xsmbrowser smbclient
</pre>
 
== Configurazione del server ==
Si compone di due fasi principali:
* Composizione del file <code>'''/etc/samba/smb.conf'''</code>.
* Creazione degli utenti che avranno accesso alle risorse condivise tramie <code>'''smbpasswd'''</code>.
 
=== Il file smb.conf ===
 
E' sostanzialmente un elenco di sezioni sotto ognuna delle quali si definiscono uno o più parametri. Ci sono due tipi principali di sezioni:
* '''GLOBALE''', dove semplicemente si definisco sia i parametri di "sistema" sia quelli comuni e/o più usati;
* '''RISORSA''', dove sono definiti tutti quei parametri specifici e funzionali ad una certa risorsa (directory, lettore, stampante ecc.) che si vuole condividere o per abilitare specifiche funzionalità avanzate di samba.
In ogni file di configurazione andrà definita una sola sezione globale, mentre dovranno essere scritte tante sezioni risorse quante sono le risorse da condividere e/o funzionalità avanzate da abilitare. Il file <code>smb.conf</code> avrà dunque un aspetto di questo tipo (al netto degli eventuali commenti):
<pre>
[global]
    parametro1 = valore
    ...
    parametroN = valore
 
[Condivisione1]
    parametro1 = valore
    ...
    parametroN = valore
 
...
 
[CondivisioneM]
    parametro1 = valore
    ...
    parametroN = valore
 
[Periferica1]
    parametro1 = valore
    ...
    parametroN = valore
 
...
 
[PerifericaM]
    parametro1 = valore
    ...
    parametroN = valore
 
[printers]
    parametro1 = valore
    ...
    parametroN = valore
 
[Stampante1]
    parametro1 = valore
    ...
    parametroN = valore
 
...
 
[StampanteM]
    parametro1 = valore
    ...
    parametroN = valore
 
ecc.
 
</pre>
 
==== Sezione global ====
Il minimo numero di parametri da definire in questa sezione è uno/due:
<pre> 
[global]
    allow hosts = 192.168.1.0/24   
    workgroup = debianizzati
</pre>
* <code>'''allow hosts'''</code>: range di IP ai quali è permesso l'accesso a tutte le risorse specificate nel seguito del file di configurazione; in questo caso vengono accettati tutti gli indirizzi compresi tra 192.168.1.1 e 192.168.1.254. Si noti che è possibile specificare più indirizzi e/o gruppi di indirizzi semplicemente separandoli con uno spazio, ad esempio <code>allow hosts = 127.0.0.1 192.168.1.0/24</code>. Qualora l'utente non volesse rendere disponibile tutte le risorse agli stessi range di indirizzi allora il parametro <code>allow hosts</code> non dovrebbe essere definito qui, ma in ciascuna delle sezioni dedicate alle singole risorse condivise. Il parametro è sostanzialmente additivo, ovvero il gruppo di indirizzi ammissibile per ogni risorsa è dato dalla somma di quelli specificati in questa sezione e da quelli definiti per la singola risorsa.
* <code>'''workgroup'''</code>: nome del gruppo di lavoro; non è un parametro critico, nel senso che anche se viene definito un nome differente da quello cui appartengono tutte le altre macchine della rete il risultato è che in windows il nome del server comparirà sotto un differente gruppo di lavoro.
Nel seguito vengono proposti altri parametri che potrebbero risultare interessanti:
<pre>
server string = server@debianizzati.org
netbios name = debianizzati
netbios aliases = alias1 ... aliasN
include = /etc/samba/smb.conf.%L
 
security = user
guest ok = no
guest account = ospite
map to guest = Bad User
 
create mask = 0750
directory mask = 0750
</pre>
* <code>'''server string'''</code>: stringa che identifica il server.
* <code>'''netbios name'''</code>: stringa che sostituisce nella maggior parte dei casi (si veda il manuale) l'hostname della macchina (solo per quantoriguarda la visualizzazione da parte dei client).
* <code>'''netbios aliases'''</code>: permette di identificare un server samba attraverso più nomi. Quest'opzione risulta particolarmente utile in congiunzione con il parametro <code>include</code>.
* <code>'''include'''</code>: permette di includere nel file di configurazione <code>smb.conf</code> un altro file di configurazione (e quindi le relative impostazioni). Nell'esempio riportato viene importato il file /etc/samba.smb.conf.alias, dove ''alias'' è uno degli alias definiti attraverso il parametro <code>netbios aliases</code> (il carattere %L serve proprio a leggere l'imput dell'utente). Questo artificio è utile in quei casi dove può essere necessario caricare impostazioni parzialmente differenti a seconda del gruppo di utenti che accede al server, basta cioè che ciascuno di questi gruppi acceda al server sfruttando un diverso alias, ad esempio ''commerciale'', ''amministrazione'', ''tecnico'', ecc.
* <code>'''security'''</code>: definisce il "modo" con cui samba gestisce l'autenticazione degli utenti.
** ''user'': è il valore predefinito, sia il nome delle risorse che il contenuto risultano indisponibili all'utente fintanto che questi non si è autenticato con successo.
** ''share'': è il valore storico, usato come predefinito nelle versioni di samba precedenti la 3; semplificando si può dire che gli utenti possono vedere le risorse, ma non accedervi, anche senza essersi autenticati con successo (quindi chiunque è in grado di vedere l'elenco delle risorse).
** ''domain'' e ''server'': sono modalità specifiche per reti dove è configurato un dominio e non semplicemente un gruppo di lavoro.
* <code>'''guest ok'''</code>: equivalente al parametro <code>public</code> definisce se una condivisione è accessibile o meno all'utenza guest, posto che questa sia abilitata (si veda la sezione dedicata alla creazione degli utenti). Attribuire ''no'' come valore a questo parametro nella sezione global è di norma inutile, visto che tale è proprio il suo valore predefinito, tuttavia ciò non è vero nel caso in cui il parametro <code>map to guest</code> sia impostato su un valore diverso da ''never'', come in questo esempio. Omettere di specificare ''no'' in questo caso comporterebbe l'impossibiiltà di accedere con utente diverso da guest a tutte quelle risorse per cui non è stato esplicitamente definito <code>guest ok = no</code>.
* <code>'''create mask'''</code>: definisce lo schema di permessi in stile UNIX che i file (e non delle cartelle) creati dai client windows avranno. Si noti che questo parametro non altera in alcun modo i permessi dei file eventualmente già presenti in una cartella condivisa oppure creati al di fuori di samba, per esempio da un utente che si è collegato tramite SSH;
* <code>'''directory mask'''</code>: parametro identico a <code>create mask</code>, ma riguarda le cartelle invece dei file;
 
{{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 ====
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>
[shared]
    comment = Directory Shared
    path = /dir/da/condividere
    browsable = yes
    read only = yes
    public = yes
    create mask = 0755
</pre>
 
Altri parametri:<br>
* <code>'''comment''' </code>= commento per la directory;
* <code>'''path'''</code> = percorso della directory condivisa;
* <code>'''browsable'''</code> = rende visibile lo share;
* <code>'''public'''</code> = rende la directory di libero accesso, è del tutto equivalente all'opzione <code>'''guest ok'''</code>;
* <code>'''read only'''</code> = setta i file della directory condivisa in sola lettura, è l'esatto opposto dell'opzione <code>'''writeable'''</code>, ovvero porre <code>read only = yes</code> equivale a <code>writeable = no</code> e viceversa.
 
==== Condivisione di una stampante ====
Adesso analizziamo i parametri da aggiungere al file <code>/etc/samba/smb.conf</code> per poter condividere una stampante.
Aggiungiamo alla sezione <code>'''global'''</code>:
<pre>
[global]
    printing = [sistema di stampa utilizzato, es: cups, lprng..]
    load printers = yes
</pre>
Creiamo inoltre la sezione <code>'''printers'''</code> che fornirà i parametri di accesso alle nostre stampanti:
<pre>
[printers]
    path = /var/spool/samba
    guest ok = yes
    printable = yes
</pre>
{{Box|Nota|Debian non crea la directory <code>/var/spool/samba</code>. 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: <code>''nobody:nobody''</code> con:
<pre> # chown nobody.nobody /var/spool/samba</pre>
<pre> # chmod -R 755 /var/spool/samba</pre>
}}
}}


Dopodiché scriviamo la sezione specifica per la nostra stampante (''es. una canon'').
<pre>
[canon]
    comment = Canon Printer
    path = /var/spool/samba
    browsable = yes
</pre>
==== 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:
<pre>
[dvd]
    comment = Lettore DVD-R
    preexec = mount /media/cdrom
    postexec = umount /media/cdrom
    path = /media/cdrom
    writable = no
</pre>
Parametri supplementari al nostro <code>/etc/samba/smb.conf</code>:<br>
* <code>'''preexec'''</code>: permette di impostare un'azione che sarà eseguita una volta connessi alla risorsa;
* <code>'''postexec'''</code>: 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.
=== Creazione utenti e 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:
<pre>
# smbpasswd -a utente
New SMB password: ****
Retype new SMB password: ****
</pre>
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 <code>'''guest ok = yes'''</code> nelle sezioni desiderate. Ad esempio nella sezione <code>''shared''</code>:
<pre>
[shared]
    comment = Directory Shared
    path = /dir/da/condividere
    browsable = yes
    read only = yes
    public = yes
    create mask = 0755
    guest ok = yes
</pre>
Così facendo potremo loggarci come ospiti digitando solo ''invio'' come password.
Bene, riavviamo il server:
<pre>
# /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
#
</pre>
Adesso testiamo la validità del file <code>/etc/samba/smb.conf</code> col comando:
<pre>
# 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
</pre>
Premendo enter vedremo il resoconto del nostro file.
== Configurazione del client ==
=== Smbclient ===
Spostiamoci sul client:
<pre># apt-get install smbfs smbclient</pre>
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 <code>smbclient --help</code> per uno screen completo''):
* <code>'''smbclient -L ''hostname'''''</code>: 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>
$ 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
</pre>
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 <code>[global]</code> e <code>[printers]</code>  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.
* <code>'''smbclient -U'''</code>: con questo flag possiamo specificare l'username e l'eventuale password per il login sulla macchina server;
* <code>'''smbclient -A'''</code>: sostanzialmente uguale a <code>-U</code> ma possiamo dargli il path di un file dal quale attingere l'username e la password.
==== Accesso al server ====
<pre>
$ smbclient //SERVER/shared
Password: ****
Domain=[SERVER] OS=[Unix] Server=[Samba 3.0.14a-Debian]
smb: \>
</pre>
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'''.<br>
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>
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
</pre>
Scarichiamo il file ''free_kevin.png'' dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
<pre>
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)
</pre>
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 ====
* <code>'''lowercase'''</code>: 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>
es. di abilitazione dei parametri:
smb: \> lowercase on
smb: \> prompt on
</pre>
* <code>'''prompt'''</code>: impostando ''' prompt''' su '''on''' prima di ogni trasferimento ci verrà richiesta una conferma;
* <code>'''showconnect'''</code>: mostra l' //host/nome_risorsa in uso:
<pre>
smb: \> showconnect
//SERVER/shared
</pre>
* <code>'''stat nomefile'''</code>: stampa a video i permessi di un file e offre, in ordine temporale, info sugli accessi ad esso:
<pre>
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
</pre>
==== 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:
<pre>
smb: \> mask *png
smb: \> mget
</pre>
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:
<pre>
smb: \> mget *png
</pre>
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 downloading, 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:
<pre>$ smbmount //SERVER/shared  /path/del/mountpoint</pre>
(''come password digitiamo  quella dell'user creato con smbpasswd o solo invio'')
Così facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
<pre>
$ cd /path/del/mountpoint
$ ls
  directory  free_kevin.png  pokemon.png dorothy_la_may.gif
</pre>
== Conclusioni ==
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.
-------


Autore: [[Utente:Zmo.zmo|zmo]]
[[Categoria:Reti con Windows]]
[[Categoria:Reti con Windows]]
[[Categora:Samba]]
[[Categoria:Samba]]

Versione attuale delle 14:03, 15 dic 2019

Samba
Arrow left.png

Condivisione risorse

Controller di dominio

Altro

Arrow right.png


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian
Guida estesa

Sommario

  1. Lato server
  2. Lato client
  3. Esempi
  4. Troubleshooting
  5. Approfondimenti


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. È 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.

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.




Guida scritta da: zmo Swirl-auth40.png Debianized 40%
Estesa da:
Ferdybassi
Wtf 20:48, 9 nov 2011 (CET)
Verificata da:
Wtf

Verificare ed estendere la guida | Cos'è una guida Debianized