sabato 4 giugno 2011

SAMBA

Una breve introduzione su SAMBA può essere trovata qui. In questo post invece intendiamo trattare argomenti più approfonditi su SAMBA. Le caratteristiche principali di samba sono:


  • Condivisone di cartelle e stampanti in rete
  • Possibilità di accedere a risorse condivise da altre macchine che usano SMB
  • Supporto ai workgroup
  • Supporto per l'autenticazione su un dominio Windows
  • Gestione delle master browser list
  • Funzioni WINS
  • Supporto per Active Directory in qualità di membro
  • Autenticazione Kerberos
  • Supporto al protocollo LDAP
  • Pubblicazione degli attributi delle stampanti in Active Directory
  • Relazione di fiducia tra server NT4 e Samba
  • Supporto IPv6
  • Supporto alle relazioni di fiducia transitive e unidirezionali

Samba funziona grazie a due servizi (demoni). Si tratta di nmbd e smbd. Il primo si occupa di tutte le operazioni di risoluzione dei nomi e della gestione delle master browser list. Il secondo invece si occupa più nello specifico della gestione delle risorse condivise. Cerchiamo di comprendere meglio il servizio di Master Browser List. Quando si fa clic su Risorse di rete si ottengono le icone dei pc presenti in rete, ma in realtà si sta leggendo un elenco mantenuto da un pc assegnato a questo scopo. Non avviene cioè nessuna scansione della rete. Questo è il motivo per cui, quando si accende un nuovo pc, è necessario un po di tempo prima che questo compaia in Risorse di rete anche se la macchina è collegata correttamente in rete. La macchina appena accesa deve infatti cercare il gestore dell'elenco e segnalargli la propria presenza. Allo stesso modo quando si spegne un pc questo rimane ancora visibile nell'elenco per un certo periodo di tempo. Durante lo spegnimento non viene eseguita una notifica al gestore e quindi il nome rimane attivo nell'elenco per un certo numero di minuti prima di essere cancellato. Il gestore dell'elenco dei pc è definito Master Browser List. Il ruolo viene assegnato a una delle macchine presenti in rete, attraverso un meccanismo di elezione. Durante questa fase sono presi in considerazione diversi fattori (tempo di uptime del sistema, versione del OS, ecc..). Il migliore sistema diventa il Master Browser List fino a quando viene spento o avviene una nuova elezione e l'attuale master risulta inferiore a un nuovo sistema. Questo può accadere se in una rete di client Windows si attiva, pe, un sistema Linux con Samba. Tale macchina ha numeri migliori, se non altro perchè è un server, e vince le elezioni acquisendo il ruolo di nuovo Master Browser List.

Il Master Browser List mantiene semplicemente un elenco di macchine e non svolge necessariamente altri compiti (pe il servizio WINS potrebbe essere erogato da un altro pc in rete). La risoluzione efficiente dei nomi è un aspetto talmente importante che Samba contiene al proprio interno un implementazione completa di WINS.

Configurazione generale di SAMBA

Per prima cosa è necessario installare il pacchetto SAMBA:

apt-get install samba smbfs

Una volta installato i due demoni (smbd e nmbd) possono essere lanciati attraverso uno script apposito:

/etc/init.d/samba start

All'avvio di Samba viene letto il file smb.conf presente in /etc/samba, una configurazione di esempio. Si consiglia di salvare una copia di backup di questo file e di iniziare a editarne un nuovo dall'inizio.

Fermiamo il servizio Samba e salviamo il file:

/etc/init.d/samba stop
cd /etc/samba
mv smb.conf smb.conf.old

A questo punto si può creare un nuovo file di configurazione:

vi smb.conf

Il file di configurazione di Samba ha una struttura lineare e precisa. E' presente una sezione generale global in cui è contenuta una serie di indicazione che regolamentano il funzionamento del servizio (pe nome del server, tipo del server, visibilità in rete, criteri di sicurezza, ecc..)

Si vuole simulare Samba in modalità workgroup e si prenderà come esempio un piccolo studio professionale che ha la necessità di creare un area file comune dove salvare i file di gruppo e un area file per contenere le utilità di uso generale (pe ultima versione del browser, programmi vari, ecc...). L'area dei file comuni si chiama comune, è di libero accesso e chiunque può read/write. L'area con i file di utilità è invece gestita dall'amministratore locale e si chiama software ed è di sola read.

Esempio (workgroup):

vi smb.conf

