19.8.2 Samba in dettaglio
I daemon per la gestione del protocollo SMB sono
-
nmbd permette la ricerca dei NBNS e la navigazione (announcement) tra le risorse di
rete. Si occupa dei protocolli basati su UDP, rimanendo in ascolto sulla porta
137 (default) (v. man page nmbd(8));
-
smbd permette la condivisione di file e stampanti e fornisce il meccanismo di
autenticazione. Si occupa dei protocolli basati su TCP, rimanendo in ascolto
sulla porta 139 (default) (v. man page smbd(8));
-
winbindd
permette la risoluzione degli utenti e gruppi Unix-lke con i sistemi Windows NT e
fornisce un meccanismo di autenticazione. È utile nel caso in cui il sistema faccia
parte di un dominio Windows (NT o ADS) oppure se il dominio considerato ha
una relazione di trust con altri domini Windows (direttive idmap uid e idmap
gid) (v. man page winbindd(8));
____________________________________________________________________
Comando: nmbd
Path: /???/nmbd
SINTASSI
# nmbd [option]
DESCRIZIONE
-
option indica la modalità di funzionamento di nmbd. Può assumere i seguenti valori:
-
-D indica di avviarsi come daemon, cioè in background (default);
-
-F indica di non avviarsi come daemon;
-
-S indica di utilizzare come log lo standard output piuttosto che un file;
-
-i indica di avviarsi in modalità interattiva (come -F -S);
-
-h | --help
visualizza un aiuto sommario di nmbd;
-
-H filename
indica di utilizzare il file filename
come file LMHOSTS (per default il file utilizzato a tale scopo potrebbe
essere /usr/local/samba/lib/lmhosts, /usr/samba/lib/lmhosts o
/etc/samba/lmhosts);
-
-V visualizza la versione di nmbd;
-
-s filename
indica di utilizzare il file filename come file di configurazione (per
default viene utilizzato il file /usr/local/samba/lib/smb.conf);
-
-d level | --debug=level
indica il livello di dettaglio dei messaggi scritti nel log: più elevato è
il valore level e più messaggi saranno scritti nel log (per default level
è 0 - vengono scritti nel log soltanto errori bloccanti);
-
-l dirname | --logfile=dirname
indica la directory di base (dirname) per i file di log/debug, alla quale
saranno aggiunti i nomi dei file (es. log.smbd).
-
-p port
indica la porta UDP sulla quale rimanere in ascolto (default 137);
_______________________________________________________________
___________________________________________________________________________________________________________
Comando: smbd
Path: /???/smbd
SINTASSI
# nmbd [option]
DESCRIZIONE
-
option indica la modalità di funzionamento di smbd. Può assumere i seguenti valori:
-
-D indica di avviarsi come daemon, cioè in background (default);
-
-F indica di non avviarsi come daemon;
-
-S indica di utilizzare come log lo standard output piuttosto che un file;
-
-i indica di avviarsi in modalità interattiva (come -F -S);
-
-h | --help
visualizza un aiuto sommario di smbd;
-
-H filename
indica di utilizzare il file filename
come file LMHOSTS (per default il file utilizzato a tale scopo potrebbe
essere /usr/local/samba/lib/lmhosts, /usr/samba/lib/lmhosts o
/etc/samba/lmhosts);
-
-V visualizza la versione di smbd;
-
-s filename
indica di utilizzare il file filename come file di configurazione (per
default viene utilizzato il file /usr/local/samba/lib/smb.conf);
-
-d level | --debug=level
indica il livello di dettaglio dei messaggi scritti nel log: più elevato è
il valore level e più messaggi saranno scritti nel log (per default level
è 0 - vengono scritti nel log soltanto errori bloccanti);
-
-l dirname | --logfile=dirname
indica la directory di base (dirname) per i file di log/debug, alla quale
saranno aggiunti i nomi dei file (es. log.smbd).
-
-p port
indica la porta TCP sulla quale rimanere in ascolto. Possono essere
specificati più numeri di porta separati dal carattere ‘,’ (default: 139
per SMB su NetBIOS over TCP e 445 per SMB su TCP);
-
-b visualizza informazioni su come è stato compilato Samba;
____________________________________________________________________
___________________________________________________________________________________________________________________
Comando: winbindd
Path: /???/winbindd
SINTASSI
# winbindd [option]
DESCRIZIONE
-
option indica la modalità di funzionamento di winbindd. Può assumere i seguenti
valori:
-
-F indica di non avviarsi come daemon;
-
-S indica di utilizzare come log lo standard output piuttosto che un file;
-
-i indica di avviarsi in modalità interattiva (come -F -S);
-
-h | --help
visualizza un aiuto sommario di winbindd;
-
-V visualizza la versione di winbindd;
-
-s filename
indica di utilizzare il file filename come file di configurazione (per
default viene utilizzato il file /usr/local/samba/lib/smb.conf);
-
-d level | --debug=level
indica il livello di dettaglio dei messaggi scritti nel log: più elevato è
il valore level e più messaggi saranno scritti nel log (per default level
è 0 - vengono scritti nel log soltanto errori bloccanti);
-
-l dirname | --logfile=dirname
indica la directory di base (dirname) per i file di log/debug, alla quale
saranno aggiunti i nomi dei file (es. log.smbd).
-
-n indica di disabilitare la cache, in maniera che winbindd inoltri sempre
la richiesta al domain controller prima di rispondere al client;
-
-Y indica di avviarsi come un processo singolo;
____________________________________________________________________________________________________________________
[da completare ...]
19.8.2.1 Validazione utente
Quando un utente tenta di accedere ad una risorsa condivisa da un sistema, Samba determina
se esso può accedervi, secondo quanto riportato ne seguenti passi. Se la condizione
controllata in un passo è soddisfatta, all’utente viene permesso l’accesso senza valutare i
passi successivi (se la direttiva security è stata impostata a share e per la risorsa
condivisa è stata specificata la direttiva guest only = yes i passi da 1 a 5 vengono
saltati). Se nessuna condizione viene soddisfatta, all’utente viene negato l’accesso alla
risorsa.
- Le credenziali username/password sono state inviate dal client e corrispondono
a quelle di un utente sul sistema Unix-like. Allora l’accesso alla risorsa viene
effettuato con l’utente in questione.
- Il client ha inviato la password corretta dell’utente che precedentemente è stato
autenticato dal sistema Unix-like. Allora l’accesso alla risorsa viene effettuato con
l’utente in questione.
- Il client ha inviato una password che viene associata alo username composto dal
nome NetBIOS del client e dagli username da esso precedentemente forniti. Allora
l’accesso alla risorsa viene effettuato con l’utente che verifica tale controllo.
- Il client ha inviato il token relativo ad una precedente autenticazione di un utente.
Allora l’accesso alla risorsa viene effettuato con l’utente in questione.
- Il client ha inviato una password ed essa coincide con quella di uno degli utenti
elencati nella direttiva user relativa alla risorsa (sezione all’interno del file di
configurazione smb.conf). Allora l’accesso alla risorsa viene effettuato con l’utente
che verifica tale controllo.
- Il client fornisce uno username che corrisponde a quello specificato con la direttiva
guest account relativo alla risorsa a cui vuole accedere. Allora l’accesso alla risorsa
viene effettuato con l’utente in questione (senza alcun controllo sulla password).
Una delle direttive più importanti presenti nel file di configurazione di Samba è security che
specifica come avviene il dialogo client-server, in particolare il client, in base a tale
impostazione, decide se e come inviare le credenziali di autenticazione dell’utente al server.
Oltre ai livelli di sicurezza previsti da SMB, Samba ne mette a disposizione altri, ai
quali si fa generalmente riferimento con il nome di security mode, riportati di
seguito
-
share coincide con lo share level di Windows. Il client si autentica ogni volta che
vuole accedere ad una risorsa, inviando una password per ogni risorsa (senza
far riferimento all’utente che la richiede) - Questa impostazione è consigliata se
si utilizzano utenti Windows con credenziali (username e password) diverse da
quelle degli utenti presenti sui sistemi Unix-like.
-
user (default) per accedere ad una risorsa, il client deve prima autenticarsi passando
le credenziali dell’utente che vuole tentare l’accesso (è possibile utilizzare
la cifratura nella comunicazione della password) - Questa impostazione è
consigliata se si utilizzano utenti Windows con le stesse credenziali (username e
password) degli utenti presenti sui sistemi Unix-like.
-
domain
questa modalità funziona correttamente soltanto se si utilizza net per aggiungere
il sistema Unix-like al domino Windows. Samba così autentica gli utenti passando
le credenziali (la password è cifrata) ad un PDC o BDC, come farebbe un server
Windows (deve comunque esistere anche un utente con le stesse credenziali sul
sistema Unix-like). Dal punto di vista del client è identico alla modalità user.
-
server
in questa modalità Samba tenta di autenticare l’utente passando le credenziali
(la password è cifrata) ad un altro server SMB (ad es. un sistema Windows NT).
Se ciò non va a buon fine viene utilizzata la modalità user. Dal punto di vista
del client è identico alla modalità user.
-
ads in questa modalità Samba funziona come un membro di un dominio ADS e quindi
è necessario che sul sistema sia installato Kerberos (e correttamente configurato)
oltre ad aggiungere il sistema Unix-like al dominio Windows con net. Samba
non funzionerà comunque da Active Directory Domain Controller.
È anche possibile utilizzare smbd in modalità ibrida, in maniera che offra security mode
share e user con alias NetBIOS differenti.
È possibile che la password scambiata tra il client ed il server sia cifrata o meno,
dipendentemente da quanto specificato dalla direttiva encrypted password. La cifratura
avviene con l’algoritmo MD4 (NT hash). Le versioni più recenti di Windows non permettono
lo scambio di password in chiaro.
[da completare ...]
19.8.2.2 Il file di configurazione
Il file di configurazione di Samba è /usr/local/samba/lib/smb.conf (in alcuni sistemi può
essere /etc/samba/smb.conf o /usr/samba/lib/smb.conf). Esso è un file di testo la cui
sintassi è analoga a quella utilizzata dai file .ini di Windows, cioè in esso possono
essere presenti varie sezione, il cui nome è racchiuso tra parentesi quadre ‘[’ e ‘]’.
Ogni sezione indica una risorsa da condividere, a meno delle sezioni particolari
[global], [homes] e [printers] sono sezioni particolari), eccetto [global] che contiene
impostazioni globali, piuttosto che relative ad una specifica risorsa (v. man page
smb.conf(5)).
Le impostazioni che appaiono nelle righe successive al nome di una sezione si riferiscono
alla sezione stessa e sono del tipo
directive=value
dove
-
directive
è il nome di una direttiva riconosciuta da Samba;
-
value è il valore con il quale impostare la direttiva;
Le direttive che appaiono nella sezione [global] si riferiscono ad impostazioni globali
o impostano dei valori di default che possono essere reimpostati nelle specifiche
sezioni.
La sezione [homes] si riferisce alle home directory degli utenti presenti sul sistema,
facendo in modo che Samba crei automaticamente una risorsa condivisa con il nome
dell’utente.
All’interno di tale sezione può essere utile usare la macro %S per specificare eventualmente
un path diverso per la directory da condividere. Ad esempio
path = /data/pchome/%S
La sezione [printers] viene utilizzata per le stampanti in maniera analoga a [homes], cioè
Samba in questo modo permette la connessione ad una qualunque stampante definita sul
sistema.
Il file smb.conf contiene le direttive alle quali fanno riferimento i daemon sopra elencati e
può essere modificato sia manualmente che per mezzo di interfacce grafiche, come SWAT
(Samba Web Administration Tool) (v. man page swat(8)), raggiungibile sulla porta 901
(es. http://localhost:901).
Un file minimale di configurazione di Samba può contenere le seguenti impostazioni
[global]
workgroup = MyGroup
netbios name = MyHost
[share1]
path = /shared
comment = Shared files
[da completare ...]
È possibile controllare la correttezza del file di configurazione con il comando
# testparm /etc/samba/smb.conf
Per elencare le risorse condivise da una macchina si può utilizzare il comando
$ smbclient -L hostname
Per collegarsi ad una risorsa da un sistema Unix-like, è possibile utilizzare il
comando
$ smbclient //hostname/resource
[da completare ...]