Samba è un progetto open source per le piattaforme Unix e GNU/linux che fornisce servizi di condivisione di file e stampanti a client SMB/CIFS. Samba consente di ottenere interoperabilità tra Unix, Linux, macOS e Windows. L’attuale versione è la 4.xx.xx. I demoni disponibili nella suite sono: samba (ruolo di Domain Controller), smbd (condivisione dei file e delle stampanti), nmbd: (risoluzione dei nomi del NetBIOS negli indirizzi IP), winbindd (risolve le informazioni su gruppi ed utenti ).
Per installare samba in debian 11 bullseye
~$ sudo apt install samba
Installato samba possiamo controllare che il servizio sia correttamente avviato con
maurizio@debian11:~$ sudo systemctl status smbd
● smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-11-21 17:13:01 CET; 20s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Process: 8401 ExecStartPre=/usr/share/samba/update-apparmor-samba-profile (code=exited, status=0/S>
Main PID: 8410 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 2325)
Memory: 14.3M
CPU: 284ms
CGroup: /system.slice/smbd.service
├─8410 /usr/sbin/smbd --foreground --no-process-group
├─8412 /usr/sbin/smbd --foreground --no-process-group
├─8413 /usr/sbin/smbd --foreground --no-process-group
└─8414 /usr/sbin/smbd --foreground --no-process-group
Nov 21 17:13:01 debian11 systemd[1]: Starting Samba SMB Daemon...
...
sinteticamente anche con
$ systemctl --all|egrep 'samba|smbd|nmbd' nmbd.service loaded active running Samba NMB Daemon smbd.service loaded active running Samba SMB Daemon
Per controllare il demone Samba NMB
maurizio@debian11:~$ systemctl status nmbd
● nmbd.service - Samba NMB Daemon
Loaded: loaded (/lib/systemd/system/nmbd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-02-23 17:13:01 CET; 13min ago
Docs: man:nmbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 8400 (nmbd)
Status: "nmbd: ready to serve connections..."
Tasks: 1 (limit: 2325)
Memory: 2.7M
CPU: 109ms
CGroup: /system.slice/nmbd.service
└─8400 /usr/sbin/nmbd --foreground --no-process-group
Controllare la versione di samba
Per controllare la versione samba, smbd -V
root@debian11:/etc/samba# smbd -V
Version 4.13.13-Debian
Le porte usate da samba
Le porte TCP utilizzate sono la 139 e/o 445 e le porte 137 138 per UDP
per controllare le porte si può utilizzare netstat
sudo netstat -tulpn | egrep "samba|smbd|nmbd|winbind" tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 6730/smbd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 6730/smbd tcp6 0 0 :::445 :::* LISTEN 6730/smbd tcp6 0 0 :::139 :::* LISTEN 6730/smbd udp 0 0 192.168.77.255:137 0.0.0.0:* 504/nmbd udp 0 0 192.168.77.146:137 0.0.0.0:* 504/nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 504/nmbd udp 0 0 192.168.77.255:138 0.0.0.0:* 504/nmbd udp 0 0 192.168.77.146:138 0.0.0.0:* 504/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 504/nmbd
Configurare samba
Adesso con il demone attivo sarà possibile utilizzare il servizio di condivisione samba. Per poter accedere alle cartelle condivise è preferibile creare gli utenti samba, impostandone la specifica password.
Creare gli utenti samba
Per aggiungere un utente samba è necessario disporre di un utente locale.
Un utente locale esistente può essere aggiunto al database degli users samba con smbpasswd:
smbpasswd -a username
:~$ sudo smbpasswd -a mira New SMB password: Retype new SMB password: Added user mira.
Se si desidera creare un nuovo utente da usare come user samba si può generare un nuovo utente locale con adduser/ useradd impostare la password e poi aggiungerlo a samba ( altre informazioni su Gestire gli users in Linux da terminale ). adduser più intereattivo è ad oggi preferibile.
maurizio@debian11:~$ sudo adduser betta
Adding user `betta' ...
Adding new group `betta' (1001) ..
Adding new user `betta' (1001) with group `betta' ...
Creating home directory `/home/betta' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for betta
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
creato il nuovo user impostare la password al solito
maurizio@debian11:~$ sudo passwd betta
New password:
Retype new password:
passwd: password updated successfully
quindi impostare anche la password per samba con il solito
maurizio@debian11:~$ sudo smbpasswd -a betta New SMB password: Retype new SMB password: Added user betta.
samba condividere cartelle
Per gestire le risorse da condividere con samba editare il file di configurazione smb.conf.
sudo nano /etc/samba/smb.conf
La condivisione delle cartelle degli users è già predisposta ed è definita nella sezione [homes]
che è ben commentata
:~$ nano /etc/samba/smb.conf ... [homes] comment = Home Directories browseable = no # By default, the home directories are exported read-only. Change the # next parameter to 'no' if you want to be able to write to them. read only = yes # File creation mask is set to 0700 for security reasons. If you want to # create files with group=rw permissions, set next parameter to 0775. create mask = 0700 ...
di default le home directories sono esportate in sola lettura
read only = yes
come indicato nel commento modificare yes per consentire allo user l’accesso anche in scrittura
read only = no
Organizzazione del blocco [homes] usata in passato e relativi parametri
...
[homes] comment = Home Directories browseable = no writable = yes valid users = @users create mask = 0700 directory mask = 0700
- browseable definisce se lo share è mostrato ( yes o not ) default = yes
- hide dot file nasconde o mstra i files nascosti ( yes o not ) default = yes
- path percorso directory share – da condividere
- create mask default 0664 per settare i permessi sui nuovi file
- directory mask default 0775 permessi da assegnare alle directory
- guest ok permette quest access default = no
- valid users quali users hanno il permesso di accedere default tutti gli users
- invalid users
- read only rende uno share in sola lettura dafult = yes
- writeable rende uno share read/write default = no
- read list elenco degli users o gruppi con il permesso di lettura
- write list elenco degli users o gruppi con il pemesso di scrittura
Aggiungere una condivisione pubblica
Per inserire una condivisione pubblica che non richiede username e password creare una dir pubblica esempio /srv/public:
sudo mkdir /srv/public
Assegnare i permessi di lettura scrittura ed esecuzione all’utente nobody con
sudo setfacl -R -m "u:nobody:rwx" /srv/public/
generare l’opportuno blocco per la condivizione in samba
[public]
comment = spazio pubblico no user non pass
dir path = /srv/public
browseable = yes
writable = yes
guest ok = yes
Per inserire nuovi share inserire blocchi analoghi al blocco users o al precedente facendo attenzione ai parametri e ai permessi:
[Biblioteca]
comment = Biblioteca dir
path = /media/Biblioteca
create mask = 0660
directory mask = 0770
La directory Biblioteca per condividere i files potrebbe richiedere l'assegnazione di opportuno proprietario (chown) e anche di opportuni permessi (chmod) :
mkdir -p /media/Biblioteca chown -R root:users /media/Biblioteca/ per i permessi di scrittura modificare i permessi con chmod chmod -R ug+rwx,o+rx-w /media/Biblioteca/
A proposito la directory Biblioteca potrebbe essere anche un mount remoto sshfs, esempio:
sudo sshfs root@192.168.77.109:/media/sda5 /media/Biblioteca
per verificare che non ci siano errori di sintassi nel file smb.conf e possibilie utilizzare il comando:
testparm -s /etc/samba/smb.conf
Uno schema dei numeri usati per precisare i permessi: cioè un decimale per ciascuna rappresenzione binaria delle tre classi di utente, è presente in fondo al post Comandi Linux: elencare, cercare e gestire files e directories
Riavviare samba
Quando si apportano modifiche al file smb.conf è necessario riavviare samba con :
systemctl restart smbd nmbd
volendo consentita anche la vecchia sintassi System V
service smbd restart
Test della connessione samba
Per testare una connessione samba si può utilizzare smbclient:
maurizio@debian11:~/mnt/condivisione/CASA$ smbclient -L localhost
Enter WORKGROUP\maurizio's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
public Disk public share, no need to enter username and password
Biblioteca Disk Biblioteca
IPC$ IPC IPC Service (Samba 4.13.13-Debian)
altro esempio di vecchio test smbclient:
:~$ smbclient -L 192.168.1.146 -N
Anonymous login successful
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (ubuSer1210 server (Samba, Ubuntu))
scambio-temp Disk condividi files e archivio temporaneo
archivio Disk Biblioteca - archivio
print$ Disk Printer Drivers
Mount da teminale di una connessione samba
Il mounting da teminale di una cartella remota condivisa utilizza smb avviene con un comando del tipo:
mount -t cifs -o username=bepi //192.168.1.153/codice /media/biblioteca
oppure la forma contratta
mount.cifs -o user=bepi //192.168.1.153/codice /media/biblioteca
e possibile utlizzare l’opzione password= o pass= tuttavia, se non si ha la nìecessità di un mount permanente, meglio digitare la password solo su richiesta.
Esempio comunque di montaggio smb con inserimento della password
mount -t cifs -o user=bepi,pass=’%my.pass.’ //192.168.77.7/biblio /mnt/biblio
o
mount -t smbfs -o username=bepi,password=’%my.pass.’ //192.168.77.7/biblio /mnt/biblio
Risorse nel blog:
- samba-in-debian-buster-11-via-terminal
- Samba in Ubuntu con nautilus share
- ssh tunnel per accedere a servizi http, postgresql, samba in remoto
- Documentazione Gentoo Linux — Introduzione a Samba, Parte 3
- Come controllare che un servizio (service) sia in esecuzione in linux
- fstab : file system table – mtab : mounted file system table
- Making Windows XP join a SAMBA domain in 5 minutes — Rudd-O.com in English
- Samba in debian squeeze e ubuntu linux via terminale
- http://www.soluzionilinux.com/samba-4-as-active-directory-domain-controller/