[global]
workgroup = GRUPPOLAVORO    ' Non deve superare i 15 caratteri
netbios name = SERVER1             ' Non deve superare i 15 caratteri 
server string = file server Linux
security = share

La prima riga (global) deve essere riportata fedelmente. La riga workgroup indica a Samba il nome del gruppo di lavoro della rete. Se le macchine Windows fanno già parte di un gruppo di lavoro bisgona riportare a destra della direttiva workgroup il nome del gruppo di lavoro. La terza riga (netbios name) indica il nome con cui il server Linux sarà visibile quando si andranno a sfogliare le Risorse di rete dei client. La stringa server string invece contiene una descrizione per il server Linux specificato nella riga netbios name. Infine la quarta riga (security) contiene una direttiva che indica il tipo di sicurezza che si vuole implementare per l'accesso da parte dei client. Le opzioni base sono due: SHARE e USER. Nella modalità SHARE l'accesso alle condivisione avviene semplicemente fornendo una password, se richiesta. Questa modalità è simile alle condivisioni di directory di Windows. La modalità USER invece richiede anche una user id e una password.


[comune]
comment = cartella comune
path = /home/comune 
public =YES
writable = YES

L'etichetta scritta tra parentesi quadre indica il nome della condivisione in rete per la directory indicata alla 3° riga. La direttiva comment rappresenta il commento (opzionale). La direttiva path indica la posizione nel file system Linux dove è ubicata la directory. Per garantire l'accesso a questa condivisione da parte degli utenti della rete locale, bisogna verificare che i permessi di accesso siano corretti, per far ciò è sufficiente:

chmod 777 /home/comune

In questo modo si concede a chiunque di read/write la directory comune. Le due direttive seguenti indicano rispettivamente che la cartella è di pubblico accesso e che è possibile scrivere all'interno di essa.

Creiamo adesso la cartella software, accessibile in sola lettura dagli utenti comuni:

[software]
comment = file di utilità
path = /home/software
public =YES
writable =NO

L'unica differenza tra le due configurazione è il fatto che la direttiva writable è impostata a NO, impedendo quindi la scrittura all'interno della configurazione da parte degli utenti della LAN. Anche in questo caso si da per scontato che la cartella software ha i permessi di accesso corretti:

chmod 777 /home/software


Ogni volta che si apporta una modifica nel file di configurazione di Samba bisogna ricordarsi di riavviare il servizio per fare in modo che i cambiamenti vengano immediatamente applicati:

/etc/init.d/samba restart

Prima di questa operazione però è bene verificare che la sintassi del file di configurazione sia corretta. Per far ciò è sufficiente digitare:

testparm

Questa utility fa parte della suite di Samba ed è preposta a verificare la correttezza del file di configurazione. Il comando legge il file smb.conf, esegue una scansione delle sezioni e rileva eventuali errori. Il comando testparm accetta alcune opzioni tra cui la più importante è l'opzione -v tramite la quale è possibile visualizzare il valore di tutte le direttive che non sono state impostate manualmente nel file di configurazione, ma che hanno valori di default assegnati automaticamente da Samba.

Un ulteriore strumento di analisi e diagnosi del server è l'utility smbclient (apt-get install smbclient). Si tratta di un interfaccia testuale verso i servizi Samba. Un opzione di questa utility è -L che visualizza lo stato del servizio smb sul sistema indicato. La sintassi da usare è :

smbclient -L 127.0.0.1

Gestione degli utenti

