Samba: installazione di un fileserver gestito con gruppi di accesso locali

Questo articolo illustra come ottenere un’installazione coerente di un fileserver Linux basato su SAMBA, che amministri l’accesso alle condivisioni attraverso utenti che appartengano a gruppi di sistema, gestiti in una forma riconoscibile.
Gli utenti, pur essendo a tutti gli effetti parte del sistema, avranno permessi di accesso unicamente attraverso il protocollo CIFS, gestito dalle macchine Microsoft Windows.

Installazione di SAMBA

La procedura descritta fa riferimento al sistema operativo Ubuntu Server 10.4, ed all’ultima release stabile disponibile in esso per il progetto libero SAMBA, la versione 3.4.7.
L’installazione per Ubuntu ed i sistemi Debian, può essere effettuata come di consueto:

# apt-get install samba

mentre nei sistemi che fanno uso di rpm e di yum il comando sarà invece:

# yum install samba

Prima di effettuare qualsiasi operazione è bene salvare il file di configurazione originale di SAMBA:

# cd /etc/samba
# mv smb.conf smb.conf.org

nel corso dell’articolo partiremo da un file completamente vuoto, per sottolineare come sia possibile impostare pochi parametri per essere operativi nel minor tempo possibile.

Configurazione di SAMBA (impostazioni globali)

Le configurazioni descritte fanno hanno come presupposto il fatto che l’utente con cui si sta operando all’interno del sistema sia “root”. Attraverso l’editor preferito sarà possibile creare un nuovo file smb.conf:

# sudo su -
# vi /etc/samba/smb.conf

All’interno del quale dovranno essere impostati i seguenti parametri:

[global]
   security = user
   workgroup = NETWORK.LOCAL
   server string = %h server (Samba, Ubuntu) 
 
   wins support = yes 
   dns proxy = no 
 
   log file = /var/log/samba/log.%m 
   max log size = 1000 
   syslog = 0 
 
   encrypt passwords = true 
   passdb backend = tdbsam
 
   directory mask = 2770 
   create mask = 0660

