| Introduzione ad AFS
La seguente nota introduce i concetti
base e i comandi più comuni di AFS; una guida più dettagliata
si può ottenere collegandosi per esempio:
al CERN, attraverso l'URL http://wsspinfo.cern.ch/file/doc/afsug.html
a Cornell con l'URL http://www.tc.cornell.edu./UserDoc/Hardware/SP/AFS
alla Transarc Corporation che commercializza questo prodotto
con l'URL http://www.transarc.com.
AFS (Andrew File System) è un file
system distribuito che permette l'accesso a files o directory
residenti su macchine connesse in rete locale e geografica.
La struttura e i meccanismi di indirizzamento di AFS consentono
la creazione di file system distribuiti su un gran numero
di nodi che possono risiedere in siti geografici diversi.
I comandi di AFS consentono un accesso semplice, soprattutto
per coloro che conoscono l'ambiente Unix, rapido ed efficiente.
AFS si basa sul modello client/server;
i dati sono memorizzati su una o più macchine server e
vengono trasferiti alle macchine client (cached) soltanto
quando vengono richiesti. Da questo momento in poi, tutte
le modifiche sono eseguite sulla copia locale e sono riportate
sul server solo alla chiusura del file.
In AFS viene definita "cell"
un'unità amministrativa autonoma che generalmente coincide
con il dominio TCP/IP .
Dal punto di vista hardware, una cell si può considerare
come un gruppo di macchine server e client, per esempio
un Dipartimento universitario, un Istituto del CNR etc.
L'amministratore di ciascuna cell determina la configurazione
delle macchine client e la quantità di spazio per memorizzare
i files sulle macchine server.
Un raggruppamento di cell correlate tra loro viene chiamato
"site".

Accesso al file system
Per garantire sicurezza al file system,
l'accesso a AFS è soggetto ad autorizzazione. Esistono due
possibilità per accedere a AFS:
 |
login
veloce: nelle cell in cui è stata installata la versione
di login dell'AFS, l'utente è automaticamente autorizzato
quando fornisce correttamente un nome e la password
associata;
|
 |
login
in 2 step: nelle cell che non usano la versione di
login dell'AFS, è necessario prima fare login in Unix
e successivamente farsi autorizzare. In questo caso
si possono avere 2 password diverse, una per il sistema
Unix e una per l'AFS in quanto viene richiesta una
password per ogni step. |
L'autorizzazione ad accedere al file
space dell'AFS avviene mediante l'assegnazione di un "token"
che viene usato come prova per tutti i file server che l'utente
è "authenticated".
Il token può essere considerato come un biglietto dell'autobus
che permette di viaggiare nel file system per tutto il tempo
della sua validità.
Se l'utente non ha un token, AFS lo considera come un utente
anonimo (fa parte del gruppo system:anyuser meglio descritto
in Protezione dei files) e il suo
accesso al file system è severamente limitato.
Ogni token è valido solamente nella cell in cui è stato
lanciato e si può avere al massimo un token per ogni macchina
client; se per esempio si fa telnet su 2 diverse macchine,
si avrà un token diverso su ciascuna delle 2 macchine.
Ogni token ha un periodo limitato di validità, per vedere
la scadenza si può usare il comando: tokens
che fornisce anche il nome dell'utente
associato al token e il nome della cell in cui è valido.
Il valore default viene impostato dall'amministratore
di sistema, generalmente è di 100 ore.
Un token può essere rinnovato in qualsiasi momento con
il comando: klog
che, dopo aver richiesto la password
dell'utente e averne verificato la correttezza, sostituisce
il vecchio token con il nuovo. Questo comando può essere
utilizzato anche nel caso in cui il vecchio token stia
per scadere e l'utente desideri mandare in esecuzione
in background un job molto lungo.
In alcuni casi, per esempio se un
utente lascia la propria workstation incostudita e non
desidera che altri utenti possano accedere ai files di
AFS sotto la sua identità, può fare logoff o disabilitare
l'accesso a AFS; a questo scopo esiste il comando: unlog
che distrugge il token valido per
quella cell. Per poter accedere di nuovo a AFS è necessario
lanciare il comando klog.
Se si desidera cambiare la password di accesso a AFS,
esiste il comando: kpasswd
che prima di chiedere la nuova password,
chiede e controlla quella vecchia.

