Samba: guida estesa

Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


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 tra macchine windows e GNU/Linux (UNIX); si avvale sostanzialmente del protocollo SMB (server message block) originario microsoft e 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, 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 gestisce le connessioni tcp/ip del server samba; gestisce le autenticazioni, da accesso ai filesystem e allo spooler di stampa.
  • nmbd: questo demone gestisce il lato 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.
  • smbclient: programma client a riga di comando simile a ftp, dotato di diverse funzioni; tra le piu' importanti, quella di elencare le risorse messe 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 dovra' essere anche un utente presente sulla macchina.
  • testparm: strumento per la verifica del file /etc/samba/smb.conf.
  • nmblookup = serve per risolvere 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
     browsable = yes
     create mask = 0755

Con la sezione global all'interno del file smb.conf abbiamo settato 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.

ok, in breve:

  • allow hosts = range di ip ai quali e' permesso l'accesso alla risorsa
  • workgroup = nome del gruppo di lavoro
  • server string = stringa che identifica il server
  • browsable = rende visibile lo share
  • create mask = determina i permessi dei file in condivisione

Questi sono solo pochissimi parametri. Potrete trovarli tutti a questa pag. tratta dal sito ufficiale di Samba.

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.

 [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 dir condivisa
  • public = rende la dir di libero accesso
  • read only = setta i files della dir condivisa in sola lettura.

Condivisione di una stampante

Adesso analizziamo i parametri da aggiungere al file 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 fornira' i parametri di accesso alle nostre stampanti:

[printers]
    path = /var/spool/samba
    guest ok = yes
    printable = yes
  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.


Dopodiche' scriviamo la sezione specifica per la nostra stampante (es. una camon).

 [camon]
    comment = Camon Printer
    path = /var/spool/samba
    browsable = yes
 

Ok, a questo punto il file puo' considerarsi sufficientemente configurato per i nostri scopi.

Autenticazione

Preoccupiamoci ora dell'accesso vero e proprio alla directory messa in condivisione. Possiamo creare un utente samba con smbpasswd, tenendo presente che un utente samba deve anche essere un utente presente sulla macchina; attribuendogli 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 monteremo dai client la dir condivisa con smbmount, o coi quali accederemo direttamente al server con 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

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

Bene, riavviamo il server:

# /etc/init.d/samba restart

Adesso testiamo la validita' del file /etc/samba/smb.conf col comando:

# testparm /etc/samba/smb.conf

Dovra' restituirvi fra le altre questa stringa:

Loaded services file OK.

Lato client

Smbclient

Spostiamoci sul client:

# apt-get install smbfs

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.

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 i560
        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 smb.conf, quindi, la nostra directory shared e la nostra stampante (le sezioni [global] e [printers] non sono visibili poiche' sono sezioni di parametri usate dal programma). Nella colonna Server sono invece elencati gli hosts facenti parte del medesimo workgroup. C'e' 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 -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 e' SERVER. Sostanzialmente il funzionamento smbclient e' il funzionamento di ftp, ma con in piu' degli utilissimi tools per il down/uploading dei files. 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.

Download di un file con get.
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:

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 sara' salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.

Funzioni speciali:

  • 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)
es. di abilitazione dei parametri
smb: \> lowercase on
smb: \> prompt on
  • prompt = abilita/disabilita la richiesta di trasferimento. Impostando prompt su on prima di ogni trasferimento ci verra' chiesta conferma.
  • showconnect = mostra l' //host/nome_risorsa in uso.
smb: \> showconnect
//SERVER/shared
  • stat nomefile = Stampa a video i permessi di un file e in ordine temporale tutti gli 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 dowload 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 intendera' scaricare tutti i files con tale estensione presenti nella directory corrente. Tuttavia con mget e' possibile modificare la maschera on-fly digitando semplicemente:

 
smb: \> mget *png

In questo modo la funzione mask, manterra' il suo valore di default che e' '*' (cioe' 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.

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)

Cosi' facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:

$ cd /path/del/mountpoint
     $ ls
       directory  free_kevin.png  pokemon.png dorothy_la_may.gif 




Autore: zmo