samba-logo-v1Questa brevissima guida ha l’ obiettivo di guidare alla configurazione del server Samba per la distribuzione Ubuntu GNU/Linux, anche se la procedura è del tutto simile per qualsiasi altra distribuzione (a parte l’ installazione vera e propria dei pacchetti). Sulla falsa riga di quella relativa all’ ambiente LAMP, le istruzioni sono semplici e lineari: per dettagli ed approfondimenti vi rimando alla smisurata letteratura sull’ argomento.

Di seguito vedremo come configurare il server Samba per creare una condivisione pubblica: accessibile in lettura e scrittura a tutti i client della rete locale, quindi.

UPDATE: corrette alcune incongruenze nella scelta/uso del nome utente, inseriti parametri di sicurezza per la creazione dell’ utente.

Installazione di Samba

Per prima cosa installiamo il software necessario:

$ sudo apt-get install samba smbfs

Preparazione del sistema

Samba condivide con il sistema su cui gira il database degli utenti: tutti gli utenti Samba devono essere necessariamente anche utenti GNU/Linux. Creiamo ora l’ utente con cui tutti i client accederanno alla condivisione e specifichiamo la sua directory home, che adduser provvederà a creare (se non esiste) e che sarà la nostra condivisione Samba. 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 interattivo. Questo per ragioni di sicurezza, come accade per gli account di sistema.

$ sudo adduser utente --home=/home/public --shell=/bin/false --disabled-password

L’ utente è stato creato correttamente (come possiamo verificare controllando il file /etc/passwd), ma non è associato ad alcuna password UNIX e non potrà fare login al sistema: non ne avremo bisogno e dormiremo sonni più tranquilli.

Impostiamo ora i permessi sulla directory da condividere:

$ sudo chmod -R 0700 /home/public $ sudo chown -R utente.utente /home/public

Configurazione di Samba – sezione [Global]

Il file di configurazione del server Samba è /etc/samba/smb.conf ed è suddiviso in diverse sezioni.

Browsing/Identification

Questa sezione, posta all’ inizio del file di configurazione, controlla il comportamento generale del server Samba. A noi interessano alcune voci in particolare: workgroup e server string. La prima indica a quale gruppo Windows apparterrà il nostro server, e la seconda fornirà il nome con cui sarà identificato nella rete Windows.

Un esempio:

# Change this to the workgroup/NT-domain name your Samba server will part of workgroup = UFFICIO # server string is the equivalent of the NT Description field server string = File Server

Authentication

Questa sezione regola il modo con cui Samba controllerà e governerà i permessi agli utenti: chi può fare cosa in parole povere. Ci interessano alcune voci: security e guest account.
Per prima cosa abilitiamo la sicurezza a livello di condivisione, che ci permette di specificare caso per caso i diritti:

#security = user security = share

Ora definiamo l’ utente con il quale tutti i client accederrano alla risorsa condivisa:

obey pam restrictions = yes guest account = utente invalid users = root

Questa impostazione non necessita di alcuna configurazione sui client: essi accederanno alla risorsa senza dover inserire alcuna login: sarà Samba a mappare l’ utente corretto.

Configurazione della condivisione

Ora passiamo alla fase finale della configurazione: creiamo la condivisione della directory.
Spostiamo alla fine del file di configurazione e creiamo una nuova sezione così strutturata:

[Pubblica] comment = Risorsa pubblica condivisa path = /home/public read only = no guest ok = yes guest only = yes create mask = 0600 directory mask = 0700

Salviamo il file e riavviamo Samba con:

$ sudo /etc/init.d/samba restart

26 risposte

  1. che bello non aver bisogno di samba nella mia rete, comunque questa pagina entra di diritto nei miei bookmarks su Linux, potrebbe tornare utile.

    Che fine ha fatto il verde? era bellissimo 🙁

  2. mhh bella guida ma non riesco a fare funzionare samba ( sono gnubbo) Ho seguito passo passo la guida ma se provo a connettermi da win mi da accesso negato e contattare l’amministratore e invece da un altra macchina con ubuntu non vede proprio la cartella condivisa 🙁

  3. hai controllato per benino *tutti* i permessi (sia di files che di cartelle) e di aver impostato tutto correttamente? so che è una risposta banale, ma ti assicuro che quanto riportato nella guida è pensato appositamente per essere applicabile con il minor numero possibile di passaggi e variazioni.

  4. Ciao, ho una macchina con 2 disk , hda monta ext3 -ubuntu , hdb NTFS,
    il disco ntfs mi serve per fare il back up di una macchina windows xp (che uso per lavorare).
    In due parole devo fare la sincronia di 2 cartelle su 2 macchine diverse in rete lan.
    come software per il sync ho provato krusader (che ho trovato fantastico e veloce),
    samba e Ntfs-config sono configurati ( manualmente riesco a fare l’operazione che voglio)
    ma con krusader non riesco a vedere la rete lan, sul menù creare rete mi dà solo ftp e se cerco la lan mi dice che non è supportata— Quacuno ha una risposta o soluzione?
    oppure un altro metodo per fare il sync?
    io ho ubuntu 7.04 Feisty e krusader 1.8 beta (ho provato anhe 1.7 stable version)
    grazie, andrea
    se volete potete rispondermi anche su info@k6blue.it

  5. Il software che utilizzo è krusader 1.8 beta, se ne conoscete altri sparate, per ora uso un software che gira su win xp (allwaysync) e mi fà il backup sul disco ntfs montato sulla macchina linux.
    Però mi piacerebbe trovare un bel software da utilizzare con linux che si faccia i backup automatici..
    spiego il sistema ::

    PC 1 = win xp PC 2 = UBUNTU 7.04 Feisty
    Disco NTFS Disco1 Ext3 – I – Disco 2 NTFS
    Cartella Mster I Cartella Slave Backup

    Il Mio scopo è :
    Software installato su Ubuntu ogni (x Tempo) và sulla cartella Master (Win XP) e ne fà il backup sulla cartella Slave (NTFS) sulla macchina linux!!
    ma proprio non riesco, premettendo che non sono un programmatore ma un grafico!
    chi avesse una soluzione oltre ad essere eternamente ringraziato vincerà un servizio fotografico o video omaggio!! hahahah!
    grazie in anticipo
    Andrea
    K6Blue studio

  6. Ciao.

    Se non ho capito male, ti basta fare uno script per la bash che faccia qualcosa del genere:

    1) devi montare la cartella Master del PC WinXP su Linux, tramite Samba;
    2) fai un bel tar di tutto quello che vuoi backupare di quella share nel file system che vuoi.

    esempio stupidissimo …

    # mount -t smb # tar -cvf backup.tar /mnt/backup const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf(){i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});