Accesso ai files
Dopo aver fatto login e aver dimostrato
di essere autorizzato a lavorare in AFS, l'utente può accedere
ai files di AFS come farebbe sul file system di Unix; l'unica
differenza risiede nella possibilità di accedere ad una
quantità notevole di files, non limitata a quelli sulla
propria home directory, ma estesa a tutti i files distribuiti
in rete e per i quali è autorizzato.
Il file system di AFS usa una struttura
gerarchica ad albero, simile a quella di Unix, in cui
ogni pathname inizia con /afs; quindi /afs
è la radice (root) del file space di AFS che può essere
considerato come un'estensione del file space della macchina
locale.
Il secondo elemento nel pathname
è generalmente il nome della cell che contiene i files.
Il resto del pathname dipende da
come è stato organizzato il file space locale, per vederlo
è necessario eseguire il comando cd sulla directory
/afs/cellname e successivamente il comando ls
per vedere le directory al terzo livello. Per accedere
files e directory sulla cell locale è necessario specificare
il pathname ed avere il permesso di accedere ai files
desiderati.
AFS, a differenza di NFS (Networking File System), usa
una struttura di directory uniforme per tutti i site collegati
in rete; quindi il pathname assoluto di ogni file inizia
sempre con /afs seguito dal nome della cell.

Volumi
Unix divide i dischi fisici in partizioni
logiche, AFS divide le partizioni in sottosezioni chiamate
volumi.
Un volume quindi contiene un sottoalbero di directory e
di files.
L'accesso a un volume è fornito dal "Mount Point"
che punta alla locazione (macchina server e partizione)
del volume; si può quindi paragonare a una directory di
Unix.
Poiché ad ogni home directory d'utente è quasi sempre collegato
un volume distinto, quando con il comando cd si passa
da una home directory ad un'altra, molto spesso si passa
da un volume ad un altro che può essere su una macchina
server diversa e su una diversa partizione. Naturalmente
questo è trasparente all'utente perché AFS interpreta il
"Mount Point" e recupera automaticamente files
o directory richiesti dall'appropriata locazione, quindi
l'utente non è tenuto a sapere dove si trova il proprio
volume e neppure su quale macchina server.
Molte cell usano un volume per ogni
home directory d'utente, questo fa in modo che tutti i
files e le sottodirectory di quell'utente siano memorizzati
su una partizione della stessa macchina server. Generalmente
i volumi degli utenti sono chiamati user.username,
quindi l'utente pippo nella cell di nome enea.it
avrà un volume chiamato user.pippo e un "Mount
Point" nel directory /afs/enea.it/sede-di-lavoro/pippo
chiamato pippo che punta al volume user.pippo.
Per garantire maggiore affidabilità
e disponibilità, AFS fornisce la possibilità di duplicare
i volumi su più macchine server, quindi nel caso in cui
un file server non sia operativo, soltanto i volumi presenti
su quel server sono inaccessibili, mentre sono disponibili
tutti quelli memorizzati sugli altri server. Questa possibilità
viene generalmente usata solo per dati importanti, usati
dalla maggioranza degli utenti.
Ogni volume ha una dimensione massima,
detta anche quota; viene assegnata dall'amministratore
di sistema e rappresenta la quantità massima di spazio
disco che il volume può contenere.
Poiché su un volume non si può memorizzare una quantità
di dati superiore alla quota, è opportuno controllare
periodicamente il grado di riempimento del proprio volume.
Se la quota viene superata, si riceve un messaggio di
errore e i dati non vengono scritti su disco.
L'utente AFS lavora sulla propria
macchina, detta client, su cui gira un processo chiamato
"Cache Manager" che gestisce lo spazio dell'AFS.
Quando un utente accede un file, il "Cache Manager"
richiede il file all'appropriata macchina server e ne
scrive una copia sullo spazio disco della macchina client
in un apposito file system chiamato cache.
L'utente lavora sulla copia locale senza modificare la
versione centrale del file, i cambiamenti effettuati sulla
copia locale vengono riportati automaticamente sulla versione
centrale solo quando viene chiuso il file.
Quando la versione centrale di un file viene modificata,
AFS avvisa tutti gli altri "Cache Manager" che
ne hanno una copia, che la loro versione non è più valida
e provvede al trasferimento della copia aggiornata.
AFS non impedisce che due utenti
modifichino contemporaneamente lo stesso file. Poiché
le modifiche sono riportate sul file system all'atto della
chiusura del file, quelle apportate dall'utente che termina
per primo la sua attività restano in vigore fino alla
conclusione del lavoro dell'altro. A quel momento esse
vengono ricoperte dalle modifiche apportate dal secondo
utente e sono definitivamente perdute. E' quindi necessario
evitare situazioni di questo tipo attraverso una oculata
definizione dei diritti di accesso.

