mywiki/samba.md

187 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
```
Lopzione `--shell=/bin/false disabilita` laccesso alla shell da parte dellutente 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)