OsGate.org Logo

Installare e configurare SAMBA - samba network configuration

Networks Networks

Date 29.04.2010

Visits 3167

"Samba é un servizio che all'interno di una rete é sicuramente indispensabile, siccome offre una risorsa importatante agli utenti, ovvero garantisce il servizio di file server. Samba può ricoprire altri ruoli, come per esempio quello di DC (Domain Controller) ma in questo articolo ci soffermeremo solo su una configurazione base del file server."

Introduzione

Samba è il protocollo d'eccellenza per quanto riguarda la condivisione di risorse in rete attraverso i protocolli SMB e CIFS permettendo un alto livello di interoperabilità tra diverse piattaforme. Fin dal suo rilascio dal 1992 Samba ha saputo farsi strada risultando fino ad oggi una delle migliori implementazioni per la condivisione in rete di informazioni e per la gestione di servizi di stampa di stampo open source. In questa guida spiegheremo gli aspetti basilari di una implementazione samba.

Installazione

Per installare samba vi rimandiamo al sistema di installazione di pacchetti della vostra distribuzione. Nel nostro caso utilizzando un sistema debian, samba verrà installato nel seguente modo:

apt-get install samba

Durante il processo di installazione di samba su debian verrano poste due domande. Rispondete ad entrambe no.

Demoni

I demoni che venono fatti partire all'avvio di samba sono due:

  • smbd, che è il demone che gestisce principalmente la condivisione di stampanti e file
  • nmbd, che viene principalmente usato come NetBIOS name server

Smbd

Smbd è responsabile della gestione dei servizi di condivisione di file, stampanti e tutti gli altri oggetti condivisibili, come per esempio cd-rom. La condivisione avviene attraverso il protocollo SMB o CIFS, compatibili con altre piattaforme come Windows o Macintosh. Si occupa anche di gestire le sessioni create con i client che ne fanno richiesta. Questo demone effettua anche il reload dei file di configurazione ogni minuto se questi ultimi dovessero essere soggetti a cambiamenti. È possibile eseguire il reload dei file di configurazione inviando un SIGHUP al demone. Ricaricare i file di configurazione non affliggerà gli utenti che hanno già stabilito una connessione al server. Tra i paramteri più utilizzati, troviamo "-D" che indica che il processo deve essere demonizzato oppure il livello di logging da utilizzare indicato con "-debuglevel". Le porte utilizzate di default dal demone sono la 139 usata per SMB attraverso NetBIOS e 445 utilizzata per SMB over TCP.

Nmbd

Questo demone è principalmente un server in grado di risolvere nomi NetBIOS over IP, utilizzati per esempio nei più comuni client Windows. Il nome NetBIOS del server su cui gira nmbd è di default il nome DNS della macchina stessa ma è possibile specificarne uno differente con il parametro "netbios" name in smb.conf. È possibile usare nmbd come server WINS, ciò significa che creerà un database dei nomi e risponderà ad eventuali query per la risoluzione di nomi in IP.

Avvio dei demoni

L'avvio dei demoni può essere eseguito principalmente in due modi, ovvero tramite inetd oppure come demoni stand alone.

Per fare partire i servizi attraverso inetd è sufficiente decommentare queste due linee in /etc/inted.conf:

#netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
#netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd

Il secondo metodo è rappresentato dagli script di avvio/arresto della vostra distribuzione.

Nel nostro caso gestiremo samba cosi:

bash-3.1$ /etc/init.d/samba start | stop | restart

È consigliabile utilizzare il secondo metodo d'avvio, siccome in questo modo samba sarebbe legato a inetd e dunque verrà a mancare la flessibilità di utilizzare samba come servizio separato.

smb.conf

Il file smb.conf è il file di configurazione principale di samba, un file di tipo ASCII. In questo file possiamo trovare le impostazioni che permettono al nostro server di funzionare correttamente ed è contenuto nella cartella /etc/samba/ o in certi casi in /etc/. Di default questo file è denominato come smb.conf-sample, quindi per permettere al server di funzionare andrà rinominato in smb.conf. È consigliabile non modificare il file smb.conf-simple e creare un nuovo file vuoto chiamato smb.conf. Questo perchè il file smb.conf-simple è colmo di esempi che aiutano a capire il funzionamento delle sezioni, ma che portano scomodità e confusione durante la lettura.

Il file è strutturato secondo delle sezioni rappresentate attraverso delle parentesi quadre. Tutte le sezioni del file eccetto la sezione [global], rappresentato una risorsa condivisibile. Gli attributi che si andranno ad impostare per ogni sezione vanno rappresentati secondo uno schema nome = valore. I commenti sono preceduti dal carattere "#" o ";", e i valori che si andranno ad inserire sono case insensitive, eccetto i percorsi che puntano a oggetti del file system. Nel file è possibile utilizzare delle variabili come per esempio "%u" per specificare il nome utente. Analizzeremo le variabili alla fine.

Le sezioni in smb.conf

Attraverso le sezioni, è possibile creare le risorse da condividere, racchiudendo il nome della condivisione tra partentesi quadre. Esistono tutta via tre sezioni speciali, ovvero [global], [home], [printers] che sono "riservate" per altri scopi.

Sezioni speciali

global

La prima sezione che andremo ad analizzare è [global]. Questa sezione solitamente si posiziona in cima al file ed è sempre presente. Contiene una serie di configurazioni globali che verranno prese in considerazione qualunque sia la cartella condivisa.