Protezione dei files
Per controllare l'accesso ai files,
viene utilizzato un meccanismo molto più preciso di quello
usato da Unix. Tale meccanismo è basato su una lista di
controllo, chiamata ACL (Access Control List) che consiste
in una lista di utenti con i corrispondenti diritti di accesso
alla directory. Per ogni directory del file system di AFS
viene definita una ACL che viene applicata a tutti i files
e sottodirectory presenti su quella directory.
Tutti i files ereditano i diritti di accesso associati alla
directory madre; se un file viene spostato da una directory
ad un'altra, esso acquisisce i diritti di accesso della
nuova directory.
Se viene cambiata l'ACL su una directory, la protezione
di tutti i suoi files viene cambiata.
Quando viene creata una sottodirectory, essa eredita automaticamente
i diritti di accesso della directory madre. L'ACL della
sottodirectory può essere diversa da quella della directory
madre, tuttavia se l'ACL della directory madre è più restrittiva,
possono insorgere problemi nell'accesso alla sottodirectory.
Nelle ACL possono essere specificati
utenti singoli oppure collezioni di utenti chiamate "Protection
Group"; in quest'ultimo caso il permesso di accesso
si applica a tutti i componenti del gruppo.
Ogni ACL può contenere al massimo 20 utenti o gruppi di
utenti.
Esistono due tipi di gruppi: quelli chiamati regolari
e quelli senza prefisso; i nomi dei gruppi regolari sono
formati di 2 parti separate dal carattere :, del tipo:
owner-name:group-name
in cui la prima parte indica il
nome del possessore del gruppo mentre la seconda fornisce
il nome del gruppo.
I nomi dei gruppi senza prefisso sono formati solo dalla
parte "group-name"; tali gruppi possono essere
creati solamente dagli amministratori di sistema.
Generalmente i gruppi vengono creati dagli utenti, tuttavia
tre sono creati automaticamente dal sistema:
 |
system:anyuser
- Questo gruppo comprende chiunque può accedere a
questa cell, inclusi gli utenti che hanno fatto login
su una workstation locale ma non sono autorizzati
ad usare AFS (non hanno un token valido).
|
 |
system:authuser
- Questo gruppo comprende tutti gli utenti attualmente
autorizzati a lavorare in AFS (hanno un token valido).
|
 |
