Ubuntu: guida rapida alla configurazione del server Samba

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 thoughts on “Ubuntu: guida rapida alla configurazione del server Samba

  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 //pcwindows/cartella_master /mnt/backup
    # tar -cvf backup.tar /mnt/backup/*.jpg
    # mv backup.tar /mnt/ntfs

    tutto fattibile in pochissime righe e lasciando a te se montare la share samba di volta in volta o lasciarla sempre montata. quando hai testato lo script lo aggiungi al crontab di un utente con privilegi sufficienti a poter leggere l’ origine e a poter scrivere sulla destinazione.

    una perplessità … perchè la directory che deve ospitare i backup sulla macchina linux deve utilizzare NTFS? direi che se proprio vuoi un file system nativo Windows ma usabile anche da *nix, optimum rimanga ancora FAT32.

  7. ciao…
    non riesco a configurare il file smb.conf, da terminale riesco ad aprire il file ma ci sono talmente tante informazioni che nn so dove mettere le tue informazioni… poi ho delle voci diverse… vorrei configurare il file per far dialogare il mio portatitile con ubuntu 8.10 con il pc fisso con windows xp…
    quando entro in rete da ubuntu , riesco a vedere la rete windows e anche il pc, ma cliccandoci sopra nn vedo nulla… boh…
    se allego il contenuto del file smb.conf mi potete dare una dritta su cosa devo cambiare?? grazie…

    #
    # Sample configuration file for the Samba suite for Debian GNU/Linux.
    #
    #
    # This is the main Samba configuration file. You should read the
    # smb.conf(5) manual page in order to understand the options listed
    # here. Samba has a huge number of configurable options most of which
    # are not shown in this example
    #
    # Some options that are often worth tuning have been included as
    # commented-out examples in this file.
    # – When such options are commented with “;”, the proposed setting
    # differs from the default Samba behaviour
    # – When commented with “#”, the proposed setting is the default
    # behaviour of Samba but the option is considered important
    # enough to be mentioned here
    #
    # NOTE: Whenever you modify this file you should run the command
    # “testparm” to check that you have not made any basic syntactic
    # errors.
    # A well-established practice is to name the original file
    # “smb.conf.master” and create the “real” config file with
    # testparm -s smb.conf.master >smb.conf
    # This minimizes the size of the really used smb.conf file
    # which, according to the Samba Team, impacts performance
    #

    #======================= Global Settings =======================

    [global]

    ## Browsing/Identification ###

    # Change this to the workgroup/NT-domain name your Samba server will part of
    workgroup = WORKGROUP

    # server string is the equivalent of the NT Description field
    server string = %h server (Samba, Ubuntu)

    # Windows Internet Name Serving Support Section:
    # WINS Support – Tells the NMBD component of Samba to enable its WINS Server
    # wins support = no

    # WINS Server – Tells the NMBD components of Samba to be a WINS Client
    # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    ; wins server = w.x.y.z

    # This will prevent nmbd to search for NetBIOS names through DNS.
    dns proxy = no

    # What naming service and in what order should we use to resolve host names
    # to IP addresses
    ; name resolve order = lmhosts host wins bcast

    #### Networking ####

    # The specific set of interfaces / networks to bind to
    # This can be either the interface name or an IP address/netmask;
    # interface names are normally preferred
    ; interfaces = 127.0.0.0/8 eth0

    # Only bind to the named interfaces and/or networks; you must use the
    # ‘interfaces’ option above to use this.
    # It is recommended that you enable this feature if your Samba machine is
    # not protected by a firewall or is a firewall itself. However, this
    # option cannot handle dynamic or non-broadcast interfaces correctly.
    ; bind interfaces only = yes

    #### Debugging/Accounting ####

    # This tells Samba to use a separate log file for each machine
    # that connects
    log file = /var/log/samba/log.%m

    # Cap the size of the individual log files (in KiB).
    max log size = 1000

    # If you want Samba to only log through syslog then set the following
    # parameter to ‘yes’.
    # syslog only = no

    # We want Samba to log a minimum amount of information to syslog. Everything
    # should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
    # through syslog you should set the following parameter to something higher.
    syslog = 0

    # Do something sensible when Samba crashes: mail the admin a backtrace
    panic action = /usr/share/samba/panic-action %d

    ####### Authentication #######

    # “security = user” is always a good idea. This will require a Unix account
    # in this server for every user accessing the server. See
    # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
    # in the samba-doc package for details.
    # security = user

    # You may wish to use password encryption. See the section on
    # ‘encrypt passwords’ in the smb.conf(5) manpage before enabling.
    encrypt passwords = true

    # If you are using encrypted passwords, Samba will need to know what
    # password database type you are using.
    passdb backend = tdbsam

    obey pam restrictions = yes

    # This boolean parameter controls whether Samba attempts to sync the Unix
    # password with the SMB password when the encrypted SMB password in the
    # passdb is changed.
    unix password sync = yes

    # For Unix password sync to work on a Debian GNU/Linux system, the following
    # parameters must be set (thanks to Ian Kahan < for
    # sending the correct chat script for the passwd program in Debian Sarge).
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

    # This boolean controls whether PAM will be used for password changes
    # when requested by an SMB client instead of the program listed in
    # ‘passwd program’. The default is ‘no’.
    pam password change = yes

    # This option controls how unsuccessful authentication attempts are mapped
    # to anonymous connections
    map to guest = bad user

    ########## Domains ###########

    # Is this machine able to authenticate users. Both PDC and BDC
    # must have this setting enabled. If you are the BDC you must
    # change the ‘domain master’ setting to no
    #
    ; domain logons = yes
    #
    # The following setting only takes effect if ‘domain logons’ is set
    # It specifies the location of the user’s profile directory
    # from the client point of view)
    # The following required a [profiles] share to be setup on the
    # samba server (see below)
    ; logon path = \\%N\profiles\%U
    # Another common choice is storing the profile in the user’s home directory
    # (this is Samba’s default)
    # logon path = \\%N\%U\profile

    # The following setting only takes effect if ‘domain logons’ is set
    # It specifies the location of a user’s home directory (from the client
    # point of view)
    ; logon drive = H:
    # logon home = \\%N\%U

    # The following setting only takes effect if ‘domain logons’ is set
    # It specifies the script to run during logon. The script must be stored
    # in the [netlogon] share
    # NOTE: Must be store in ‘DOS’ file format convention
    ; logon script = logon.cmd

    # This allows Unix users to be created on the domain controller via the SAMR
    # RPC pipe. The example command creates a user account with a disabled Unix
    # password; please adapt to your needs
    ; add user script = /usr/sbin/adduser –quiet –disabled-password –gecos “” %u

    ########## Printing ##########

    # If you want to automatically load your printer list rather
    # than setting them up individually then you’ll need this
    # load printers = yes

    # lpr(ng) printing. You may wish to override the location of the
    # printcap file
    ; printing = bsd
    ; printcap name = /etc/printcap

    # CUPS printing. See also the cupsaddsmb(8) manpage in the
    # cupsys-client package.
    ; printing = cups
    ; printcap name = cups

    ############ Misc ############

    # Using the following line enables you to customise your configuration
    # on a per machine basis. The %m gets replaced with the netbios name
    # of the machine that is connecting
    ; include = /home/samba/etc/smb.conf.%m

    # Most people will find that this option gives better performance.
    # See smb.conf(5) and /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/speed.html
    # for details
    # You may want to add the following on a Linux system:
    # SO_RCVBUF=8192 SO_SNDBUF=8192
    # socket options = TCP_NODELAY

    # The following parameter is useful only if you have the linpopup package
    # installed. The samba maintainer and the linpopup maintainer are
    # working to ease installation and configuration of linpopup and samba.
    ; message command = /bin/sh -c ‘/usr/bin/linpopup “%f” “%m” %s; rm %s’ &

    # Domain Master specifies Samba to be the Domain Master Browser. If this
    # machine will be configured as a BDC (a secondary logon server), you
    # must set this to ‘no’; otherwise, the default behavior is recommended.
    # domain master = auto

    # Some defaults for winbind (make sure you’re not using the ranges
    # for something else.)
    ; idmap uid = 10000-20000
    ; idmap gid = 10000-20000
    ; template shell = /bin/bash

    # The following was the default behaviour in sarge,
    # but samba upstream reverted the default because it might induce
    # performance issues in large organizations.
    # See Debian bug #368251 for some of the consequences of *not*
    # having this setting and smb.conf(5) for details.
    ; winbind enum groups = yes
    ; winbind enum users = yes

    # Setup usershare options to enable non-root users to share folders
    # with the net usershare command.

    # Maximum number of usershare. 0 (default) means that usershare is disabled.
    ; usershare max shares = 100

    # Allow users who’ve been granted usershare privileges to create
    # public shares, not just authenticated ones
    usershare allow guests = yes

    #======================= Share Definitions =======================

    # Un-comment the following (and tweak the other settings below to suit)
    # to enable the default home directory shares. This will share each
    # user’s home directory as \\server\username
    ;[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

    # Directory creation mask is set to 0700 for security reasons. If you want to
    # create dirs. with group=rw permissions, set next parameter to 0775.
    ; directory mask = 0700

    # By default, \\server\username shares can be connected to by anyone
    # with access to the samba server. Un-comment the following parameter
    # to make sure that only “username” can connect to \\server\username
    # This might need tweaking when using external authentication schemes
    ; valid users = %S

    # Un-comment the following and create the netlogon directory for Domain Logons
    # (you need to configure Samba to act as a domain controller too.)
    ;[netlogon]
    ; comment = Network Logon Service
    ; path = /home/samba/netlogon
    ; guest ok = yes
    ; read only = yes
    ; share modes = no

    # Un-comment the following and create the profiles directory to store
    # users profiles (see the “logon path” option above)
    # (you need to configure Samba to act as a domain controller too.)
    # The path below should be writable by all users so that their
    # profile directory may be created the first time they log on
    ;[profiles]
    ; comment = Users profiles
    ; path = /home/samba/profiles
    ; guest ok = no
    ; browseable = no
    ; create mask = 0600
    ; directory mask = 0700

    [printers]
    comment = All Printers
    browseable = no
    path = /var/spool/samba
    printable = yes
    guest ok = no
    read only = yes
    create mask = 0700

    # Windows clients look for this share name as a source of downloadable
    # printer drivers
    [print$]
    comment = Printer Drivers
    path = /var/lib/samba/printers
    browseable = yes
    read only = yes
    guest ok = no
    # Uncomment to allow remote administration of Windows print drivers.
    # Replace ‘ntadmin’ with the name of the group your admin users are
    # members of.
    ; write list = root, @ntadmin

    # A sample share for sharing your CD-ROM with others.
    ;[cdrom]
    ; comment = Samba server’s CD-ROM
    ; read only = yes
    ; locking = no
    ; path = /cdrom
    ; guest ok = yes

    # The next two parameters show how to auto-mount a CD-ROM when the
    # cdrom share is accesed. For this to work /etc/fstab must contain
    # an entry like this:
    #
    # /dev/scd0 /cdrom iso9660 defaults,noauto,ro,user 0 0
    #
    # The CD-ROM gets unmounted automatically after the connection to the
    #
    # If you don’t want to use auto-mounting/unmounting make sure the CD
    # is mounted on /cdrom
    #
    ; preexec = /bin/mount /cdrom
    ; postexec = /bin/umount /cdrom

  8. se ho capito bene, usi il portatile con linux come client e tenti di accedere alle risorse condivise dal PC con Windows XP (che quindi è il “server”). Direi che il problema quindi non sta nel tuo smb.conf, ma in qualche impostazione di Windows (hai risorse condivise? firewall? ecc).

  9. esatto… uso il portatile con ubuntu come client e il pc desktop con windows xp come server… il firewall di windows è disabilitato e ho cartelle condivise (quelle di default di windows e il cd rom)..
    cmq da windows riesco a vedere le cartelle condivise di ubuntu ma nn viceversa… bisogna configurare il file conf di samba??

  10. Ciao ho fatto buon uso della tua guida per creare un file server nel mio ufficio.
    Ububtu server 8.10 installazione minimale
    Ho montato nella cartella /home/public il secondo hard disc /dev/sda1 per il resto ho fatto come dici tu
    questo disco ha un unica partizione fat32 e il sistema la monta seza segnalare nessun errore.
    ora dai computer winxp vedo il computer ubuntu e le cartelle che esso contiene (ma tutte vuote)
    se provo a scriverci dendro un file non riesco e mi da il seguente messaggio impossibile copiare accesso negato.
    che posso fare ???
    ho un anomalia quando imposto i permessi in “preparazione del sistema” $ sudo chmod -R /home/public non mi da nessun messaggio
    mentre $ sudo chown -R utente.utente /home/public mi dice “operation nnot permitted per tuttel lecartelle che ho dentro il mio disco.
    Grazie comunque per la guida davvero facile anche per un principiante come me

    1. credo il problema risieda nei permessi con cui viene montato il filesystem di sda1 all’ interno di /home/public. Viene montato da fstab? Con che permessi?

      ti ringrazio per i ringraziamenti, fanno sempre piacere 🙂

  11. Intanto complimenti per la guida, semplice e veloce.
    Piccolo problema, vediamo se riuscite ad aiutarmi:
    Ho installato ubuntu server 8 e ho condiviso diverse cartelle con gli altri pc windows, tutto funziona a meraviglia con gli spostamenti manuali dei files ed i permessi.

    Ma quando devo aggiornare il programma gestionale che risiede sulla cartella del server ubuntu tramite l’aggiornamento che mi invia la casa madre in maniera automatica in fase di aggiornamento mi dice impossibile aprire il file.

    E’ come se non avessi più le autorizzazioni, cosa posso fare?

    Ah, ultima precisazione, questo accade solo con 2 o 3 files che se elimino manualmente ogni volta lui ricrea e sistema.

    Grazie in anticipo

  12. grazie x i compliments, fan sempre piacere.

    per quel che riguarda il tuo problema, il gestionale accede direttamente alla share sul server samba? come sono i permessi dei files scritti dal gestionale e quelli dei files creati a mano? giusto per capire in che direzione andare

  13. Ciao Paolo
    la guida è essenziale ed efficace, ogni volta che ho dovuto installare e configurare samba finora ho dovuto fare a capocciate.
    Comunque credo che si paghi lo scotto con la scalabilità della condivisione, e se sì puoi spiegarmi per favore come rimediare?
    Adesso ho regolarmente accesso alla home dell’utente apposito di samba, ma l’utente “sprivilegiato” e senza password appositamente creato, avrà accesso ad un volume truecrypt su un disco esterno montato ad esempio su /media/truecrypt1? Ovvero aggiungendo una condivisione in smb.conf identica alla prima ma con path=/media/truecrypt1 la cosa funzionerà?

  14. vado a naso, ma direi che se l’utente di sistema ha accesso a quel mountpoint allora lo avrà necessariamente anche quello usato da samba, se coincidono. altrimenti è necessario creare un account apposito.

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.