Configurare server Samba¶
Hai una macchina Linux linuxhost che vuoi configurare come server Samba per una macchina Windows windowshost.
Warning
Per motivi di sicurezza, le tue macchine dovrebbero consentire il protocollo Samba solo su una rete privata (dedicata). E/O assicurati che iptables su linuxhost limiti il traffico alle porte 139 e 445 solo a windowshost.
Cosa vogliamo ottenere¶
La macchina Linux agisce come server Samba per la macchina Windows.
Due utenti, smbrw e smbro sono autorizzati a connettersi, nessun accesso ospite.
Due percorsi sono serviti:
- /home/pathRO, visibile in Windows come datain, con accesso di sola lettura per tutti
- /home/pathRW, visibile in Windows come dataout, con accesso di lettura-scrittura per l'utente smbrw e accesso di sola lettura per l'utente smbro
Configurazione: prerequisiti¶
Tutti i comandi seguenti devono essere eseguiti sulla macchina Linux.
Installa i pacchetti richiesti:
$ apt-get install samba samba-common python-glade2 system-config-samba
$ apt-get install smbclient
Crea utenti Unix. Poiché questi utenti saranno usati esclusivamente da Samba, non hanno bisogno di potersi connettere direttamente a Linux, quindi li rendiamo non interattivi impostando la shell a /bin/false:
$ addgroup smbgrp
$ adduser smbrw --shell /bin/false --ingroup smbgrp
$ adduser smbro --shell /bin/false --ingroup smbgrp
Assicurati che i percorsi serviti esistano e abbiano i privilegi corretti. Omettiamo la parte rilevante per il percorso di sola lettura, ma poiché tale percorso molto probabilmente esiste già, devi solo assicurarti che sia leggibile da tutti:
$ mkdir /home/pathRW
$ chown -R smbrw.smbgrp /home/pathRW
Crea un percorso che sarà referenziato nel file smb.conf:
$ mkdir /etc/samba/private/
Impostare regole firewall¶
È saggio limitare l'accesso a questo server, tramite regole firewall sul server.
Inoltre, se il server è ospitato nel cloud, e hai bisogno di accedere a questo server dall'esterno del tuo tenant OpenStack, dovrai anche aggiungere regole SecurityGroup che consentano l'accesso da Internet pubblico. Nello specifico, devi consentire:
# UDP ingress to port-range 137-138
# TCP ingress to port 139
# TCP ingress to port 445
Se stai usando IPtables, assumiamo che il pacchetto iptables-persistent sia stato precedentemente installato, quindi dobbiamo solo aggiungere queste righe nel file /etc/iptables/rules.v4:
# Samba
-A INPUT -s <IP_of_windowshost>/32 -p udp -m state --state NEW -m udp -m multiport --dports 137,138 -j ACCEPT
-A INPUT -s <IP_of_windowshost>/32 -p tcp -m state --state NEW -m tcp -m multiport --dports 139,445 -j ACCEPT
Riavvia iptables:
$ service iptables-persistent restart
Se stai usando ufw, l'installazione precedente dei pacchetti samba avrà già definito l'applicazione Samba, quindi ora devi solo:
$ ufw allow from <IP_of_windowshost>/32 to any app Samba
$ ufw enable
e controlla con:
$ ufw status verbose
Configurazione: Samba¶
Crea il file /etc/samba/smb.conf con contenuto simile a:
#
# Inspired by:
# - http://guide.debianizzati.org/index.php/SAMBA:_configurazione_lato_server
# - https://www.howtoforge.com/samba-server-ubuntu-14.04-lts
# - https://www.samba.org/samba/docs/using_samba/ch09.html
#
[global]
server role = standalone server
server string = Samba Server test %v
### NOTE: the following 4 lines assume we are the only Samba master ###
preferred master = yes
local master = yes
domain master = yes
os level = 65
#
log level = 2
max log size = 10000
#
workgroup = WORKGROUP
#
# Restrict binding to networks or interfaces, adapt as appropriate
interfaces = 127.0.0.0/8 eth1
bind interfaces only = yes
#
netbios name = server test
security = user
map to guest = Bad User
dns proxy = no
username map = /etc/samba/private/utenti.map
smb passwd file = /etc/samba/private/smbpasswd
# Fix
unix extensions = No
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
#============================ Share Definitions ==============================
# [Anonymous]
# path = /home/anonymous
# browsable =yes
# writable = yes
# guest ok = yes
# read only = no
[datain]
path = /home/pathRO
comment = Read-only FS
valid users = smbrw, smbro
read only = yes
oplocks = False
level2 oplocks = False
[dataout]
path = /home/pathRW
comment = Read-write FS
valid users = smbrw, smbro
read only = no
write list = smbrw
read list = smbro
directory mask = 0755
create mask = 0644
oplocks = False
level2 oplocks = False
Se vuoi davvero una qualche forma di accesso anonimo, considera di modificare la sezione Anonymous nell'esempio sopra.
Controlla che il file di configurazione sia OK:
$ testparm
Crea password Samba per i tuoi utenti:
$ smbpasswd -a smbrw
$ smbpasswd -a smbro
Avvia samba e assicurati che parta all'avvio:
$ systemctl enable smbd
$ systemctl restart smbd
$ systemctl status smbd
Il comando status potrebbe mostrare alcuni messaggi strani, ma potrebbero essere innocui, quindi per favore prosegui e controlla la funzionalità.
Verifica¶
Su linuxhost:
$ smbclient -L localhost
Su windowshost apri Esplora File e prova a connetterti a:
\\<IP_of_linuxhost>\
dovrebbe apparire un pop-up che chiede le credenziali per la connessione.
Se vuoi testare anche il secondo account, apri un prompt dei comandi ed esegui:
$ net use
$ net use \\<IP_of_linuxhost>\<network_path> /del
o più semplicemente:
$ net use * /del
poi torna a Esplora File e connettiti di nuovo.