Premier Training & Business Partner Red Hat

Installazione e Configurazione Samba su RHEL / CentOS 6

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo parleremo della condivisione di file tra macchine Linux e Windows tramite Samba.

Linux-Samba-np

Samba è il progetto Open Source che fornisce la condivisione di file e stampanti in una rete composta da host windows e host linux.

Esso sfrutta il protocollo SMB Common Internet File System (CIFS) e garantisce l’interoperabilità per i servizi di condivisione.

Iniziamo ad installarlo su RHEL 6 o CentOS 6:

# yum install samba

smb

Il file di configurazione su cui andremo a lavorare sarà smb.conf che si trova nel percorso /etc/samba quindi per precauzione possiamo farne una copia:

# cd /etc/samba
# cp smb.conf smb.conf.orig

Andiamo a vedere la struttura di questo file;
Nella sezione Global Setting troviamo alcuni parametri cui possiamo personalizzare:

  • workgroup: Definisce il nome del gruppo di lavoro in cui la macchina Samba sarà inserita
  • server string: Definisce la descrizione della macchina
  • netbios name: Definisce il nome da dare alla macchina
  • interfaces: Definisce su quale interfacce di rete Samba si metterà in ascolto.
  • hosts allow: Definisce gli host che possono accedere alla macchina
  • security: Di default è user ossia indica che la risorsa condivisa e il suo contenuto siano disponibili solamente dopo la corretta autenticazione.
  • passdb backend = tdbsam: Definisce che il sistema dia autenticazione cripterà le password e utilizzerà il database locale

 

Andiamo ora a vedere quali sono i parametri per effettuare le varie condivisioni, spostandosi alla fine del file:

  • [nome condivisione] : Definisce il nome della risorsa condivisa
  • path : Definisce il percorso della risorsa
  • comment : Possiamo affiancare al nome della risorsa anche una breve descrizione del contenuto
  • browseable : Indica se la risorsa può essere visualizzata da tutti gli utenti
  • read only : Indica se rendere disponibile la risorsa in sola lettura
  • writable : Indica se rendere disponibile la risorsa in scrittura
  • public : Indica se la risorsa è accessibile a tutti o meno
  • valid users : Indica per quali utenti o gruppi la risorsa può essere accessibile
  • create mask : Definisce quali permessi devono avere i file creati nella risorsa
  • directory mask: Definisce quali permessi devono avere le cartelle create nella risorsa

 

Fatta questa presentazione andiamo a vedere come implementare quello che abbiamo detto, andando a condividere la Directory /dati.

Innanzitutto creiamo la Directory:

# cd /
# mkdir dati

Andiamo adesso a creare la condivisione in fondo al file smb.conf:

[dati]
path = /dati
comment = miei_dati

smb2

A questo punto dobbiamo creare un utente per poter accedere alla risorsa;
E’ importante ricordare che l’utente che si aggiunge deve essere presente localmente nel sistema quindi nel file /etc/passwd.
NON possiamo aggiungere un utente samba che non è presente sul sistema.

Creiamo l’utente michele con la relativa password di samba per quanto riguarda l’accesso alla risorsa /dati.
Questa password non ha nulla a che vedere con la password di login nel sistema.

# useradd michele
# smbpasswd -a michele

smb3

Fatto ciò riavviamo il servizio:

# service smb restart

E la risorsa risulta essere pronta.

Il collegamento alla risorsa da una macchina Windows viene fatto nel seguente modo:

Start–> Esegui –> \\IP_Server_Samba ( Nel nostro caso è \\192.168.0.34 )

Ci verrà chiesta la Login:

smb4

E vedremo la nostra risorsa:

smb5

Se avete SELinux abilitato dovete impostare il contesto “samba_share_t” altrimenti quando provate ad entrare nella risorsa vi darà errore:

# chcon -R -t samba_share_t /dati

Se non volessimo Visualizzare la home dell’utente basterà commentare le seguenti righe:

smb6

Riavviamo samba e facendo un refresh da Windows sulla risorsa la Directory michele non sarà più visibile:

smb7

Per accedere alla risorsa da un altra macchina Linux utilizzeremo il comando smbclient con l’opzione -L Indirizzo IP della macchina Samba e –user=username

# smbclient -L 192.168.0.34 –user=michele

smb8

Come vediamo abbiamo la risorsa /dati, procediamo cosi al suo montaggio tramite il protocollo CIFS in una Directory del sistema per esempio in /tmp/dati

# mount -t cifs //192.168.0.34/dati /tmp/dati -o user=michele

Se ci troviamo davanti ad un errore simile:

smb9

Molto probabilmente dobbiamo installare il pacchetto cifs-utils tramite il comando yum:

# yum install cifs-utils

Al prossimo tentativo il montaggio viene effettuato senza problemi:

smb10

In questa risorsa vediamo che possiamo accedere in sola lettura, non possiamo scrivere sulla risorsa