system:administrators
- Questo gruppo comprende solamente le persone designate
come amministratori di sistema. |
Esiste un limite massimo sul numero
di gruppi che un utente può creare che è indicato come "group
quota". Tale numero viene impostato dall'amministratore
del sistema (il default è 20) e viene modificato tutte le
volte che viene creato un nuovo gruppo o cancellato uno
esistente.
Poiché un gruppo in AFS è una lista
di utenti individuali che hanno gli stessi permessi di
accesso ai file di AFS, può essere utile invece di aggiungere
o togliere dall'ACL i vari utenti separatamente, aggiungere
o togliere gli utenti dai gruppi e modificare la lista
ACL in cui sono compresi i gruppi.
Quando viene creato un gruppo, automaticamente
chi lo crea diviene il possessore e l'unico amministratore
del gruppo, può quindi inserire nuovi utenti, cancellarli,
etc.

Permessi di accesso
La protezione del singolo file dipende
dalla combinazione dei diritti specificati nell'ACL e dei
diritti di accesso ammessi da Unix che, lo ricordiamo, sono
in lettura, in scrittura e in esecuzione. Nell'ACL sono
previsti 7 diritti di accesso associati alla directory (quindi
a tutti i files e sottodirectory residenti su quella directory)
che possono essere suddivisi in 2 livelli:
 |
il
primo livello controlla l'accesso alla directory (LOOKUP,
INSERT, DELETE e ADMINISTER);
|
 |
il
secondo controlla l'accesso ai files presenti nella
directory (READ, WRITE e LOCK). |
Ogni diritto di accesso può essere
abbreviato in un solo carattere come viene mostrato fra
parentesi nella definizione sottostante.
L'accesso LOOKUP (l) permette al
possessore di usare il comando ls per avere la
lista dei nomi dei files e sottodirectory della directory
stessa, ma non di leggerne il contenuto e di esaminare
l'ACL relativa a questa directory.
L'accesso INSERT (i) permette al possessore di aggiungere
nuovi files nella directory o creare nuove sottodirectory.
L'accesso DELETE (d) permette di cancellare files o sottodirectory
dalla directory.
L'accesso ADMINISTER (a) permette di modificare l'ACL
. Gli utenti generalmente possono modificare l'ACL relativa
alla propria home directory.
L'accesso READ (r) permette di leggere il contenuto dei
files della directory e di esaminare la lista dei files
delle sottodirectory.
L'accesso WRITE (w) permette di modificare il contenuto
dei files della directory e di cambiare i diritti di accesso
permessi da Unix con il comando chmod.
L'accesso LOCK (k) permette di far girare programmi che
hanno bisogno di un uso esclusivo della directory o dei
files.
Questi diritti di accesso possono
essere combinati fra loro in vari modi, ma le combinazioni
più usate sono le seguenti:
 |
write-
rlidwk (tutti i diritti meno ADMINISTER)
|
 |
read
- rl (READ e LOOKUP)
|
 |
all
- rlidwka
|
 |
none
- cancella tutti i diritti |
Ogni utente, per poter accedere in
qualsiasi momento ai propri sottodirectory, deve avere almeno
l'accesso LOOKUP sui propri directory; quindi deve essere
autorizzato in uno dei 3 modi seguenti:
- fa parte di un gruppo di sistema
(system:anyuser o system:authuser);
- è autorizzato come utente individuale;
- fa parte di un gruppo di utenti
autorizzati definito da altri utenti.
AFS controlla l'accesso ai propri files
mediante 2 liste:
 |
Normal
Rights contiene l'utente o il gruppo di utenti che
possono eseguire le azioni specificate;
|
 |
Negative
Rights contiene l'utente o il gruppo di utenti a cui
è vietata l'esecuzione delle azioni specificate. |
Poiché il file server prima controlla
la Normal Rights e successivamente la Negative Rights, se
per esempio si desidera dare l'accesso READ a tutte le persone
di un gruppo meno una, si può inserire il gruppo nella lista
Normal Rights e la singola persona nella lista Negative
Rights.
Quindi per impedire l'accesso ad una directory esistono
2 modi:
- eliminare l'utente o il gruppo
dalla lista Normal Rights;
- aggiungere l'utente o il gruppo
nella lista Negative Rights.
Poiché l'AFS permette di prevenire
che altri utenti scrivano accidentalmente sui propri files
solamente limitando l'accesso alla directory attraverso
l'ACL, è opportuno porre molta attenzione nel definire e
nel modificare l'ACL.