Lo studio professionale (dell'esempio precedente) potrebbe, pe aver bisogno di un software gestionale da far usare  ad alcuni utenti. Il database comune di questo gestionale è memorizzato in una directory condivisa e accessibile dalle postazioni client presenti in rete tramite il nome gestionale. Questi dati non devono essere visibili a tutti ma solo al personale dell'amministrazione, pe agli utenti amm1, amm2 e amm3. Per soddisfare questo requisito non è più sufficiente la security a SHARE, ma stavolta dobbiamo utilizzare la security a USER. Non si vuole inoltre una semplice password di protezione, ma si intende fare in modo che solo gli account amm1, amm2 e amm3 possano accedere a questi dati, usando le relative credenziali.

[global]
workgroup = GRUPPOLAVORO    ' Non deve superare i 15 caratteri
netbios name = SERVER1             ' Non deve superare i 15 caratteri 
server string = file server Linux
security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = yes

L'aspetto importante è che il tipo di security è stato impostato a USER. Ora l'autenticazione avviene tramite la coppia dei valori user id/password, fornita all'accesso delle condivisioni. Sotto l'opzione security sono state inserite la direttiva smb passwd file che indica dove si trova il file che conserva le password di accesso per gli utenti di Samba e la direttiva encrypt passwords che indica che si stanno usando password cifrate.

Creiamo la cartella gestionale:

[gestionale]
comment = area supporto software gestionale
path = /home/gestionale
valid users = amm1 amm2 amm3 
writable = yes

La direttiva importante è valid users, all'interno della quale è possibile specificare gli utenti abilitati ad accedere alla directory /home/gestionale, condivisa con il nome gestionale. E' anche possibile inserire la direttiva invalid users ed elencare gli account che non possono accedere a gestionale.


[gestionale]
comment = area supporto software gestionale
path = /home/gestionale
valid users = amm1 amm2 amm3 
invalid users = ufftec1 ufftec2 ufftec3 marketing reception
writable = yes

Anche in questo caso si da per scontato che la cartella gestionale ha i permessi di accesso corretti:

chmod 777 /home/gestionale  ' home dell'utente amm1 - amm2 - amm3

Oppure se si vuole che il proprietario sia amm1:

chown  amm1 /home/gestionale
chmod 700 /home/gestionale 

Indicare gli utenti nel file di configurazione non basta. Bisogna anche creare gli stessi account sul server Linux. Samba si appoggia infatti sul sistema degli utenti di Linux per funzionare. Il primo passo consiste nel creare gli utenti sulla macchina Linux:

useradd amm1
useradd amm2
useradd amm3

In seguito bisogna impostare le password per ogni singolo utente:

passwd amm1
passwd amm2
passwd amm3

Il server dispone ora dei nuovi account con tanto di directory utente /home e di password di accesso al sistema. Samba usa gli account di Linux per identificare gli utenti, ma usa un proprio file di password per regolare l'accesso alle risorse. Le password di accesso a Linux e quella di Samba per un dato account potrebbero quindi non essere uguali. Si sconsiglia però questo approccio.

L'utility di Samba per l'impostazione della password è smbpasswd e non fa altro che aggiungere nel file delle password la riga /etc/samba/password, con la user id e la password cifrata.

smbpasswd -a amm1
smbpasswd -a amm2
smbpasswd -a amm3 

Ora l'utente è correttamente definito all'interno del server Linux e di Samba. Le copie di user id e password usate in fase di configurazione dovrebbero essere le stesse adottate dai sistemi Windows client in rete perchè così la procedura di autenticazione delle postazioni di accesso è immediata, in quanto Windows invierà automaticamente le credenziali al momento dell'accesso alle directory.

Directory utente

Fino a questo punto si è osservato come realizzare ogni singola condivisione scrivendo manualmente il relativo blocco di configurazione nel file smb.conf. Questo modo di procedere può andare bene fintanto che ci sono pochi utenti da gestire, ma se si hanno decine di utenti e si vogliono creare delle home directory per ognuno di essi? E' possibile risolvere questo problema ricorrendo al blocco homes, che provvede alla creazione automatica di una condivisione personale per ogni utente correttamente configurata in Samba. Da un punto di vista pratico viene letto l'elenco degli utenti di Samba e vengono condivise automaticamente le relative directory utente Linux presenti in /home.

Per esempio se abbiamo tre utenti amm1, amm2 e amm3 le loro rispettive directory utente che saranno condivise tutte in un colpo solo saranno: /home/amm1, /home/amm2 e /home/amm3. Per fare ciò:

[homes]
comment = cartella utente
writable = yes


Aprendo le risorse di rete e accedendo al server Linux si vedranno le cartelle generali, la cartella personale dell'utente e una cartella denominata homes. La cartella personale dell'utente avrà lo stesso nome dell'account di login usato, per esempio amm1. Il contenuto sarà liberamente navigabile e si potranno apportare tutte le modifiche necessarie. La cartella homes visibile nell'elenco delle condivisione è solo un alias che punta alla propria cartella utente personale. Si può fare in modo che la cartella homes non appaia con la direttiva browsable = no.

L'accesso alle home directory di Linux da parte di Samba avviene con lo stesso user id con cui il client ha eseguito il login. Se si è autenticati come amm1 dalla postazione Windows, l'accesso alle cartelle condivise avverrà attraversa amm1. Occorre quindi verificare che le singole cartelle utente dentro /home siano di proprietà del rispettivo utente. La directory /amm1 (sotto /home) deve appartenere all'utente amm1:

chown amm1 amm1
chmod 770 amm1

Alla singola cartella /amm1 si dovrebbe assegnare anche i diritti 770 per fare in modo che solo l'utente e il proprio gruppo possano accedere alla cartella

Variabili

E' bene precisare che la configurazione realizzata per le cartelle home è debole sul versante della sicurezza. Se un utente amm3 vuole accedere alla cartella personale di amm1 basta che scrive sulla barra degli indirizzi di qualunque finestra

\\SERVER1\amm1

Si potrebbe limitare l'accesso tramite la direttiva valid users e le variabili. Le variabili in Samba cominciano sempre con il simbolo di % e sono:

Variabili che riguardano il client che esegue il login:

%a       Tipo di sistema operativo client
%I        Indirizzo IP
%m      Nome NetBIOS
%M      Nome DNS

Variabili che riguardano l'utente:

%u       User id Unix corrente
%U      User id del client che ha richiesto l'accesso
%g       Gruppo dell'utente %u
%H      Directory utente di %u

Variabili che riguardano le condivisioni:

%S       Nome della condivisione
%P       Radice della condivisione corrente


Variabili che riguardano il server:


%h       Nome DNS del server Samba
%L       Nome NetBIOS del server Samba
%v       Versione di Samba

Per risolvere il problema della sicurezza citato poco fa, si può usare la variabile %S, che contiene il nome delle condivisione corrente. Dal momento che la directory utente personale ha lo stesso nome dell'id utente di login è possibile usare la variabile come vincolo di accesso specificando come direttiva:

valid users = %S

Riavviando il demone Samba si potrà accedere alla propria cartella utente amm1, ma non a quelle di altri utenti

Condivisione del CD-ROM

Un caso particolare di condivisione è l'unità CD-ROM, in quanto l'ambiente  Linux richiede che sia montata prima di essere usata. Se si vuole rendere permanente un particolare CD-ROM allora si può entrare come root e montare il CD-ROM con mount /dev/cdrom e creare un blocco simile a questo:

[cdrom]
comment = Cd-rom
browsable = yes
read only = yes
path = /mnt/cdrom

Se invece si vuole cambiare CD-ROM sull'unità condivisa è necessario ricorrere a due parametri specifici che eseguono il mounting in automatico all'accesso della risorsa condivisa e l'operazione di unmounting all'uscita:


[cdrom]
comment = Cd-rom
browsable = yes
read only = yes
path = /mnt/cdrom
root preexec = mount /dev/cdrom
root postexec = umount /dev/cdrom

Sicurezza di Samba

Le regole di sicurezza per Samba possono essere scritte in un blocco di definizione di una singola condivisione oppure nella sezione Global. Per cominciare è possibile discriminare gli accessi in base agli indirizzi IP:

hosts allow = 127.0.0.1 192.168.1.0/24
hosts deny = 192.168.1.3

E' possibile indicare anche stringhe parziali (192.168.1.). E' bene sapere che Samba risponde alle richieste provenienti da tutte le interfacce fisiche e logiche attivate sul server locale. Questo significa che se è presente un modem ADSL connesso, anche gli utenti esterni potranno accedere al sistema Samba e sfogliare le condivisioni. Si tratta di una situazione molto pericolosa. Per risolvere il problema occorre usare la direttiva interfaces nel blocco global e indicare quali interfacce abilitare per inoltrare le richieste a Samba:


interfaces = eth0 eth1 lo
bind interfaces = yes

In questo esempio vengono abilitate le schede di rete presenti nel sistema. La seconda riga abilita il traffico solo sulle interfacce indicate nella direttiva interfaces. E' comunque sempre buona norma usare un firewall e chiudere le porte che usa Samba verso l'esterno (ovvero le porte 137, 138, 139 e 445) e abilitarle solo alla rete interna.

All'interno delle cartelle utente ci possono essere file con link simbolici che puntano a file e a directory presenti in altri punti del file system. Per impedire la possibilità di eseguire i link simbolici usare la direttiva:

follow symlinks = no

Per quanto concerne la registrazione degli eventi è presente un meccanismo di logging attivato di defaults. E' possibile modificare le impostazioni, inserendo nel blocco global la direttiva log:

log file = /var/log/samba/%m.log
max log size = 100    ' Il valore 0 indica nessun limite
log level = 3

La prima direttiva indica il percorso dove salvare i log. Si è usata la variabile %m così in questo modo è presente un file di log per ogni macchina che accede a Samba. Con max log size si specifica la dimensione max del file di log. Superata questa dimensione il log corrente viene rinominato .old e viene creato un nuovo file. Infine l'ultima riga log level indica il livello di dettaglio del file di log. Il valore 3 è molto elevato e fornisce un output dettagliato, utile per le operazioni di debugging o di verifica delle configurazioni. Di contro questo livello di log comporta un carico eccessivo sul sistema Samba.

Realizzazione di un dominio SAMBA

Un dominio si differenzia da un workgroup per la presenza di un PDC (Primary Domain Controller). Questo PDC esegue compiti chiave (autenticazione centralizzata di utenti e pc, gestione delle autorizzazioni per le risorse condivise). Ogni utente che desidera avere accesso alla rete deve prima autenticarsi sul PDC

Prendiamo come esempio il caso di una piccola industria che dispone di cinque postazioni in amministrazione (amm1, amm2, amm3, amm4 e amm5) di dieci postazioni in ufficio tecnico (ufftec1, ufftec2, ufftec3, ecc...) e di due postazioni commerciali (comm1 e comm2) e di un pc in direzione (dir). I profili personalizzati dei singoli computer (sfondo, screensaver, ecc..) dovranno essere memorizzati sul server. Questa funzionalità, chiamata "roaming profiles" (profili mobili) permette agli utenti di trovare il proprio ambiente di lavoro su qualunque macchina utilizzino il login. All'accesso nel dominio tutte le impostazioni personalizzate saranno scaricate automaticamente in locale e applicate sulla macchina. L'utente potrà lavorare sulla macchina e all'uscita dal dominio tutte le modifiche apportate saranno salvate sul server.

Proviamo adesso a realizzare una configurazione di Samba come PDC:

[global]
workgroup = INCIPIT
netbios name = SERVER1
server string = PDC Linux
security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = yes
log file = /var/log/samba/%m.log
max log size = 100
log level = 1

Adesso impostiamo il sistema Samba come PDC (sempre sotto la sezione global):


os level = 255
preferred master = yes
local master = yes
domain master = yes
wins support = yes

Il PDC di una rete è anche il sistema che svolge le funzionalità di Master Browser List. Si tratta cioè della macchina che si occupa di mantenere aggiornato l'elenco di sistemi che appare in Risorse di rete. Il ruolo di Master Browser List non è assegnato a priori a un pc designato dall'amministratore. Sono i sistemi presenti a stabilirlo tramite un meccanismo di elezioni. In Samba è però possibile sembrare più eleggibili rispetto agli altri in modo tale da vincere le elezioni. Con la direttiva preferred master = yes si forza un elezione e con la direttiva os level = 255 si pone il sistema corrente in cima a tutte le preferenze. Questo valore infatti indica la tipologia di OS (i client hanno di solito valori bassi, mentre i server valori alti). Con la direttiva local master = yes si comunica alla rete che il server Samba intende diventare il Master Browser List per il dominio INCIPT. La direttiva domain master = yes è simile alla precedente, solo che opera su un contesto più ampio, quando un dominio è sparso su più sottoreti. In queste situazioni potrebbero esserci diversi sistemi a gestire gli elenchi per le singole sottoreti. Questa direttiva agisce da collante e fa in modo che il server Samba riceva gli elenchi da tutte le sottoreti.

Infine si DEVE inserire una direttiva di compatibilità per i sistemi Windows 95/98 (che non sono in grado di accedere al dominio):


domain logons = yes

IMPORTANTE: Senza questa direttiva non si sarà in grado di aggiungere un client Windows XP al dominio (TESTATO)


Il sistema Samba può anche agire da server WINS e fornire così servizi di risoluzione per i client Windows presenti, è sufficiente la seguente direttiva:

wins support = yes

Per accedere a questo server WINS bisogna andare sui singoli client e specificare nelle configurazioni della scheda di rete l'indirizzo IP del server WINS. Prima di attivare la funzionalità WINS su Samba bisogna controllare che non ve ne siano altri in rete.

Abilitazione delle directory utente

E' possibile fare in modo che ogni utente della rete disponga di una propria directory personale privata. Questa cartella può essere assegnata in fase di logon a una lettera di unità ben precisa, per esempio U.


logon home = \\server1\homedir
logon drive = U:

La prima direttiva esplicita che le cartelle utente si trovano nella condivisione \\server1\homedir (è quindi necessario prima creare questa condivisione sul server Samba, sezione: [homedir]). La cartella utente sarà legata alla lettera U sul client locale grazie alla seconda direttiva.

[homedir]
path = /home/%u
read only = no
writable = yes
browsable = no
create mask = 0600
directory mask = 0700
hide dot files = yes

Il percorso della directory utente è specificato dalla variabile, in questo modo l'utente amm1 avrà come cartella utente il path: /home/amm1. La direttiva create mask = 0600 assegna a tutti i files creati sulla condivisione i diritti 0600, e infine la direttiva directory mask = 0700 svolge la stessa funzione ma per le directory create.

Profili mobili

I profili mobili (roaming profiles) permettono di salvare sul server i profili di tutti gli utenti della rete e fare in modo che ci si possa spostare di postazione e disporre sempre del proprio ambiente di lavoro. Si ha cosi una funzione di accentramento sul server di molte informazioni che di solito vengono salvate localmente. Lo svantaggio maggiore comportato dal roaming profiles consiste nel carico di rete. Ogni volta che si entra o si esce avviene un'operazione di sincronizzazione con il server e questo comporta un uso della banda locale.

logon path = \\server1\profili\%u

Questa direttiva attiva i profili mobili segnalando a Samba che la directory dove memorizzare i profili si trova nella condivisione \profili\%u di SERVER1. Ancora una volta non si tratta di un riferimento al file system di Linux, ma di una condivisione di rete (quindi è necessaria la sezione [profili]). Anche in questo caso si usa la variabile %u per fare in modo che sia usata una directory separata per ogni utente.

[profili]
path = /usr/local/samba/profili
read only = no
writable = yes
browsable = no
create mask = 0600
directory mask = 0700

E' importante evidenziare che si è scelto di rendere questa condivisione non visibile da Risorse di rete utilizzando la direttiva browsable = no. Durante la configurazione dei profili mobili si deve prestare attenzione ai diritti impostati sulla directory /usr/local/samba/profili del server Linux. Tutti gli utenti devono potervi accedere, leggere e scrivere. Per farlo:

chmod 777 /usr/local/samba/profili

Windows 95 e 98 usano un meccanismo diverso per gestire i profili mobili. In tal caso non viene usata la direttiva logon path, ma la direttiva logon home per specificare la cartella utente:

logon home = \\server1\%U\profile

Samba gestirà questo percorso in maniera dinamica. Nel caso cioè di assegnamento di una lettera alla home directory, verrà considerata solo la porzione \\server1\%U. Nel caso invece di utilizzo di profili mobili sarà usato il percorso completo e il profilo sarà memorizzato dentro la directory profile.

Script di logon

Quando il client accede al PDC può ricevere automaticamente dal server un file batch con una serie di comandi da eseguire. Per attivare gli script di logon basta indicare le seguente direttiva:

logon script = logon.bat

Durante il logon, il file logon.bat sarà automaticamente scaricato dal server e eseguito. Non viene indicato alcun percorso per individuare il file, in quanto esiste una condivisione di Windows dedicata a questo scopo. Si tratta di netlogon, che viene creata di default sui server Windows. Su Samba, invece, è necessario replicare tale comportamento creando un opportuno blocco di definizione per la condivisione:

[netlogon]
path = /usr/local/samba/netlogon
read only = yes
write list = root

La directoryvè di sola lettura e solo l'utente root può scrivere su questa condivisione (direttiva write list = root). La directory è visibile in Risorse di rete. Dentro la condivisione netlogon è contenuto il file logon.bat che deve essere scritto su una macchina Windows e poi salvato su Linux, in quanto questi due sistemi operativi gestiscono in maniera differente l'invio a capo. Un file batch di logon potrebbe essere:

NET TIME \\server1 /SET /YES
NET USE G: \\server1\comune
NET USE M: \\server1\gestionale

La prima riga sincronizza l'ora locale con l'orario del server, le altre due invece agganciano alcune condivisioni. Naturalmente le due condivisioni dovranno avere la loro configurazione su smb.conf:

[comune]
comment = Cartella comune
path = /home/comune
public = yes
writable = yes


[gestionale]
comment = Area supporto software gestionale
path = /home/gestionale
public = yes
writable = yes

Si possono creare per esempio tanti file batch quanti sono gli utenti e salvarli con il nome dell'utente seguito dall'estensione .bat, per esempio: amm1.bat, amm2.bat, ecc.. Per fare in modo che Samba scarichi il file corretto si deve usare una direttiva dotata di variabile:

logon script = %u.bat

Attraverso la variabile %u sarà composto dinamicamente il nome del file batch da caricare dalla condivisione netlogon.

Abilitazione di utenti e computer

Come per la configurazione di un workgroup, è necessario creare sia gli utenti abilitati al dominio all'interno del sistema di Linux (con useradd) e sia un utente con lo stesso nome sul sistema Samba (con smbpasswd).

Ma su un dominio, anche i computer devono essere autenticati per poter accedere alla rete. Tale scelta garantisce una maggiore sicurezza, in quanto ogni singola macchina è dotata di una chiave di protezione univoca. Questo impedisce che qualcuno possa accedere al dominio cambiando nome alla propria macchina e fingendosi una macchina abilitata. L'abilitazione di un computer è una procedura molto simile a quella eseguita per abilitare gli utenti. Prima di tutto è necessario creare  un utente sul sistema Linux con lo stesso nome della macchina che si desidera aggiungere, digitando:

useradd -g domaincomputers -d /dev/null -s /bin/false nomemacchina$

Il parametro -g indica che il nuovo utente apparterrà al gruppo domaincomputers. Questo gruppo dovrà essere preventivamente creato con il seguente comando:

groupadd domaincomputers

Il parametro -d specifica la directory home che Linux assocerà all'utente. Ogni utente è sempre dotato di una cartella sul sistema, ma in questo caso la cosa è del tutto superflua. Non si sta infatti creando un utente, ma piuttosto un profilo per un pc. Tale profilo non accederà mai al sistema Linux dalla shell interattiva e perciò non ci sarà una directory home. Si specifica allora /dev/null cioè nulla. Il parametro -s indica la shell di login per utente. Anche in questo caso non serve alcuna, perchè si tratta di un computer e non di un utente, si specifica allora /bin/false; questo eseguibile non svolge alcuna attività e si limita a uscire appena viene invocato. Si ha infine il nome della macchina client che si sta abilitando, seguito dal simbolo obbligatorio di $ (convenzione NetBIOS).

Ora si usa il comando smbpasswd e creare un riferimento al pc sul file delle password di Samba:

smbpasswd -a -m nomemacchina

Il paremetro -a indica che si tratta di un nuovo riferimento e che il nome deve essere aggiunto al file delle password di Samba. Il parametro -m indica che si sta aggiungendo l'account di un pc e non di un utente ed è seguito dal nome pc questa volta senza il simbolo $.

Infine si può mettere un lock sulla password, in modo da lasciarla nulla e non renderla modificabile se non da root:

passwd -l nomemacchina$

Se ora si accede alla directory /etc/samba e si apre il file passwd, in fondo a esso si potrà notare l'account appena creato.

N.B: Durante le operazioni di abilitazione delle macchine è importante evitare che i nomi dei computer corrispondano con i nomi degli utenti abilitati in Samba.

Aggiunta del client al dominio

Microsoft Windows XP ha una procedura particolare per essere unito al dominio con Samba. Notare che solo XP Professional Edition può essere usato per far parte di un dominio, Windows XP Home Edition non può far parte di un dominio (Samba o Windows based).

  • Aprire l'editor delle policy di Sicurezza Locale (Start -> Pannello di controllo -> Strumenti di Aministrazione -> Criteri di protezione locali -> Criteri locali -> Opzioni di protezione)
  • Disabilitare la voce "Domain member: Digitally encrypt or sign secure channel (always)" (Membro di dominio: aggiunta crittografia o firma digitale ai dati del canale protetto (sempre) )
  • Disabilitare la voce "Domain controller: Disable machine account password changes" (Controller di dominio: rifiuta cambio password account computer)
  • Disabilitare la voce "Domain member: Require strong (Windows 2000 or later) session key" (Membro di dominio: richiesta chiave di sessione avanzata (Windows 2000 o versioni successive) )
  • Aggiungere la seguente chiave di registro:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netlogon\parameters
    "RequireSignOrSeal"=dword:00000000 
  •   A questo punto ci si può unire al dominio come su Windows NT/2000

Il sistema è pronto: non resta che aggiungere al dominio la macchina Windows. Portarsi su:

Start -> Pannello di controllo -> Sistema -> Nome computer -> ID di rete

Dalla finestra che appare selezionare: "Il computer fa parte di una rete aziendale ed è utilizzato per connettersi ad altri computer su tale rete".

Cliccare ancora su avanti e nella prossima finestra che appare selezionare: "L'azienda utilizza una rete con un dominio"

Adesso al passaggio seguente bisogna indicare un nome utente abilitato in Samba (per esempio amm1), la password relativa e il dominio (in questo caso INCIPIT). Confermando potrebbe essere necessario indicare manualmente il nome del computer e il dominio di appartenenza.


Premendo il tasto avanti bisognerà infine indicare un account di amministrazione con autorizzazione di accesso al dominio. In questo passaggio bisogna indicare l'utente root di Samba, la relativa password e nuovamente il dominio. Attenzione a non fare confusione perchè si deve usare la password per l'utente root specificata in Samba, non quella di Linux. Se si è dimenticata la parola chiave si può usare nuovamente il comando: 

smbpasswd -a root 

per sostituire la vecchia password di Samba con quella nuova. Con le seguenti direttive:

unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = <vedere un file smb.conf>

si allinea la password di Samba con quella del sistema. La prima riga imposta la sincronizzazione delle password fra Samba e il sistema Unix locale. La seconda riga server per cambiare la password Unix, %u è la login dell'utente e infine la terza riga è la procedura di matching per gestire le richieste in output di passwd. Assicurarsi che sul proprio sistema siano usate le stesse parole

Infine è necessaria riavviare il pc. Completato il riavvio della macchina si dovrà digitare il dominio INCIPIT nella finestra di logon, inserire il nome utente e la password; quest'ultima sarà verificata sul server e in caso di successo, verrà creato il profilo mobile, sarà collegata la directory home e lanciato lo script di logon. Adesso si fa parte del dominio.

Anche dei sistemi Linux, ovviamente, possono unirsi ad un dominio con un PDC Samba e se sono dei file server, si può configurare Samba per permettere l'autenticazione tramite il dominio. Su smb.conf ci devono essere le seguenti righe:

[global]
        workgroup =
        netbios name =
        security = DOMAIN
        encrypt passwords = Yes
        password server =
        preferred master = False
        domain master = False


Ovviamente sul PDC Samba deve essere creato un computer account per il nostro Samba locale (con il nome specificato in netbios name) e, anche in questo caso, il computer locale deve preventivamente unirsi al dominio, con una procedura che è paragonabile a quelle viste sopra per client Windows. 

Sul Linux/Unix locale basta scrivere:

smbpasswd -j -r -U root

Bisogna fornire la password di root del PDC Samba (ricordarsi che è la password salvata in smbpasswd e non in passwd/shadow, nel caso fossero diverse).

Esempio di smb.conf (Samba come PDC)

[global]
workgroup = INCIPIT
netbios name = SERVER1
server string = Samba PDC - version: %v

#settings TCP consigliabili di default
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192

security = user
smb passwd file = /etc/samba/smbpasswd
encrypt passwords = yes
hosts allow = 127.0.0.1 192.168.1.0/24
log file = /var/log/samba/%m.log
max log size= 100
log level = 1

#impostazione del server come Domain Master Browser
os level = 255
preferred master = yes
local master = yes
domain master = yes

#abilitazione dei logon W95/98 e non solo (senza questa direttiva XP non fa il join)
domain logons = yes

#attivazione supporto WINS
wins support = yes

#impostazione homedir
logon home = \\%L\homedir

#impostazione profili mobili
logon path = \\%L\profili\%U
logon drive = U:

#impostazione script di logon
logon script = logon.bat
#logon script = %u.bat

[netlogon]
path = /usr/local/samba/netlogon
read only = yes
#gli script in netlogon sono accessibili solo in read per tutti, tranne per gli utenti del gruppo admin
write list =@admin
browsable = no

[profili]
path = /usr/local/samba/profili
read only = no
writable = yes 
browsable = no
create mask = 0600
directory mask = 0700

[homedir]
path = /home/%u
read only = no
writable = yes
browsable = no
create mask = 0600
directory mask = 0700
hide dot files = yes

[comune]
comment = Cartella comune
path = /home/comune
public = yes
writable = yes

[gestionale]
comment = Area supporto software gestionale
path = /home/gestionale
public = yes
writable = yes

[software]
comment = File di utilità
path = /home/software
public = yes
writable = no

Creazione delle directory supplementari

E' importante creare directory per i profili e i netlogon definiti in smb.conf con nomi e permessi corretti, da shell digitare:

Creiamo il gruppo admin composto da utenti che possono editare gli script di logon

groupadd admin

mkdir -m 0775 /usr/local/samba/netlogon

Si imposta root come owner della directory e admin come gruppo

chown root.admin /usr/local/samba/netlogon

mkdir /usr/local/samba/profili

Si imposta lo sticky bit e si rende questa directory scrivibile da root e le sue subdirectory gestibili dai rispettivi utenti senza la possibilità di modificare quelle degli altri

chmod 1757 /usr/local/samba/profili

Altre risorse:

Nessun commento:

Posta un commento