SAMBA · Creare amministratori e gruppi di dominio ... SAMBA mette a disposizione il comando...

28
Dott.Ing.Ivan Ferrazzi SAMBA Introduzione al file sharing con SAMBA Dott. Ing. Ivan Ferrazzi V1.1 del 09/03/2012 1/28

Transcript of SAMBA · Creare amministratori e gruppi di dominio ... SAMBA mette a disposizione il comando...

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 FerrazziPermission 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 generaleIntroduzione.........................................................................................................4

Installazione di Samba.....................................................................................4Il file di configurazione........................................................................................5

La sintassi........................................................................................................6Le sezioni speciali............................................................................................6Le variabili.......................................................................................................7Opzioni base per la sezione [global]................................................................7Opzioni base per le sezioni personalizzate......................................................9Opzioni di accessibilità per le sezioni personalizzate.......................................9Opzioni per l'accesso ai file per le sezioni personalizzate..............................10Controllare le opzioni settate.........................................................................11

Account e autentificazione................................................................................12Configurazione base con security=user........................................................12Accesso guest con security=user..................................................................13Sistemi di autentificazione.............................................................................14Memorizzazione degli account.......................................................................15Mappatura degli utenti...................................................................................17

SAMBA nel modo Windows................................................................................18La risoluzione dei nomi..................................................................................18Il browsing dei domain controller...................................................................19La gestione dei link simbolici.........................................................................20La gestione dei file nascosti...........................................................................20La gestione dei DOS attributes......................................................................20

PDC con SAMBA.................................................................................................22Configurazione di SAMBA come PDC..............................................................22Mappatura dei gruppi.....................................................................................23Creare amministratori e gruppi di dominio....................................................24Profili roaming................................................................................................24Compatibilità per la modifica delle passwords...............................................26Aggiungere macchine al dominio...................................................................26Gestione dei privilegi.....................................................................................26Modifiche 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 = WORKGROUPnetbios name = DEBIANserver string = Linux Samba Server

[public]path = /publicread 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 restartservice 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|noPermette 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|noDi 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|noQueste 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|noQuesta 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|noPermette di definire la proprietà di accesso alla condivisione. Se attivata il contenuto verrà messo a disposizione in sola lettura.

writable = yes|noAnche 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 = WORKGROUPnetbios name = DEBIANserver string = Linux Samba Serversecurity = userpassdb backend = tdbsam

[public]path = /publicread 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 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.

-a utente per creare un nuovo utente che deve essere presente come utente Linux

-d utente per disabilitare un utente-e utente per riabilitare un utente-h per visualizzare l'aiuto del comando-n utente per creare un utente con password nulla-x utente 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=testpassword=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 = WORKGROUPnetbios name = DEBIANserver string = Linux Samba Serversecurity = usermap to guest = bad userguest account = smbguest

[public]path = /publicguest ok = yesread only = Yes

map to guest = never|bad password|bad uid|bad userPermette di definre la circostanza per la quale viene utilizzato l'account definito con l'opzione guest account. Le possibili circostanze possono essere:

never Restituisce un errore di login. Questo è il comportamento di default.

bad password L'utente è corretto, ma la password è errata.bad uid Da usare con security=ads oppure security=domain.

Quando SAMBA non trova l'UID corrispondente dopo aver eseguito correttamente il login.

bad user 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.

NTLMv1NTLM è 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

NTLMv2Questa è 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 = yeslanman auth = nontlm 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 getlocalsidSID for domain PROVA is: …

Per recuperare l'ultimo identificatore relativo utilizzato (RID) possiamo scrivere

#net maxridCurrently 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 disabilitatoL account bloccato per uso di password errataN account senza password (solo se null passwords = yes)U user accountX 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 case-insensitive ed associato all'utente definito a sinistra. Un possibile file potrebbe avere il seguente contenuto:

!test = “Utente Test” test_usernobody = *

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 file hosts di SAMBAhosts /etc/hosts di Linuxwins il server WINSbcast 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 controller16 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 = yesos level = 255preferred 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|noPermette di attivare o meno l'inseguimento dei link simbolici

wide links = yes|noPermette 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 per identificare i file recentemente modificatiReadOnly per indicare i file di sola letturaSystem per identificare i file di sistemaHidden per 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 valore X nel blocco proprietarioSystem valore X nel blocco gruppoHidden 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 readonly = yes | no | permissionsmap archive = yes | nomap hidden = yes | nomap 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 = SERVERworkgroup = TESTDOMsecurity = userpasswd backend = tdbsamencrypt passwords = yesdomain master = yesdomain logon = yes

Attiviamo inoltre le varie opzioni che permettono al nostro server di diventare local master browser aggiungendo anche le seguenti righe

os level = 255preferred master = yeslocal 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 listSystem 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 verbose ntgroup=”System Admins”System Admins

SID : S-1-5-21-0..9-0..9-0..9-3016Unix gid : 1006Unix group : sysadminGroup type : Local GroupComment : 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 home = \\%L\%U\.profilelogon path = \\%L\profiles\%Ulogon drive = H:logon script = netlogon.bat

logon homeIdentifica la home dell'utente per i comandi DOS NET.

logon pathIdentifica la posizione dei roaming file.

logon driveIdentifica la lettera alla quale verrà abbinata la cartella home presente nel sistema UNIX.

logon scriptIdentifica lo script che verrà fatto fartire lato client una volta loggati al server.

Ora possiamo aggiungere le sezoini necessarie come segue:

[homes]comment = home directoryread only = nobrowseable = no

[profiles]comment = profilo utentipath = /home_samba/profilesread only = nocreate mask = 0600directory mask = 0700browseable = no

[netlogon]comment = script eseguibili windowspath = /home_samba/netlogonread only = yeswrite list = +ntadminbrowseable = 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 %upasswd 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 per gestire utenti e gruppiSeBackupPrivilege per gestire i backup e relativi fileSeDiskOperatorPrivilege per gestire le condivisioniSePrintOperatorPrivilege per gestire le stampantiSeMachineAccountPrivilege per gestire le macchine da aggiungereSeRemoteShutdownPrivilege per gestire il shutdown del serverSeRestorePrivilege per gestire il ripristino dei fileSeTakeOwnershipPrivilege per 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 viene gestita all'interno del file /var/lib/samba/account_policy.tdb.

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: 1DWORD Nome: DNSNameResolutionRequired Valore: 0

Riavviamo il computer e proviamo ad aggiungere la macchina al nostro dominio.

28/28