Suddivisione dei comandi
I comandi di AFS possono essere suddivisi
in 3 gruppi:
 |
comandi
di tipo "file server", sono sempre preceduti
da fs, servono per controllare lo stato dei
files servers e per controllare e modificare le ACL;
|
 |
comandi
di tipo "protection server", sono sempre
preceduti da pts, servono per creare e modificare
i "Protection Group";
|
 |
comandi
vari (per es. tokens, klog, etc). |
Per avere una lista completa dei comandi
di tipo fs e pts e una breve descrizione
è sufficiente scrivere a terminale:
fs help oppure pts
help
Per vedere la sintassi, lo scopo,
gli alias dei comandi di tipo fs e pts
è necessario digitare:
fs help comando
oppure pts help comando
Per vedere la sintassi di un comando
basta fare:
fs comando -help
oppure pts comando -help

Comandi di tipo file server
Il comando:
fs quota [-path<dir/filepath>]
fs q [-p<dir/filepath>]
fornisce la percentuale della quota
utilizzata sul volume che contiene una specificata directory
o file.
Il comando:
fs listquota [-path<dir/filepath>]
fs lq [-p<dir/filepath>]
fornisce il nome del volume, la
sua dimensione massima, il numero di blocchi (ogni blocco
è di 1024 bytes) correntemente in uso, la percentuale
usata del volume e la percentuale di spazio usato sulla
partizione.
Il comando:
fs examine [-path<dir/filepath>]
fs exa [-p<dir/filepath>]
fornisce il nome del volume, la
sua dimensione massima, il numero di blocchi in uso, la
dimensione massima della partizione e il numero dei blocchi
disponibili sulla partizione del disco che contiene il
volume.
Il comando:
fs whereis [-path <dir/filepath>]
fs whe [-p <dir/filepath>]
fornisce il nome della macchina
server su cui è memorizzato un certo file o directory.
Volumi che contengono files binari, per esempio editori,
sono spesso copiati su più macchine server, in modo che
se una di queste non è operativa, i files siano sempre
disponibili sulle altre. In questo caso il comando fornisce
la lista di tutte le macchine server.
Se una macchina server non è operativa,
è impossibile accedere ai files memorizzati su di essa
e salvare eventuali cambiamenti.
Il comando:
fs checkservers [-cell <cellname>][-all]
fs checks [-c <cellname>][-all]
permette di conoscere lo stato delle
macchine server di una cell. Se viene lanciato senza argomenti
fornisce informazioni sulla propria cell; se viene specificato
il nome di una cell fornisce i dati di quella; se viene
fornito il flag -all da informazioni su tutte
le cell con cui il "Cache Manager" è in contatto.
Poiché la risposta del comando può ritardare di qualche
minuto per ogni macchina server che non risponde immediatamente,
se si desidera avere subito il terminale libero, è consigliabile
eseguire il comando in background aggiungendo in fondo
alla riga il carattere &.
Il comando:
fs listacl [-path<dir/filepath>]
fs la [-p<dir/filepath>]
viene usato per vedere la lista
ACL relativa ad una o più directory. Esso fornisce la
lista dei nomi degli utenti o dei gruppi di utenti e il
permesso di accesso associato ad ognuno abbreviato alla
singola lettera come abbiamo visto precedentemente.
Viene mostrata la lista Normal Rights e, separatamente,
se esiste, la lista Negative Rights.
Per modificare la lista ACL relativa
ad una directory, esiste il comando:
fs setacl -dir <directory>
-acl <entries> [-clear][-negative]
fs sa -d <directory> -a <entries>
[-c][-n]
Ogni utente può modificare una ACL
su cui ha il diritto di amministratore, generalmente ogni
utente può farlo per la propria home directory e i suoi
sottodirectory.
Il flag -clear è da usare con molta cautela perché
rimuove tutte le entrate nella ACL specificata prima di
aggiungere quelle nuove; il flag -negative serve
per modificare la lista Negative Rights.
I diritti di accesso specificati nel comando per un utente
o un gruppo di utenti non vengono aggiunti a quelli eventualmente
già esistenti, bensì li sostituiscono.
Per evitare problemi, si consiglia molta prudenza nel
modificare l'ACL e di farlo solo quando è chiaro quello
che si vuole ottenere.

