Introduzione al file sharing con SAMBA

Transcript

Introduzione al file sharing con SAMBA
Dott.Ing.Ivan Ferrazzi
SAMBA
Introduzione al file sharing con SAMBA
Dott. Ing. Ivan Ferrazzi
V1.1 del 09/03/2012
1/28
Dott.Ing.Ivan Ferrazzi
Copyright ©2012 Dott.Ing. Ivan Ferrazzi
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.2 or any later version published by the
Free Software Foundation; with no Invariant Sections, no
Front-Cover Texts, and no Back-Cover Texts.
2/28
Dott.Ing.Ivan Ferrazzi
Indice generale
Introduzione.........................................................................................................4
Installazione di Samba.....................................................................................4
Il file di configurazione........................................................................................5
La sintassi........................................................................................................6
Le sezioni speciali............................................................................................6
Le variabili.......................................................................................................7
Opzioni base per la sezione [global]................................................................7
Opzioni base per le sezioni personalizzate......................................................9
Opzioni di accessibilità per le sezioni personalizzate.......................................9
Opzioni per l'accesso ai file per le sezioni personalizzate..............................10
Controllare le opzioni settate.........................................................................11
Account e autentificazione................................................................................12
Configurazione base con security=user........................................................12
Accesso guest con security=user..................................................................13
Sistemi di autentificazione.............................................................................14
Memorizzazione degli account.......................................................................15
Mappatura degli utenti...................................................................................17
SAMBA nel modo Windows................................................................................18
La risoluzione dei nomi..................................................................................18
Il browsing dei domain controller...................................................................19
La gestione dei link simbolici.........................................................................20
La gestione dei file nascosti...........................................................................20
La gestione dei DOS attributes......................................................................20
PDC con SAMBA.................................................................................................22
Configurazione di SAMBA come PDC..............................................................22
Mappatura dei gruppi.....................................................................................23
Creare amministratori e gruppi di dominio....................................................24
Profili roaming................................................................................................24
Compatibilità per la modifica delle passwords...............................................26
Aggiungere macchine al dominio...................................................................26
Gestione dei privilegi.....................................................................................26
Modifiche da apportare a Windows Professional 7.........................................28
3/28
Dott.Ing.Ivan Ferrazzi
Introduzione
SAMBA è la soluzione ideale per condividere risorse all'interno di una rete
composta da client/server Linux, Unix, Machintosh e Microsoft. SAMBA,
infatti, è in grado di comunicare con il protocollo SMB (Server Message
Block), utilizzato
come protocollo di comunicazione dai sistema
Microsoft.
Installazione di SAMBA.
L'installazione di samba è molto semplice. Basta digitare
apt-get install samba
per avere un completo sistema SAMBA funzionante. Per poter utilizzare
condivisioni SAMBA, o da server Windows, su Linux utilizziamo il comando
smbclient e smbmount.
apt-get install smbclient smbfs
Il primo pacchetto installa smbclient mentre il secondo mette a
disposizione il file system smb con tutti i suoi comandi annessi.
4/28
Dott.Ing.Ivan Ferrazzi
Il file di configurazione
SAMBA utilizza il file di configurazione /etc/samba/smb.conf per gestire il
comportamento delle condivisioni. Un semplice file di configurazione
potrebbe assomigliare a quello visualizzato qui di seguito:
[global]
workgroup = WORKGROUP
netbios name = DEBIAN
server string = Linux Samba Server
[public]
path = /public
read only = Yes
Una volta salvato il file di configurazione facciamo partire i due processi
usati da SAMBA, ossia smbd e nmbd, come segue
service smbd restart
service nmbd restart
Ora possiamo verificare la condivisione con il programma smbclient
utilizzando un accesso anonimo.
smbclient -L localhost -U%
Con il parametro -L possiamo visualizzare l'elenco delle risorse messe a
disposizione da un server (nel nostro caso localhost) utilizzando un
accesso anonimo (con -U%).
5/28
Dott.Ing.Ivan Ferrazzi
La sintassi.
L'intero file di configurazione è suddiviso in sezioni. Ogni sezione è
identificata da un nome scritto tra parentesi quadre. Il nome che
inseriamo tra parentesi può essere un nome che decidiamo noi, oppure
uno di quelli standard riconosciuti da SAMBA (spiegati più avanti).
Le opzioni che inseriamo per definire il comportamento di SAMBA hanno il
formato
nome_opzione = valore
Le sezioni speciali.
Come accennato precedentemente SAMBA riconosce all'interno del
proprio file di configurazione delle sezioni speciali che definiscono un
preciso utilizzo in fase di elaborazione.
[global]
Questa sezione permette di definire il comportamento del server.
Nel caso in cui il server non trovasse questa sezione all'interno del
proprio file di configurazione utilizzerebbe le opzioni di default. Tutte
le opzioni definite al di fuori di una sezione vegono interpretate
automaticamente come opzioni appartenenti a questo blocco.
[homes]
Quando un utente, ad es. pippo, effettua un collegamento al server
la prima cosa che SAMBA cerca di trovare all'interno del proprio file
di configurazione è la sezione dedicata all'utente, ossia [pippo]. Se
non la trova controlla l'esistenza della sezione [homes]. Trovata
questa sezione SAMBA verifica l'esistenza dell'utente lato server. Nel
caso in cui l'utente fosse presente SAMBA utilizzerebbe questa
sezione come sezione personale dell'utente stesso.
[printers]
Questa sezione permette di condividere stampanti di sistema senza
doverle registrare una ad una. Il sistema funziona in maniera simile
alla sezione [homes] dove la risorsa richiesta non è un utente, ma una
stampante.
Nel momento in qui viene richiesta una risorsa SAMBA controlla le
sezioni definite precedentemente per [homes]. Nel caso in cui la
risorsa non fosse presente come utente di sistema SAMBA
passerebbe alla ricerca tra le stampanti di sistema. In questo caso
utilizzerebbe questa sezione come opzione di riferimento.
6/28
Dott.Ing.Ivan Ferrazzi
Le variabili.
SAMBA legge il contenuto del file di configurazione ad ogni richiesta
di connessione, ecco perché è possibile usare delle variabili i cui
valori vengono settati con i parametri relativi all'utente. Possiamo
utilizzare delle variabili che rappresentano il nome dell'utente, il
sistema operativo, il hostname della macchina, ecc. Alcune delle
variabili più importanti sono:
Variabili del client
%a
architettura del client
%i
indirizzo IP del server dove il client si è connesso
%I
indirizzo IP del client
%m
nome NetBIOS del client
%M
nome DNS del client
Variabili degli utenti
%u
utente Linux corrente
%U
utente inviato dal cliente durante l'autentificazione
%D
il dominio dell'utente
%H
directory home di %u
%g
gruppo primario di %u
%G
gruppo primario di %U
Variabili della condivisione
%S
nome della condivisione corrente
%P
directory root della condivisione corrente
%p
percorso automount della directory root della condivisione
Variabili del server
%d
PID del server corrente
%h
hostname DNS del server SAMBA
%L
nome NetBIOS del server inviato dal client nella richiesta
%N
home directory del server, mappatura automount
%v
versione di SAMBA
Variabili aggiuntive
%R
il livello del protocollo di SMB negoziato
%T
data e ora corrente
%$(var)
il valore della variabile di ambiente var
Opzioni base per la sezione [global].
Vediamo qui di seguito alcune delle opzioni più importanti che possiamo
utilizzare all'interno della sezione [global].
7/28
Dott.Ing.Ivan Ferrazzi
netbios name = {nome}
Permette di settare il nome NetBIOS per il server in questione.
workgroup = {gruppo}
Permette di definire il gruppo di appartenenza per il NetBIOS.
server string = {commento}
Permette di definire il commento che appare nella descrizione del
server quando lo vediamo come possibile risorsa di rete.
interfaces = {interfaccia} [{interfaccia} ...]
Definisce le interfacce di rete per le quali viene messo a
disposizione il relativo servizio. Es.
interfaces = eth1
bind interfaces only = yes|no
Permette di attivare la risposta di SAMBA solamente per le
interfacce definite con interfaces.
hosts allow = {client} EXCEPT {client}
Con questa opzione possiamo stabilire chi ha accesso al nostro
sistema. Come client possiamo inserire un hostname, un indirizzo
IP, un nome di dominio (.test.lan), un netgroup (@group), una subnet
(192.168.0. - attenzione al punto finale), una maschera di rete
(192.168.0.0/24), oppure la parola ALL (che identifica un qualsiasi
computer che cerca di collegarsi).
hosts deny = {client} EXCEPT {client}
Stessa configurazione di hosts allow.
netbios aliases = {nome} [{nome} ...]
Permette di definire più nomi NetBIOS per lo stesso server.
smb ports = {porta} {porta}
Le porte utilizzate di default sono la 139 e la 445, che sono quelle
utilizzate dallo standard CIFS/SMB. Questa opzione permette di
utilizzare porte diverse, anche se non si consiglia la modifica delle
porte per garantire il servizio anche su sistemi Microsoft, che
peccano di flessibilità.
log file = {percorso_file}
Permette di modificare il file di default utilizzato per i log.
log level = {numero di livello}
Permette di definire il numero che identifica il livello dei messaggi
log da inserire: 0-1 per loggare i messaggi critici, 2-3 per effettuare
il debug di eventuali problemi di funzionamento e >5 per log
8/28
Dott.Ing.Ivan Ferrazzi
utilizzati dagli sviluppatori.
max log size = {valore_KB}
Permette di definire il limite massimo utilizzato per il file log. Una
volta superato questo limite l'attuale file verrà rinominato con
l'estensione .old e inizierà a scrivere su un nuovo file. Eventuali file
.old già esistenti verranno eliminati.
debug timestamp = yes|no
Di default SAMBA aggiunge una riga di timestamp ad ogni
inserimento log. Con questa opzione possiamo decidere di
disattivare la scrittura di questo blocco.
debug pid = yes|no, debug uid = yes|no
Queste due opzioni permettono di attivare o meno l'inserimento del
PID oppure della UserID e GroupID all'interno del blocco timestamp.
Queste opzioni hanno senso solamente se attivata l'opzione debug
timestamp.
Opzioni base per le sezioni personalizzate.
Le opzioni più comuni che possiamo utilizzare per definire le condivisioni
sono le seguenti:
path = {percorso_della_condivision}
Permette di definire il percorso assoluto della cartella che vogliamo
condividere.
comment = {commento}
Permette di definire il commento associato alla condivisione in
questione.
volume = {nome_del_volume}
Questa opzione ci dà la possibilità di definire il nome di volume da
associare alla condivisione in questione. Il nome del volume è molto
comodo perchè ci permette di simulare contenuti di CD-Rom.
browseable = yes|no
Questa opzione ci permette di abilitare la visualizzazione della
ricerca all'interno delle risorse di rete. Questa operazione va
disabilitata all'interno della sezione [homes].
Opzioni di accessibilità per le sezioni personalizzate.
Vediamo ora le più comuni opzioni utilizzate per la gestione
9/28
Dott.Ing.Ivan Ferrazzi
dell'accessibilità delle sezioni personalizzate:
read only = yes|no
Permette di definire la proprietà di accesso alla condivisione. Se
attivata il contenuto verrà messo a disposizione in sola lettura.
writable = yes|no
Anche questa opzione definisce la proprietà di accesso alla
condivisione come read only. Infatti, read only=yes è uguale a
writable=no.
write list = {utente}|{+gruppo}
Nel caso di read only = yes questa opzione permette di definire gli
utenti o i gruppi, separati da una virgola, che possono comunque
modificare il contenuto della condivisione.
read list = {utente}|{+gruppo}
Nel caso di read only = no questa opzione permette di definire gli
utenti o i gruppi, separati da una virgola, che hanno accesso in sola
lettura al contenuto della condivisione.
admin users = {utente}|{+gruppo}
Permette di definire gli utenti o i gruppi, separati da una virgola, che
vengono mappati come utente root per la risorsa in questione.
invalid users = {utente}|{+gruppo}
Permette di definire gli utenti o i gruppi, separati da una virgola, che
non devono avere accesso alla risorsa in questione.
valid users = {utente}|{+gruppo}
Permette di definire gli utenti o i gruppi, separati da una virgola, che
devono avere accesso alla risorsa in questione, ma solo se non
vietato da altre opzioni utilizzate.
max connections = {nr_connessioni}
Permette di definire il numero massimo delle connessioni che
SAMBA può gestire contemporaneamente.
Opzioni per l'accesso ai file per le sezioni personalizzate.
Vediamo ora le più comuni opzioni utilizzate per la gestione dei
diritti di accesso ai file delle sezioni personalizzate:
create mode = {diritti}
Permette di definire la matrice dei diritti che vogliamo asseganre ai
nuovi file che creiamo all'interno della cartella condivisa (vedi chmod).
SAMBA utilizza questi diritti per alcune delle operazioni richieste,
10/28
Dott.Ing.Ivan Ferrazzi
mentre per le altre utilizza il valore umask del sistema.
force create mode = {diritti}
Permette di definire la matrice dei diritti che vogliamo asseganre ai
nuovi file che creiamo all'interno della cartella condivisa,
indipendentemente dall'umask di sistema.
force directory mode = {diritti}
Permette di definire la matrice dei diritti che vogliamo asseganre
alle nuove cartelle che creiamo all'interno della cartella condivisa.
Controllare le opzioni settate.
SAMBA mette a disposizione il comando testparm che permette di
effettuare un controllo delle attuali opzioni settate. Se utilizzato con
il parametro -v elenca tutti i valori delle opzioni settate nel file di
configurazione e quelle utilizzate come impostazione di default.
testparm -v
11/28
Dott.Ing.Ivan Ferrazzi
Account e autentificazione
Configurazione base con security=user.
SAMBA utilizza l'opzione security per definire il sistema da utilizzare per
quanto riguarda l'autentificazione degli utenti che vogliano accedere al
servizio. Il valore più comune per questa opzione è user. Gli altri valori
possibili li vedremo nei capitoli seguenti.
Quando definiamo il livello di sicurezza da utilizzare in SAMBA è molto
importante verificare l'attuale l'impostazione passdb backend, per essere
sicuri di fare gestire gli account che creiamo in maniera appropriata.
L'impostazione di default è:
passdb backend = tdbsam
Vediamo ora una semplice configurazione che utilizza le opzioni appena
descritte:
[global]
workgroup = WORKGROUP
netbios name = DEBIAN
server string = Linux Samba Server
security = user
passdb backend = tdbsam
[public]
path = /public
read only = Yes
Per creare un nuovo utente utilizziamo il comando smbpasswd. Il comando
può essere utilizzato indipendentemente dal passdb backend che abbiamo
12/28
Dott.Ing.Ivan Ferrazzi
scelto di utilizzare (funziona quindi anche con tdbsam).
I parametri che possiamo utilizzare con il comando smbpasswd sono:
-c smb.conf
-a utente
-d
-e
-h
-n
-x
utente
utente
utente
utente
per definire il file di configurazione smb.conf. Quando
gestione un account il comando recupera dal file di
condigurazione di SAMBA il tipo di backend che viene
utilizzato.
per creare un nuovo utente che deve essere
presente come utente Linux
per disabilitare un utente
per riabilitare un utente
per visualizzare l'aiuto del comando
per creare un utente con password nulla
per eliminare l'utente
Come prima cosa proviamo a creare un nuovo utente. Attenzione!
L'utente deve essere presente come utente Linux. L'utente che andremo
a creare è l'utente test
smbpasswd -a test
Il comando ci chiede di inserire la password e la relativa conferma. La
password non deve per forza essere uguale alla password di sistema. Ora
proviamo a montare la risorsa con il comando mount
mount //localhost/public /mnt -o username=test,password=test
Per evitare di scrivere nome utente e password direttamente all'interno
dell'eventuale file /etc/fstab possiamo utilizzare l'opzione credentials che
ci permette di utilizzare un file separato dal quale riprenderà le opzioni
necessarie
all'autentificazione. Creiamo quindi un nuovo file
/etc/samba/credentials.usr e ci scriviamo:
username=test
password=test
La risorsa può essere poi montata con
mount //localhost/public /mnt -o credentials=/etc/samba/credentials.usr
Accesso guest con security=user.
Nelle versioni precedenti a SAMBA3 si poteva utilizzare security=share che
però è diventato un valore obsoleto. Questo valore ci permetteva di
liberare la condivisione senza controllare l'autentificazione dei clienti.
L'unica possibilità che abbiamo ora è quella di utilizzare il valore user, ma
questo ha come conseguenza il controllo di SAMBA all'interno degli utenti
Linux, oppure all'interno del file smbpasswd, per accertarsi dell'esistenza
13/28
Dott.Ing.Ivan Ferrazzi
dell'utente in questione.
Questo comportamento può essere modificato dicendo a SAMBA di
mappare l'utente che richiede l'accesso su un altro utente quando si
verificano circostanze ben precise.
[global]
workgroup = WORKGROUP
netbios name = DEBIAN
server string = Linux Samba Server
security = user
map to guest = bad user
guest account = smbguest
[public]
path = /public
guest ok = yes
read only = Yes
map to guest = never|bad password|bad uid|bad user
Permette di definre la circostanza per la quale viene utilizzato
l'account definito con l'opzione guest account. Le possibili circostanze
possono essere:
never
bad password
bad uid
bad user
Restituisce un errore di login. Questo è il
comportamento di default.
L'utente è corretto, ma la password è errata.
Da usare con security=ads oppure security=domain.
Quando SAMBA non trova l'UID corrispondente dopo
aver eseguito correttamente il login.
Quando l'utente non viene riconosciuto dal sistema.
guest account = {utente_ospite}
Quando avviene la circostanza definita precedentemente SAMBA fa
accedere l'utente con l'account definito all'interno di questa opzione.
Di default viene usato l'account nobody.
Sistemi di autentificazione.
NTLMv1
NTLM è il sistema di autentificazione sviluppato da Microsoft ed
utilizzato da Windows e altri client CIFS. Le caratteristiche di questo
sistema sono:
–
il codice hash della password non viene passata attraverso la
rete;
–
il sistema utilizza il codice hash della password ed un
algoritmo per calcolare un risultato. Il risultato viene mandato
al server che usa lo stesso algoritmo per calcolare il risultato
utilizzando il codice hash della password che possiede. Se i
due risultati coincidono l'utente è valido.
–
Il calcolo del codice hash per la medesima password è sempre
14/28
Dott.Ing.Ivan Ferrazzi
lo stesso. Chi è in possesso del codice hash è
automaticamente in possesso della password, anche se solo
indirettamente. Può comunque utilizzare il codice hash da
spedire direttamente al server per autentificarsi. Ecco perché
è assolutamente fondamentale proteggere i file che
contengono questo tipo di informazioni.
NTLMv1 viene attivato da SAMBA con l'opzione encrypt passwords=yes
che viene inserita nella sezione [global] del file di configurazione. I
vari utenti vengono poi inseriti con il comando smbpasswd.
Se la password inserita è inferiore o uguale a 14 caratteri il sistema
genera due codici hash rappresentati in esadecimale: il primo
identifica il codice LAN MANAGER, mentre il secondo è il codice NT.
Nel relativo file smbpasswd troviamo i rispettivi due codici inseriti nella
terza e nella quarta colonna:
user:1001:ABCDABCDA...:ACACAC...:...
|LAN MANAGER |NT
|
Nel caso di password più lunga il codice LM viene sostituito da una
serie di X.
Per abilitare o disattivare l'autentificazione mediante LAN MANAGER
usiamo l'opzione
lanman auth = yes|no
NTLMv2
Questa è la versione successiva a NTLMv1 introdotta da Microsoft a
partire da Windows NT4.0 SP4.
Per aumentare il livello di sicurezza e obbligare il solo utilizzo di
NTLMv2 bisogna disabilitare l'autentificazione con lanman e ntlm
come segue:
[global]
...
encrypt passwords = yes
lanman auth = no
ntlm auth = no
Memorizzazione degli account.
Quando SAMBA memorizza account che vengono utilizzati da Windows
deve registrare delle informazioni aggiuntive a quelle utilizzate nei
sistemi Linux. Abbiamo ad esempio visto il file smbpasswd che oltre a
memorizzare il nome e l'id dell'utente memorizza anche un codice hash
della password LANMAN e NT.
Un'altra informazione necessaria è il Windows Security Identifier (SID). Si
tratta di un codice relativamente lungo che è suddiviso in local domain (o
15/28
Dott.Ing.Ivan Ferrazzi
anche local machine) SID e RID (relative identifier):
S-1-5-21-0123456789-0123456789-0123456789-1002
|------------local domain SID-----------| |RID
Su un domain controller il local domain SID corrisponde all'effettivo
domain SID. Il local domain SID di una macchina può essere reperito
utilizzando da root il comando:
#net getlocalsid
SID for domain PROVA is: …
Per recuperare l'ultimo identificatore relativo utilizzato (RID) possiamo
scrivere
#net maxrid
Currently used maximum rid: 3000
Le informazioni che definiscono un'account possono essere memorizzate
in vari modi. Noi ci limiteremo a vedere l'utilizzo di smbpasswd (il file di
testo dell'omonimo comando) e tdbsam (che si basa su trivial database).
L'opzione da utilizzare nella sezione [global] che permette di indicare il
tipo di supporto da usare è passdb backend.
passdb backend = smbpasswd[:/etc/smbpasswd]
In questo caso gli account vengono registrati all'interno di un file di
testo con il formato:
username:uid:lanman_hash:NT_hash:flags:pw_changed_TS
Il campo flags può contenere diversi valori dove quelli più importanti
sono:
D
account disabilitato
L
account bloccato per uso di password errata
N
account senza password (solo se null passwords = yes)
U
user account
X
password senza scadenza
All'interno della definizione dell'opzione possiamo aggiungere il
nome del file che il sistema deve utilizzare per memorizzare i vari
dati. Per verificare l'attuale impostazione possiamo usare il comando
smbd -b | grep SMB_PASSWD_FILE
passdb backend = tdbsam[:/etc/passdb.tdb]
Si consiglia di utilizzare questo supporto in caso di domain
controller. Il tdbsam offre infatti la possibilità di memorizzare un
numero più elevato di attributi indispensabili per un corretto
funzionamento di un domain controllare.
16/28
Dott.Ing.Ivan Ferrazzi
Possiamo verificare il file usato con
smbd -b | grep PRIVATE_DIR
e risettarlo a piacere come da definizione dell'opzione.
Mappatura degli utenti.
La gestione dei nomi per gli utenti è più flessibile in Windows che in
Linux. Con Windows è possibile creare utenti che come nome contengono
degli spazi, mentre con Linux questo non è possibile.
Ecco che diventa quindi importante avere la possibilità di mappare utenti
Windows su effettivi utenti Linux. In questo caso possiamo usare
l'opzione
username map = /etc/smbusers
per indicare il file che contiene questa associazione nel formato
linux_user = “Windows User”
Il valore scritto nella parte destra viene comparato in maniera caseinsensitive ed associato all'utente definito a sinistra. Un possibile file
potrebbe avere il seguente contenuto:
!test = “Utente Test” test_user
nobody = *
Quando SAMBA legge un file creato per la mappatura degli utente
continua a controllare tutti gli utente fino a quando il file è
completamente letto. Il punto esclamativo (!) permette di interrompere
l'esecuzione del file nel momento in cui trova l'utente desiderato.
L'asterisco (*) viene utilizzato per definire una qualsiasi sequanza di
caratteri.
SAMBA utilizza il file per la mappatura degli utenti come primo elemento
di verifica quando un utente cerca di autenticarsi. Utilizzando la riga
permetterebbe l'accesso degli utenti (sia Windows che Unix) solo ed
esclusivamente con gli utente definiti all'interno della sezione destra del
file. In questo caso bisogna ricordarsi di aggiungere anche l'utente Unix
altrimenti quest'ultimo verrebbe mappato sempre come utente.
17/28
Dott.Ing.Ivan Ferrazzi
SAMBA nel modo Windows
La risoluzione dei nomi.
SAMBA utilizza principalmente due sistemi per risolvere i nomi: WINS e/o
DNS. Per attivare SAMBA come WINS server utilizziamo la seguente
opzione:
wins support = yes
DNS può essere disabilitato per limitare la ricerca solamente su WINS
dns proxy = no
SAMBA può essere configurato per utilizzare uno o più WINS server già
presenti in rete con l'opzione
wins server = 192.168.2.1 192.168.2.2
dove 192.168.2.1 e 192.168.2.2 son gli indirizzi IP dei rispettivi WINS
server.
Nel caso in cui il server WINS fosse presente all'interno di una sottorete
diversa da quella gestita da SAMBA possiamo attivare il forwarding delle
richieste mediante
wins proxy = yes
L'ordine di esecuzione utilizzato da SAMBA per la risoluzione dei nomi si
determina con l'opzione
18/28
Dott.Ing.Ivan Ferrazzi
nome resolve order = wins lmhosts hosts bcast
lmhosts
hosts
wins
bcast
file hosts di SAMBA
/etc/hosts di Linux
il server WINS
utilizza il broadcast
Il browsing dei domain controller.
Per definire il server master da utilizzare all'interno di una rete i vari
server partecipano ad una elezione. Vince il server con il sistema
operativo che ha il valore più alto all'interno dell'intera elezione. In caso
di sistemi operativi con lo stesso valore viene eseguita un algoritmo
particolare che determinerà il vincitore.
I valori dei sistemi operativi Windows più noti sono:
32
Windows NT/2000/2003 domain controller
16
Windows NT/2000/2003/XP domain member e standalone
Per disabilitare la partecipazione all'elezione possiamo scrivere
local master = no
Altrimenti possiamo forzare l'utilizzo come server master aumentando il
valore per l'elezione:
local master = yes
os level = 255
preferred master = yes
SAMBA può inoltre essere attivato come domain master browser (PDC)
aggiungendo l'opzione seguente alle precedenti appena viste nella
sezione [global]:
domain master = yes
L'attivazione di SAMBA come PDC fa registrare a nmbd il nome del
workgroup con l'aggiunta del codice <0x1b>. Avendo come valore
workgroup TESTDOM possiamo utilizzare il seguente comando per verificare
l'effettiva attivazione:
nmblookup 'TESTDOM#1b'
che dovrebbe restituire l'indirizzo IP del server in questione.
Per visualizzare l'elenco dei server presenti all'interno del nostro gruppo
di lavoro scriviamo
# net rap server domain TESTDOM
19/28
Dott.Ing.Ivan Ferrazzi
La gestione dei link simbolici.
Con le seguenti opzioni possiamo decidere come SAMBA dovrà
interpretare i link simbolici. Possiamo decidere di far seguire i link
simbolici da SAMBA e se permettere o meno l'inseguimento di link
simbolici che si trovano al di fuori della cartella princiaple condivisa.
follow symlinks = yes|no
Permette di attivare o meno l'inseguimento dei link simbolici
wide links = yes|no
Permette di attivare o meno l'inseguimento dei link simbolici che si
trovano al di fuori della cartella principale condivisa.
La gestione dei file nascosti.
In un sistema UNIX i file vengono nascosti ponendo un punto comme
inizio del nome del file. Questa funzione potrebbe essere fastidiosa se
applicata su file che vengono creati da un'utente Windows. Possiamo
quindi modificare questo comportamento con la seguente opzione
hide dot files = no
E' possibile nascondere anche file che rispecchiano un determinato
pattern (es. l'estensione del file) definito con il Windows globbbing:
hide files = /*.ini/*.sys/
I vari pattern vanno separati da uno splash (/). I file che vengono nascosti
da SAMBA non possono essere utilizzati dai client anche se conoscono il
nome del file in question.
La gestione dei DOS attributes.
Alcuni degli attributi DOS vengono attualmente registrati utilizzando
determinati bit all'interno della matrice UNIX che identifica i permessi dei
file. Gli attributi in questione sono:
Archiv
ReadOnly
System
Hidden
per
per
per
per
identificare i file recentemente modificati
indicare i file di sola lettura
identificare i file di sistema
idenfiticare i file nascosti
UNIX mappa questi attributi utilizzando i seguenti bit:
ReadOnly
valore W (inverso) nel blocco proprietario
20/28
Dott.Ing.Ivan Ferrazzi
Archivio
System
Hidden
valore X nel blocco proprietario
valore X nel blocco gruppo
valore X nel blocco degl altri
Questa assegnazione funziona solamente sui file e non sulle cartelle. Le
seguenti opzioni inserite nella sezione [global] permettono di attivare o
meno la mappatura degli attributi DOS
map
map
map
map
readonly = yes | no | permissions
archive = yes | no
hidden = yes | no
system = yes | no
Un file con i seguenti permessi UNIX
-r-xr--r--
prova.txt
viene visto da Windows come un file archivio di sola lettura. Possiamo
verificare con il seguente comando:
smbclient //SERVER/public -U test -c 'dir prova.txt'
SAMBA permette di separare la gestione degli attributi separatamente
dai bit dei permessi. Dobbiamo verificare che la partizione montata sia
montata con l'opzione user_attr e che siano presenti gli XATTR nella
configurazoine iniziale di installazione con
smbd -b | grep XATTR
In questo caso possiamo semplicemente attivare il tutto con l'opzione
store dos attributes = yes
21/28
Dott.Ing.Ivan Ferrazzi
PDC con SAMBA
Configurazione di SAMBA come PDC.
Per identificare un PDC all'interno di una rete Windows cerca di risolvere
il nome TESTDOM<0x1b>, mentre utilizza il nome TESTDOM<0x1c> per
identificare un semplice DC, dove TESTDOM è il nome workgroup che
identifica il nostro dominio di appartenenza.
Abbiamo già visto l'opzione domain master che fa registrare a nmbd il nome
TESTDOM<0x1b>, mentre il nome TESTDOM<0x1c> viene registrato utilizzando
l'opzione domain logons come segue. Quindi cambiamo la nostra
configurazione SAMBA come segue:
[global]
netbios name = SERVER
workgroup = TESTDOM
security = user
passwd backend = tdbsam
encrypt passwords = yes
domain master = yes
domain logon = yes
Attiviamo inoltre le varie opzioni che permettono al nostro server di
diventare local master browser aggiungendo anche le seguenti righe
os level = 255
preferred master = yes
local master = yes
Ora possiamo verificare la registrazione dei nomi TESTDOM<0x1b> e
22/28
Dott.Ing.Ivan Ferrazzi
TESTDOM<0x1c>
con il seguente comando:
nmblookup 'TESTDOM#1b' 'TESTDOM#1c'
Come risultato dovremmo vedere l'indirizzo IP del nostro server.
Mappatura dei gruppi.
La
mappatura
dei gruppi viene memorizzata all'interno del file
group_mapping.ldb. La mappatura avviene mettendo in relazione una SID
con un gruppo Linux presente all'interno del sistema.
Il comando net groupmap mette a disposizione una serie di funzioni che
permettono la gestione della mappatura dei gruppi.
Per visualizzare l'elenco dei gruppi attualmente presenti digitiamo:
# net groupmap list
System Admins (S-1-5-21-0..9-0..0-0..9-3016) → sysadmin
Il risultato visualizza il gruppo NT con relativo global SID tra parentesi ed
il gruppo Unix sul quale viene mappato.
Le informazioni dettagliate relative ad un gruppo le otteniamo scrivendo
# net groupmap list
System Admins
SID
:
Unix gid
:
Unix group :
Group type :
Comment
:
verbose ntgroup=”System Admins”
S-1-5-21-0..9-0..9-0..9-3016
1006
sysadmin
Local Group
Domain Unix group
Per aggiungere un nuovo gruppo all'interno della mappatura possiamo
usare
# net groupmap add ntgroup=”System Managers” unixgroup=sysman
dove ntgroup identifica il nome NT del gruppo, mentre unixgroup il gruppo
del sistema.
Possiamo naturalmente anche modificare eventuali gruppi già esistenti
con
# net groupmap modify ntgroup=”System Managers” unixgroup=systmp \
comment=”System Manager Group” type=local
dove comment permette di aggiungere un commento e type definisce il tipo
di gruppo che vogliamo aggiungere: domain (per un gruppo di dominio) e
local (per un gruppo locale).
Gruppi non più utilizzati vengono eliminati con
#net groupmap delete ntgroup=”System Managers”
23/28
Dott.Ing.Ivan Ferrazzi
Nel momento in cui una macchina partecipante al dominio in questione
accede al PDC, questo invierà tutti i gruppi mappati al client che metterà
a disposizione il rispettivo elenco all'interno della gestione dei gruppi di
sistema.
Creare amministratori e gruppi di dominio
All'interno di un dominio Windows deve essere presente il gruppo
“Domain Admins” che definisce gli amministratori del domino che
vogliamo gestire. Come visto precedentemente ogni gruppo definito per
Windows deve mappare su un gruppo presente all'interno del sistema.
Quindi andiamo a creare il gruppo UNIX ntadmin che dovrà contenere tutti
gli utenti amministratori che dovranno gestire il nostro domino:
# addgroup ntadmin
Poi dobbiamo mappare il gruppo creato con quello predefinito per gli
amministratori di dominio con:
# net groupmap add ntgroup=”Domain Admins” unixgroup=ntadmin
Inoltre possiamo creare anche i restanti gruppi Windows che serviranno
ad identificare gli utente non amministratori (“Domain Users”) e gli utenti
guest (“Domain Guests”):
# net groupmap add ntgroup=”Domain Users” unixgroup=users
# net groupmap add ntgroup=”Domain Guests” unixgroup=nogroup
Creiamo ora l'utente captain che utilizzeremo come amministratore del
dominio e che apparterrà al gruppo ntadmin.
# adduser captain
# usermod -g ntadmin captain
L'utente captain viene utilizzato per aggiungere le macchine direttamente
da Windows, quindi deve essere riconosciuto anche da SAMBA.
Aggiungiamo l'utente con
# smbpasswd -a captain
Profili roaming.
Creiamo ora la cartella /home_samba all'interno della quale verranno create
le cartelle netlogon, per gli script di logon, e profiles, per i vari profili
degli utenti:
# mkdir /home_samba
24/28
Dott.Ing.Ivan Ferrazzi
#
#
#
#
#
#
#
cd /home_samba
mkdir netlogon
mkdir profiles
chown root:users netlogon
chown root:users profiles
chmod 0775 netlogon
chmod 1775 profiles
Per attivare il roaming inseriamo le seguenti opzioni all'interno della
sezione [global]:
logon
logon
logon
logon
home = \\%L\%U\.profile
path = \\%L\profiles\%U
drive = H:
script = netlogon.bat
logon home
Identifica la home dell'utente per i comandi DOS NET.
logon path
Identifica la posizione dei roaming file.
logon drive
Identifica la lettera alla quale verrà abbinata la cartella home
presente nel sistema UNIX.
logon script
Identifica lo script che verrà fatto fartire lato client una volta loggati
al server.
Ora possiamo aggiungere le sezoini necessarie come segue:
[homes]
comment = home directory
read only = no
browseable = no
[profiles]
comment = profilo utenti
path = /home_samba/profiles
read only = no
create mask = 0600
directory mask = 0700
browseable = no
[netlogon]
comment = script eseguibili windows
path = /home_samba/netlogon
read only = yes
write list = +ntadmin
browseable = no
25/28
Dott.Ing.Ivan Ferrazzi
Compatibilità per la modifica delle passwords.
Se viene modificata una password su una macchina l'amministratore
dovrebbe cambiare la password anche su SAMBA. Per delegare a SAMBA
il compito di modificare la password in automatico possiamo inserire nella
sezione [global] le seguenti opzioni:
passwd program = /usr/bin/passwd %u
passwd chat = *new*password* %n\n *new*password* %n\n *changed*
unix passwd sync = yes
Le prime due righe modificano la password lato UNIX mentre l'ultima
sincronizza la password modificata tra UNIX e SAMBA.
Aggiungere macchine al dominio.
Quando dobbiamo aggiungere una macchina all'interno del dominio la
macchina deve essere riconosciuta dal PDC come macchina fidata.
Questo avviene controllando l'esistenza di un account con il nome
{nome_pc}$.
Possiamo aggiungere questo account manualmente o farlo aggiungere
automaticamente da SAMBA. In entrambi i casi abbiamo bisogno di un
gruppo che identifichi le varie macchine aggiunte. Il gruppo che
utilizziamo noi verrà chiamato machines e lo creiamo come segue:
# addgroup machines
Volendo aggiungere manualmente la macchina con hostname PC_PIPPO
possiamo scrivere:
# useradd -g machines -d /dev/null -s /bin/false -M PC_PIPPO$
# passwd -l PC_PIPPO$
Il parametro -l del comando passwd viene utilizzato per rendere
inutilizzabile la password dell'account.
L'altra possibilità che abbiamo è quella di fare aggiungere
automaticamente l'account a SAMBA nel momento in cui cerchiamo di
aggiungere una macchina al dominio. In questo caso aggiungiamo nella
sezione [global] la seguente opzione che ha il compito di eseguire lo
script definito proprio quando si cerca di eseguire questa operazione:
add machine script = /usr/sbin/useradd -d /dev/null -g machines \
-s /bin/false -M %u
Gestione dei privilegi.
SAMBA permette di attivare tipi di privilegi diversi per utenti che devono
26/28
Dott.Ing.Ivan Ferrazzi
gestire come amministratori sezioni di configurazione diverse. Questo
evita di dover fare un qualsiasi cosa come root. I privilegi che possiamo
utilizza li possiamo elencare con la richiesta:
# net -S localhost -U% rpc rights list
Dove -S identifica il server al quale vogliamo collegarci, mentre -U% ci
permette di collegarci in maniera anonima.
Il risultato sarà il seguente:
SeAddUserPrivilege
SeBackupPrivilege
SeDiskOperatorPrivilege
SePrintOperatorPrivilege
SeMachineAccountPrivilege
SeRemoteShutdownPrivilege
SeRestorePrivilege
SeTakeOwnershipPrivilege
per
per
per
per
per
per
per
per
gestire utenti e gruppi
gestire i backup e relativi file
gestire le condivisioni
gestire le stampanti
gestire le macchine da aggiungere
gestire il shutdown del server
gestire il ripristino dei file
diventare proprietario di file e cartelle
SAMBA vi permette di gestire i privilegi solamente se è attivata la
rispettiva opzione nella sezione [global]:
enable privileges = yes
L'associazione
dei
vari
privilegi
/var/lib/samba/account_policy.tdb.
viene
gestita
all'interno
del
file
Per vedere l'elenco degli account con i relativi privilegi settati possiamo
scrivere:
# net -S localhost -U% rpc rights list accounts
Se volessimo vedere l'elenco dei privilegi per un determinato account
usiamo:
# net -S localhost -U% rpc rights list accounts 'TEST\pippo'
Mentre possiamo usare il seguente comando per elencare tutti gli
account per i quali è stato attivato un determinato privilegio:
# net -S localhost -U% rpc rights list privileges SeDiskOperatorPrivilege
Se volessimo controllare l'attuale situazione all'interno di un determinato
dominio potremmo utilizzare il parametro -W che ci permette di indicare il
dominio in questione come segue:
# net -S localhost -U Administrator -W TEST rpc rights list
che richiederebbe l'elenco dei privilegi all'interno del dominio TEST come
utente Administrator.
27/28
Dott.Ing.Ivan Ferrazzi
Per assegnare all'utente pippo presente all'interno del dominio TEST il
privilegio SeDiskOperatorPrivilege possiamo scrivere
# net -S localhost -U root -W TEST rpc rights grant 'TEST\pippo' \
SeDiskOperatorPrivilege
Oppure possiamo togliere eventuali privilegi dati precedentemente con:
# net -S localhost -U root -W TEST rpc rights revoke 'TEST\pippo' \
SeDiskOperatorPrivilege
Modifiche da apportare a Windows Professional 7.
Quando si cerca di aggiungere una macchina Windows Professional 7
all'interno di un dominio gestito da SAMBA dobbiamo modificare alcune
impostazioni a livello di registry. Apriamo il registro di Windows con il
programma regedit e aggiungiamo i seguenti valori:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
\Parameters]
DWORD
Nome: DomainCompatibilityMode
Valore: 1
DWORD
Nome: DNSNameResolutionRequired
Valore: 0
Riavviamo il computer e proviamo ad aggiungere la macchina al nostro
dominio.
28/28