Ecco alcuni parametri comuni da utilizzare per una configurazione basilare:

  • workgroup = myworkgroup, specifica il nome del workgroup o del domino
  • server string = "File Server", descrizione del server
  • security = user, serve per indicare il modo in cui samba gestirà gli accessi, ecco la spiegazione dei valori:
    • user: al momento della connessione con il server, al client verranno chiesti password ed username per effettuare la condivisione. Il nome utente deve corrispondere ad un utente creato appositamente sul server samba. È l'opzione di default e anche la più consigliata.
    • share: con questa opzione, non è necessario utilizzare un nome utente, in quanto al momento della connessione verrà chiesta solo la password. Questo perchè samba cercherà di determinare il nome utente in base a dei metodi consultabili nella man page smb.conf.
    • domain: tramite questa modalità la credenziali d'accesso (username e password) verranno validate attraverso un server domain controller o backup domain controller windows. In ogni caso è necessario aggiungere l'utente sul server samba. Consultare la man page di smb.conf per maggiorni informazioni.
    • server: i dati d'accesso, quali username e password verranno passati ad un altro server SMB per poi eseguirne la validazione. È sconsigliato l'utilizzo di questa opzione, in quanto è maggiormente soggetta a dei man-in-the-middle-attack e ad altre vulnerabilità.
    • ads: tramite ads, è possibile unirsi ad un dominio active directory come membro. È necessario installare e configurare kerberos, e così facendo, samba sarà in grado di accettare i ticket kerberos.
  • hosts allow = 192.168.1 192.168.2.10, speicifica una rete o un singolo host avente diritto ad accedere al server
  • log file = /var/log/samba/$u.log, imposta il percorso del file di log. Tramite le variabili è possibile personalizzare il nome del file, per esempio utilizzando lo username come nome per i file di log relativi ad ogni utente.

 Ecco un esempio della sezione global:

[global]
workgroup = wg
server string = Server di condivisione
security = user
hosts allow = 192.168.1 192.168.2.10

home

Questa sezione serve per la condivisione delle cartelle home dei relativi utenti.

Se nella configurazione di questa sezione non si indica un percorso dove contenere le home directory, verrà utilizzata la cartella home di default dell'utente che cerca di eseguire il login. Nel caso in cui non si vogliano utilizzare le cartelle home di default e dunque specificare un nuovo percorso è utile utilizzare le variabili come "%u" per specificare le cartelle relative ad ogni utente.

Altra nota importante è che se specificata l'opzione per un accesso con utente guest, quest'ultimo avrà accesso a tutte le cartelle home di tutti gli utenti, dunque è bene utilizzare "read only = yes".

Ecco una tipica impostazione:

[homes]
comment = Home Directories
browseable = no
writable = yes

printers

Questa sezione è simile alla sezione [homes] ma funziona con le stampanti. L'utente che si collega avrà accesso ad ogni stampante configurata sul server.

È importante specificare l'opzione "printable = yes", altrimenti il server si rifiuterà di caricare il file di configuraizone.

Ecco come appare un configurazione tipica:

[global]
workgroup = workgroup
load printers = yes
printing = cups
printcap name = cups

[printers]
path = /var/spool/samba
guest ok = yes
printable = yes
public = yes
writable = no

Come possiamo vedere è stato impostato un percorso per contenere le code di stampa, "/var/spool/samba". Sulla cartella public, è impostato lo sticky bit, per evitare ad ogni utente che crea un file al suo interno di eliminare eventualmente i file degli altri utenti anche se si possiedono i diritti per farlo.

Per condividere una singola stampante è necessario creare una sezione apposita con il nome della stampante.

Attenzione: con questo metodo i driver vanno installati dal lato client.

Condivisioni

Per aggiungere una risorsa da condividere, è sufficiente specificarne il nome tra parentesi quadre e indicare alcune opzioni per il corretto funzionamento della stessa, vediamo un esempio:

[dati]
comment = Users's share #commento sulla risorsa condivisa
path = /media/hd1 #percorso da condividere
read only = no # la certella è scrivibile
public = no # la cartella non è pubblica
valid users = john # solo l'utente john può connettersi

Per connetterci alla risorsa dati dovremo digitare dal nostro client l'IP del server seguito dal nome della condivisione, per esempio \192.168.1.5dati.

Gestione utenti

Per permettere agli utenti di connettersi al nostro file server è necessario aggiungerli al file smbpasswd. Questo file è paragonabile al normale /etc/passwd infatti contiene il nome utente e la password criptata dell'utente che si aggiunge. Per aggiungere un utente va utilizzato il comando "smbpasswd", che permette di aggiungere, rimuovere e cambiare password agli utenti.

Aggiunta utente:

bash-4.1# smbpasswd -a nome_utente

Disattivazione utente:

bash-4.1# smbpasswd -d nome_utente

Cambiamento password:

bash-4.1# smbpasswd nome_utente

Gli utenti che si vanno ad aggiungere, devono essere utenti reali di sistema. È possibile aggiungere un utente di sistema tramite questo comando:

bash-3.1# adduser nome_utente

Variabili

Ecco una lista delle variabili più comuni da utilizzare all'interno del file smb.conf:

  • %U => username di sessione
  • %G => nome del gruppo di %U
  • %m => Nome NetBios del client (hostname)
  • %a => architettura della macchina remota (esempio Windows XP = WinXP)
  • %I => IP del client
  • %$(envvar) => il valore della variabile d'ambiente envar

Utilizzabili solo a connessione stabilita:

  • %u => username con la quale ci si connette
  • %g => gruppo di %u
  • %H => home directory di %u