Comandi di tipo protection server
Il comando:
pts membership -nameorid <user
o groupname>
pts m -na <user o groupname>
fornisce la lista dei gruppi a cui
appartiene un utente (specificando user) oppure
la lista dei membri di un gruppo specifico (fornendo groupname).
Il comando:
pts examine -nameorid <user
o groupname>
pts e -na <user o groupname>
dopo aver confermato l'esistenza
dell'utente o del gruppo nel sistema, specifica:
 |
l'"AFS
UID" dell'utente o del gruppo, cioé un numero,
negativo per i gruppi e positivo per gli utenti, usato
internamente dal server,
|
 |
il
nome dell'utente o del gruppo possessore del gruppo,
|
 |
il
nome dell'utente che ha creato il gruppo,
|
 |
il
numero dei gruppi a cui l'utente appartiene oppure
il numero di utenti che appartengono al gruppo,
|
 |
un
flag che indica chi può eseguire certe azioni su questo
gruppo,
|
 |
la
"group quota" dell'utente, cioé un numero
che indica quanti gruppi può ancora creare l'utente
specificato.Se viene specificato il nome del gruppo
questo numero non è significativo ed è sempre 0. |
Il comando:
pts listowned -nameorid <user
o groupname>
pts listo -na <user o groupname>
fornisce la lista di tutti i gruppi
che un utente possiede (specificando user) oppure
la lista di tutti i gruppi che appartengono al gruppo
specificato.
Il comando:
pts creategroup -name <groupname>
[-owner <ownergroup>]
pts cg -na <groupname> [-o <ownergroup>]
serve per creare un nuovo gruppo;
l'utente che lancia questo comando viene registrato come
il possessore del gruppo, se si desidera che il possessore
sia un altro utente è necessario mettere il flag -owner.
Poiché un utente può creare soltanto gruppi regolari,
il nome del gruppo deve avere il formato: owner-name:group-name;
quindi la prima parte del nome del gruppo deve coincidere
con quella del possessore del gruppo.
Naturalmente un gruppo appena creato non ha membri, per
riempirlo esiste il comando:
pts adduser -user <username>
-group <groupname>
pts ad -u <username> -g <groupname>
che aggiunge un utente nel gruppo
specificato. L'effetto di questo comando non è immediato
in quanto l'utente, per poter accedere ai diritti del
gruppo specificato deve autorizzarsi mediante il comando
klog; in caso contrario continua ad avere i diritti
acquisiti con il precedente token.
Il comando:
pts removeuser -user <username>
-group <groupname>
pts rem -u <username> -g <groupname>
serve per togliere un utente dal
gruppo specificato; anche in questo caso l'effetto non
è immediato, l'utente perde i vecchi diritti del gruppo
solamente dopo aver lanciato il comando klog
oppure alla scadenza del token.
Il comando:
pts delete -nameorid <user
o groupname>
pts del -na <user o groupname>
serve per eliminare completamente
un utente oppure un gruppo.
Il comando:
pts chown -name <groupname>
-owner <newowner>
pts ch -na <groupname> -o <newowner>
serve per cambiare il proprietario
di un gruppo. Questo comando cambia automaticamente la
prima parte del nome del gruppo (quella prima del carattere
:) mettendo il nome del nuovo proprietario.
Il comando:
pts rename -oldname <oldname>
-newname <newname>
pts ren -o <oldname> -ne <newname>
serve per cambiare il nome di un
utente o di un gruppo.
|