diff --git a/samba.md b/samba.md new file mode 100644 index 0000000..ee9e2a0 --- /dev/null +++ b/samba.md @@ -0,0 +1,186 @@ +# samba + +Esistono diversi protocolli per la condivisione di files, ma se nella rete si trovano sia computer con GNU/Linux che con Microsoft Windows, +allora è quasi inevitabile che la scelta debba ricadere su SMB/CIFS. + +samba è una suite di strumenti utilizzati per la condivisione tra reti miste Windows-GNU/Linux, implementando proprio il protocollo di rete `SMB/CIFS`. + +## Installazione + +```bash +apt install libcups2 samba samba-common cups smb4k +``` +## Creazione directory + +Prima di andare a configurare samba occorre creare le shares, ovvero le directory da condividere. + +In questo esempio verrà creata una directory share dentro `/srv`, come indicato dal Filesystem Hierarchy Standard (FHS): + +```bash +sudo mkdir -p /srv/samba + +sudo mkdir /srv/samba/pubblici +sudo mkdir /srv/samba/files_privati +``` +Vedremo successivamente quali permessi impostare a queste directory. + +## Configurazione + +Tutti i parametri di configurazione di samba si trovano in `/etc/samba/smb.conf`. + +Ogni volta che si apportano delle modifiche al file sopra citato è necessario riavviare il servizio di samba: + +```bash +sudo systemctl restart smbd.service +sudo systemctl restart nmbd.service +``` + +### Sezione global + +La sezione `[global]` si trova sempre all'inizio della configurazione del file `/etc/samba/smb.conf`. + +Definisce le impostazioni del server samba e le opzioni di default che verranno assegnate alle condivisioni. I principali parametri del server: + +```bash +[global] + allow hosts = 192.168.1.0/24 # Range di IP che possono accedere al server + workgroup = WORKGROUP # Nome del gruppo di lavoro + netbios = SAMBA # Nome della macchina nel gruppo di lavoro + security = USER # Livello di sicurezza delle condivisioni + server string = FILE SERVER # Descrizione della macchina + create mask = 755 # Permessi sulle cartelle + encrypt passwords = yes # Abilitare/disabilitare la cifratura della password +``` +Nel parametro `security` si poteva utilizzare in alternativa il valore `SHARE` in modo da creare condivisioni liberamente accessibili, senza necessità di autenticazioni. + +Altri possibili valori sono: + +- `user`: richiede utente e password per l'accesso alla condivisione; +- `domain`: questo valore va assegnato quando si vuole configurare il server samba come Domain Controller; +- `ADS`: questo valore consente al server samba di agganciarsi a un dominio Active Directory + +Se si volesse rendere accessibili delle condivisioni anche ad utenti senza credenziali, inserire anche questi due parametri: + +```bash +map to guest = Bad User +guest account = nobody +``` + +### Sezione condivisione + +Aggiungere la cartella nel file di configurazione `/etc/samba/smb.conf`: + +```bash +[shared] + comment = Cartella condivisa # Commento sulla condivisione + path = /cartella/da/condividere # Percorso della condivisione + browseable = yes # Rende visibile la condivisione + public = yes # Rende la cartella accessibile + create mask = 0755 # Permessi dei file +``` + +Dove /cartella/da/condividere è la directory da condividere. + +#### Esempio di condivisione pubblica + +Ecco alcuni esempi di condivisioni, ciascuno con una politica di sicurezza differente. Sotto alla sezione global scrivere: + +```bash +[pubblici] +comment = files pubblici +path = /srv/samba/pubblici +writeable = yes +browsable = yes +guest ok = yes +read only = no +create mask = 770 +``` + +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). + +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. + +#### Esempio di condivisione privata + +```bash +[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 è impedita la visualizzazione della cartella tra le condivisioni samba. L'utente Luca per accedervi dovrà richiamarla direttamente. + +## Montare condivisione + +Per montare una condivisone samba presente su un altro file server, si utilizza il seguente comando: + +```bash +smbmount //SERVER/condivisione /punto/di/mount +``` + +Dove `/punto/di/mount/` è una directory creata con privilegi di amministrazione solitamente in `/media`. + +## Connessione al server + +Per connettersi ad un server samba si usa: + +```bash +smbclient //SERVER/condivisione +``` +### Sicurezza e controllo accessi + +L'accesso alle directory condivise viene regolato sia nativamente a livello di file system, sia a livello di condivisione samba. + +#### Aggiungere utente + +Per quanto riguarda la condivisione `[files_privati]`, solo l'utente Luca può accedervi e scrivere al suo interno. +Perché questo funzioni però bisogna creare l'utente Luca su samba e assegnargli, sul server, la directory interessata. + +Prima di aggiunge un utente su samba bisogna che questo sia presente nel sistema. + +```bash +sudo adduser luca --home=/home/public --shell=/bin/false --disabled-password +``` + +L’opzione `--shell=/bin/false disabilita` l’accesso alla shell da parte dell’utente creato, che non avrà quindi possibilità di fare un vero e proprio login. Questo per ragioni di sicurezza, come accade per gli account di sistema. + +Creare quindi l'utente in samba: + +```bash +sudo smbpasswd -a Luca +``` + +Creato l'utente bisogna ora assegnargli la directory alla quale dovrà accedere: + +```bash +sudo chown luca files_privati +sudo chmod -R 700 /srv/samba/files_privati +``` + +In qualsiasi momento è possibile vedere la lista degli utenti samba con relative informazioni tramite il comando: + +```bash +sudo pdbedit -L -v +``` +dove -L richiede l'elenco degli utenti, l'opzione -v, invece, sta per `verbose`. + +## Log di samba + +Tutti i log di samba sono presenti nella cartella `/var/log/samba`. + +## Collegamenti + +- [https://wiki.ubuntu-it.org/Server/samba](https://wiki.ubuntu-it.org/Server/samba) +- [https://www.mrw.it/linux/creiamo-file-server-samba_7411.html](https://www.mrw.it/linux/creiamo-file-server-samba_7411.html) +- [https://guide.debianizzati.org/index.php/Installare_Samba_per_condividere_directory_-_Debian_Stretch](https://guide.debianizzati.org/index.php/Installare_Samba_per_condividere_directory_-_Debian_Stretch) +- [https://guide.debianizzati.org/index.php/Samba:_guida_rapida](https://guide.debianizzati.org/index.php/Samba:_guida_rapida) +