Vediamo quindi come poter consentire all’utente michele di poter scrivere i propri file all’interno della condivisione.

Andiamo nel file smb.conf e inseriamo il permesso di scrittura per l’utente michele aggiungendo la seguente stringa:

write list = michele

smb11

Riavviamo il servizio e proviamo a creare o copiarci un file al suo interno.

Ci troveremo davanti al seguente errore:

smb12

Come mai??? Abbiamo impostato correttamente il permesso di scrittura sulla risorsa!!!!

Ma questo non basta perchè i permessi sul file system sono a livello più basso rispetto a Samba che lavora a livello applicativo e chi “comanda” è chi sta a livello più basso ossia in questo caso i permessi sul file system.

Quindi a livello di file system dobbiamo dare il permesso di scrittura all’utente michele tramite le ACL:

# setfacl -m u:michele:rwx /dati

smb13

A questo punto l’utente michele avrà il permesso anche di scrittura.

smb14

Se proviamo ad accedere con un altro utente avremo solamente i permessi di lettura.

Come facciamo ad accedere con un altro utente visto che una volta inserite le credenziali non ci vengono più richieste??

Dovete sapere che Windows mantiene le credenziali di accesso anche se non si è messo il segno di spunta su “Memorizza Password”.

Dunque per fargli eliminare le credenziali si deve andare nel prompt dei comandi e digitare la seguente stringa:

# net use * /d /y

smb15

Al prossimo tentativo di Login ci verrà mostrata la finestra dove inserire le credenziali d’accesso.

Possiamo creare più risorse e con i parametri descritti sopra possiamo impostare i giusti permessi.

Vediamo l’esempio in cui creiamo la risorsa “/fatture”

La rendiamo accessibile in sola lettura al gruppo studenti
Diamo il permesso di scrittura solamente a michele
Non facciamo vedere la risorsa creata precedentemente /dati

Questo è come si compone la struttura del file smb.conf:

smb16

Adesso creiamo i rispettivi utenti o se l’abbiamo gia fatto associamo nicola al gruppo studenti:

smb17

Creiamo la risorsa /fatture con il relativo contesto e impostiamo i permessi di lettura e scrittura per tutto il gruppo studenti tramite ACL.

Noi preferiamo impostare le ACL ma volendo si potrebbe anche cambiare gruppo alla Directory /fatture ( da root a studenti tramite il comando chgrp ) assegnando i permessi 775.

smb18

Associamo i 2 utenti alla risorsa samba se non l’abbiamo gia fatto precedentemente:

# smbpasswd -a michele
# smbpasswd -a nicola

smb19

Riavviamo samba e vedremo che l’utente michele avrà solamente i permessi di lettura mentre nicola che fa parte del gruppo studenti avrà anche i permessi di scrittura

Con i parametri descritti sopra e con l’aiuto degli esempi del file smb.conf è abbastanza semplice creare le configurazioni a noi più appropriate.

 

Abbiamo parlato degli utenti ( utenti samba ) che si devono aggiungere per le risorse condivise al momento della login tramite l’uso del comando smbpasswd.

Per visualizzare gli utenti che abbiamo inserito useremo il comando con l’opzione -L:

# pdbedit -L

smb20

Per eliminare gli utenti che abbiamo inserito useremo il comando con l’opzione -x nomeutente:

# pdbedit -x michele

smb21

Tornando al file smb.conf possiamo cambiare anche i parametri su Global:

Per fare un esempio:

Vogliamo che la workgroup si chiami: WORKGROUP
Il nome del server sia: Samba
La descrizione sia: Server-Dati
Che solamente il client 192.168.0.2 possa usufruire delle risorse:

Modifichiamo il file smb.conf alla sezione Global:

smb22

Riavviamo il servizio e se proviamo ad accedere da un host con ip diverso da 192.168.0.2 avremo il seguente messaggio di errore:

smb23

Tutto il resto viene confermato rendendo accessibile la ristosa dall’host con ip 192.168.0.2:

smb24

 

Da una macchina Client Linux potremmo aver bisogno di avere la condivisione /fatture gia pronta senza stare a montarla tutte le volte, e questo lo facciamo tramite il file /etc/fstab modificandolo nel seguente modo:

smb25

Nel file /etc/login scriveremo:

username=nicola
password=miapassword

Per verificare diamo il seguente comando:

# mount -a

Se non abbiamo alcun output significa che non si è riscontrano alcun problema.

 

Infine le regole per il firewall iptables sono le seguenti:

# iptables -A INPUT -p tcp –dport 139 -j ACCEPT
# iptables -A INPUT -p tcp –dport 445 -j ACCEPT

smb26

Per concludere tutti i log di samba sono presenti nella cartella /var/log/samba dove troviamo le operazioni sui protocolli SMB/CIFS e per ogni connessione instaurata viene creato un file di log struttrato nel seguente modo: log.[ Indirizzo IP ]

 

Info about author

Michele Milaneschi

RHCE Consultant