Le configurazioni indicano che il server è di tipo standalone (security = user), ossia non collegato a sistemi di autenticazione centralizzati. Il server è parte del gruppo di lavoro “NETWORK.LOCAL” (opzione workgroup, che andrà modificata a seconda delle impostazioni relative propria rete Microsoft Windows) e funzionerà da server WINS (wins support = yes) in modo da gestire la risoluzione dei nomi Microsoft Windows per la rete, ma non controllerà però i nomi effettuando query sul server dns di sistema (dns proxy = no).
Il sistema registrerà un log per ciascuna macchina che si collegherà (log file = /var/log/samba/log.%m), tale log non potrà eccedere un megabyte di grandezza (max log size = 1000). Inoltre nessuna informazione verrà registrata nel file /var/log/syslog (syslog = 0), il file di log generale relativo al sistema. Tutte le informazioni relative all’esecuzione del demone saranno reperibili all’interno del file /var/log/samba/log.smbd.
Il sistema di autenticazione cripterà le password (encrypt passwords) ed utilizzerà il backend tdbsam (opzione passdb backend), ossia il database locale.
Le ultime due opzioni indicate definiscono la maschera attraverso la quale verranno create le directory (directory mask = 2770) ed i file (create mask = 0660). Le directory verranno quindi create con permessi di lettura, scrittura ed esecuzione per il proprietario ed il gruppo, mentre per tutti gli altri saranno inaccessibili. I file verranno creati con i medesimi permessi ad eccezione dell’esecuzione.
Particolarità aggiuntiva della modalità di creazione delle cartelle è quella di possedere il bit setgid (http://it.wikipedia.org/wiki/Setuid_e_setgid) che impone l’appartenenza al gruppo della cartella padre per tutti i file e le cartelle create al suo interno. Questo significa che chiunque appartenga al gruppo della cartella padre potrà creare file e cartelle al suo interno, tali file e cartelle apparterranno al gruppo della cartella padre. In questo modo i permessi specifici di accesso per i gruppi definiti nelle cartelle governeranno la totalità degli accessi.

Configurazione di un gruppo

Ciascun gruppo di accesso verrà nominato in questo modo:

# groupadd samba_rwx_Amministrazione

Il criterio con cui i gruppi vengono creati e nominati è ottenibile scomponendo il nome attraverso i caratteri “_” (underscore), dove “samba” indica che il gruppo è inerente al servizio samba, “rwx” indica il tipo di accesso che può essere appunto “rwx” (permessi di lettura e scrittura) o “rx” (sola lettura), mentre “Amministrazione” indica il nome della condivisione a cui il gruppo si riferisce.

Aggiunta di un’utenza

Ogni utenza creata nel sistema che farà riferimento al servizio samba, avrà come gruppo primario samba, con identificativo “999”, creato con il seguente comando:

# groupadd -g 999 samba

In questo modo, la separazione degli ambiti operativi sarà oltre che configurata nel sistema, anche ben visibile.
Per aggiungere un’utenza al sistema i passi da compiere sono quindi i seguenti:

  1. Lanciare il comando:
    # useradd -g samba -s /bin/false -d /home/user1 -c "Utente di test" user1

    In cui user1 rappresenta il nome attraverso il quale l’utente dovrà accedere alle condivisioni. A user1 viene assegnato il gruppo primario “samba” (-g samba), una shell di login nulla in modo che non possa mai effettuare il login nel sistema (-s /bin/false) ed una breve descrizione dell’utenza (-d, generalmente nome e cognome, oppure un indicativo della funzione svolta).

  2. L’utente creato va poi aggiunto al database locale SAMBA, attraverso questo comando:
    # smbpasswd -a user1

    indicando per due volte la password scelta, che può essere anche omessa nel caso in cui lo si decida (è sempre consigliabile inserirne una).

  3. L’utente va quindi aggiunto ad uno dei gruppi disponibili. Aggiungere utenti al gruppo è possibile con il seguente comando:
    # adduser user1 samba_rwx_Amministrazione

Per controllare quali utenti appartengono al gruppo è sufficiente digitare il seguente comando:

# cat /etc/group | grep "samba_rwx_Amministrazione"
samba_rwx_Amministrazione:user1,user2,user3

Mentre per controllare un singolo utente a quali gruppi appartiene, il comando sarà invece:

# groups user1
user1 : samba samba_rwx_Amministrazione

Aggiunta di una condivisione

Ciascuna condivisione fa riferimento ad un path locale, nel caso descritto viene creata una cartella /share:

# mkdir /share

al di sotto della quale tutte le cartelle condivise verranno create:

1
2
3
# mkdir /share/Amministrazione
# chgrp samba_rwx_Amministrazione /share/Amministrazione
# chmod 2770 /share/Amministrazione

Queste operazioni andranno eseguite per ciascuna nuova condivisione creata e si riassumono come segue:

  1. Creazione effettiva della cartella;
  2. Assegnazione della cartella al gruppo creato;
  3. Impostazione del permesso setgid (vedi sopra) ricorsivo sulla cartella appena creata;

Le condivisioni verranno definite nel file di configurazione smb.conf in coda alle dichiarazioni globali, in un formato simile al seguente:

[Amministrazione] 
comment = Amministrazione 
read only = no 
write list = @samba_rwx_Amministrazione
read list = 
path = /share/Amministrazione

Il codice illustrato definisce una condivisione denominata “Amministrazione” a cui possono accedere in scrittura nella directory “/share/Amministrazione” unicamente gli utenti appartenenti al gruppo “samba_rwx_Amministrazione”.

Pertanto, per aggiungere una condivisione sarà quindi sufficiente eseguire la creazione e l’assegnazione dei permessi come descritto sopra ed inserire all’interno del file /etc/samba/smb.conf una dichiarazione seguendo il modello indicato:

[<NOMECONDIVISIONE>] 
comment = <Descrizione condivisione>
read only = no 
write list = @<gruppo con permessi di scrittura>
read list = @<gruppo con permessi di lettura>
path = <path della condivisione>

Nel caso l’accesso venga deciso unicamente in lettura o unicamente in scrittura, è possibile omettere le righe relative (write list o read list) dalla dichiarazione.

Attivazione delle configurazioni

Per applicare le nuove configurazioni, il servizio SAMBA necessita di essere ricaricato:

# service smbd reload

Da questo momento in poi sarà possibile utilizzare una qualsiasi macchina Microsoft Windows per testare l’effettivo successo delle configurazioni impostate.

Note

Quanto descritto consente di configurare SAMBA affinché possa interagire con client o server Microsoft Windows come se fosse un file e print server Microsoft.
E’ possibile variare le configurazioni in modo che SAMBA agisca da Primary Domain Controller (PDC), Backup Domain Controller o prendere parte ad un dominio Active Directory.
Sul portale tecnico sono disponibili diversi articoli che approfondiscono questi argomenti:

Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (1 di 6)
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (2 di 6)
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (3 di 6)
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (4 di 6)
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (5 di 6)
Realizzare un Primary Domain Controller con SAMBA, Openldap e smbldap-tools : (6 di 6)

Samba e Active Directory (1 di 3): diventare parte di un Dominio
Samba e Active Directory (2 di 3): interrogare il dominio
Samba e Active Directory (3 di 3): configurare pam per l’autenticazione locale

In attesa quindi di saggiare le meraviglie dell’annunciato SAMBA 4, che conterrà un motore interno volto ad eguagliare l’efficienza e la funzionalità di Microsoft Active Directory, è chiaro come sia già possibile adottare SAMBA in ambiti produttivi di svariato genere, con successo, e senza costi di licenza.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.