La finalità di una rete locale di computer (LAN) è principalmente quella di permettere lo scambio di informazioni e la condivisione di risorse nella modalità più semplice e veloce per l’utente.
L’esistenza di un File Server sempre attivo, opportunamente "securizzato" e "ridondato", dedicato a questo scopo, consente di creare zone di accesso, di archiviazione e di scambio per i vari utenti della Lan (File Sharing), centralizzando compiti delicati e fondamentali su un’unica macchina sempre accessibile ai membri della Rete.
L’importanza strategica del file server è dimostrata dal fatto che, ad oggi, non esiste una rete locale aziendale degna di questo nome che non abbia una macchina o un servizio che svolge questo compito.
Il protocollo SMB/CIFS
Esistono diversi protocolli per la condivisione di files ma se nella nostra rete abbiamo si computer con Linux che con Microsoft Windows, allora è quasi inevitabile che la scelta debba ricadere su SMB/CIFS.
Questo protocollo si occupa principalmente della condivisione di file, stampanti e altre comunicazioni tra i diversi hosts di una rete secondo un approccio client-server. Si tratta di un protocollo nativo per i sistemi Windows, ma è perfettamente fruibile anche dagli altri principali sistemi, come Linux o Mac OS.
Il questa guida andremo a installare e configurare su un nostro ipotetico server Ubuntu, il software open source che gestisce SMB per Linux, soffermandoci sull’aspetto dell’accesso al file system che consente ai PC Windows di una rete locale di accedere alle condivisione di files del nostro server Linux.
Lo scenario che andremo ad analizzare presuppone quindi l’esistenza di una macchina Ubuntu con Samba server e un numero indefinito di client Windows.
Installazione di Samba
L’installazione è molto semplice e consiste nel solo pacchetto samba che andrà poi a richiamare tutto ciò che è necessario. Limitiamoci quindi a dare il comando:
sudo apt-get install samba
Creazione directory
Prima di andare a configurare Samba occupiamoci di creare le shares, ovvero le directory che desideriamo poi condividere. Non ci sono percorsi obbligatori dove posizionarle, inoltre nella definizione di ciascuna share dovremo comunque specificare la relativa path. Per comodità conviene comunque crearle tutte nello stesso percorso.
In questo esempio andiamo a creare una directory share dentro /srv, come indicato dal Filesystem Hierarchy Standard (FHS):
sudo mkdir -p /srv/samba
All’interno di essa creiamo le directory per le condivisioni:
sudo mkdir /srv/samba/pubblici
sudo mkdir /srv/samba/files_privati
Vedremo successivamente quali permessi impostare a queste directory.
Configurazione
Tutte le configurazioni di Samba vengono impostate nel file /etc/samba/smb.conf che troviamo già con una configurazione di base ampiamente commentata. Il file smb.conf è diviso in sezioni, noi vedremo quelle più comuni che interessano la condivisione di files.
La sezione [global] è quella principale e nonostante non sia obbligatoria è fondamentale includerla nel nostro file di configurazione Samba. Ha una duplice funzione: definisce le impostazioni del server Samba e le opzioni di default che verranno assegnate alle nostre condivisioni. Queste saranno poi ignorate nel caso in cui ne verranno esplicitate di nuove nelle singole condivisioni.
Vediamo ora una possibile impostazione della sezione global ma prima rinominiamo il file smb.conf originale per ogni eventualità:
sudo mv /etc/samba/smb.conf /etc/samba/smb.originale
Creiamone poi uno nuovo dove andare poi ad inserire tutte le impostazioni di cui necessitiamo:
sudo nano /etc/samba/smb.conf
All’interno del file andiamo a scrivere la nostra configurazione:
[global]
workgroup = WORKGROUP
server string = File Server realizzato con Samba
security = user
hosts allow = 127.0.0.1 192.168.0.0/24 192.168.25.0/24
encrypt passwords = yes
- Workgroup: assegna il gruppo di lavoro al nostro server Samba. Se le macchine Windows ne hanno già uno possiamo riportare quello, altrimenti ne andremo a creare uno nuovo.
- Server string: descrizione che apparirà per il nostro server samba.
- security: Imposta il livello di sicurezza per l’autenticazione. I possibili valori sono:
- user: richiede utente e password per l’accesso alla condivisione. Attenzione: gli account samba sono slegati da quelli del server, vedremo come configurarli.
- domain: questo valore va assegnato quando vogliamo configurare il nostro server Samba come Domain Controller.
- ADS: questo valore consente al nostro server Samba di agganciarsi a un dominio Active Directory come membro nativo, in questo modo potremo usare direttamente gli utenti di dominio per le nostre condivisioni. Vedremo in una seconda guida questa funzionalità.
- server e share: entrambi i valori sono deprecati nelle ultime versioni ed è bene non utilizzarle. A chi volesse comunque saperne di più consiglio di consultare la guida ufficiale.
- hosts allow: possiamo indicare da quali classi di indirizzi IP gli hosts potranno collegarsi alle nostre condivisioni. Se vogliamo negare però l’accesso ad alcuni IP all’interno della classe abbiamo a disposizione anche il parametro hosts deny dove indicarli.
- encrypt passwords: Tramite questo parametro si va ad abilitare/disabilitare la cifratura della password. È sempre bene abilitarla, anche perché Windows stesso la tiene abilitata di default.
Se volessimo rendere accessibili delle condivisioni anche ad utenti senza credenziali dobbiamo inserire anche questi due parametri:
map to guest = Bad User
guest account = nobody
Con queste due istruzioni andiamo a dire a Samba di accettare utenti guest, ovvero privi di username, e di assegnare loro un utente di sistema. In questo caso abbiamo indicato "nobody" che è l’utente dai permessi minimi in linux.
Creazione delle Shares
Terminata la sezione Global aggiungiamo ora le shares, cioè le directory condivise che abbiamo creato in precedenza e che ora andremo a rendere accessibili in condivisione. Ciascuna inizia con il nome della condivisione stessa tra parentesi quadre.
Vediamo ora alcuni esempi di condivisioni, ciascuna con una politica di sicurezza differente. Sotto alla sezione global andiamo a scrivere:
[pubblici]
comment = files pubblici
path = /srv/samba/pubblici
writeable = yes
browsable = yes
guest ok = yes
read only = no
create mask = 0770
A questa condivisione avrà accesso qualsiasi utente di sistema. Se in [global] è presente l’opzione map to guest = Bad User non verrà richiesta alcuna password e l’utente che verrà utilizzato è quello indicato in guest account (nobody nel nostro caso). In caso contrario verranno chieste le credenziali ma qualsiasi utente di sistema potrà accedervi. Con create mask vengono indicati i permessi nella classica scrittura Unix. In questo caso con 0770 abbiamo dato massimo accesso a gruppo e proprietario.
Come secondo esempio consideriamo di creare una condivisione "Top Secret":
[files_privati]
comment = Files privati di Luca
path = /srv/samba/files_privati
browsable = no
guest ok = no
valid users = Luca
A questa condivisione avrà accesso solamente l’utente Luca. Tramite l’opzione browsable=no impediamo addirittura la visualizzazione della cartella tra le nostre condivisioni Samba. L’utente Luca per accedervi dovrà richiamarla direttamente. Ad esempio su Windows si dovrà lanciare il comando:
\ip_server_sambafiles_privati
Usciamo dall’editor nano salvando con ctrl+x e riavviamo il servizio di samba per rendere effettive le modifiche:
sudo restart smbd
sudo restart nmbd
A questo punto abbiamo terminato le impostazione di Samba con le prime due condivisioni. Perché siano però fruibili dai client della rete è prima necessario completare la gestione degli accessi.
Sicurezza e controllo accessi
Soffermiamoci ora sull’aspetto della sicurezza nell’accesso alle nostre condivisioni.
L’accesso alle directory condivise viene regolato tramite sia nativamente a livello di file system (come su ogni ambiente Linux), sia a livello di condivisione Samba. Questo vuol dire che dovremo preoccuparci di entrambi i parametri perché le nostre condivisioni siano accessibili davvero solo a chi vogliamo noi.
Aggiungere utente
Soffermiamoci sulle due condivisioni (pubblici, files_privati) create in precedenza in Samba e vediamo come agire sul file system del nostro server affinché quelle impostazioni siano coerenti con il nostro obiettivo.
Per quanto riguarda la condivisione [files_privati] abbiamo dichiarato che solo l’utente Luca può accedervi e scrivere al suo interno. Perché questo funzioni però dobbiamo creare l’utente Luca su Samba e assegnargli, sul nostro server, la directory interessata.
Prima di aggiunge un utente su samba bisogna che questo sia presente nel sistema. Se così non fosse dobbiamo crearlo. Andiamo quindi ad aggiungere l’utente Luca con relativa password sul server:
sudo useradd Luca -p password
E creiamolo poi anche su samba:
sudo smbpasswd -a Luca
Creato l’utente ora andiamo assegnargli la proprietà della directory alla quale dovrà accedere come già indicato sul smb.conf:
sudo chown luca files_privati
sudo chmod 700 /etc/samba/files_privati
In qualsiasi momento potete vedere la lista degli utenti Samba con relative informazioni tramite pdbedit, il comando per la gestione del database utenti di Samba:
sudo pdbedit -L -v
-L richiede l’elenco degli utenti, l’opzione -v, invece, sta per "verbose".
Immaginiamo ora che il nostro file server serva a condividere files all’interno di una azienda che comprende più reparti. Creiamo come descritto sopra gli utenti Maria ed Alessandro, andandoli poi ad assegnare al gruppo amministrazione:
sudo adduser Maria amministrazione
sudo adduser Alessandro amministrazione
Creiamo una directory fatture alla quale assegnare a livello di file system il gruppo amministrazione.
sudo mkdir /srv/samba/fatture
sudo chgrp amministrazione /srv/samba/fatture
chmod 770 /srv/samba/fatture
Torniamo quindi a modificare smb.conf per creare la condivisione
sudo nano /etc/samba/smb.conf
aggiungendo:
[fatture]
comment = Fatture aziendali
path = /srv/samba/fatture
writeable = yes
browsable = yes
valid users = @amministrazione
guest ok = no
in questo modo abbiamo abilitato, anche a livello di condivisione Samba, il gruppo amministrazione a leggere e scrivere la share fatture.
A livello di permessi Samba possiamo anche dichiarare quali utenti sono abilitati a scrivere e quali a leggere, ovviamente sempre compatibilmente con i permessi su file system. Ad esempio lasciando ad amministrazione i massimi permessi per la directory fatture, sulla share possiamo assegnare a Maria i diritti di scrittura mentre ad Alessandro solo quelli in lettura. Per farlo sostituiamo
valid users = @amministrazione
con:
read list = Alessandro
write list = Maria
Abbiamo così terminato la configurazione di Samba e le prime shares, ma come abbiamo visto possiamo sempre modificare i parametri per venire incontro alle esigenze nostre o dei nostri utenti. Per un client Windows che rientra nei permessi specificati sarà ora possibile accedere alle condivisioni del nostro file server Ubuntu. Per collegarci ad esse il modo più sicuro è quello di richiamarle direttamente usando il nome del server o il suo indirizzo IP da una finestra di windows explorer o dal comando Run (esegui):
\ubuntuSrv