Guida ad OpenAFS in Gentoo Linux

Contenuti:

1.Introduzione

Premessa 

Questo documento descrive tutti i passi necessari all'installazione di un server OpenAFS su Gentoo Linux. Parti di questo documento sono tratte dalla FAQ AFS e dalla guida IBM's Quick Beginnings su AFS.

Cos'è AFS ? 

AFS è un filesystem distribuito che permette ad host cooperanti (client e server) di condividere in maniera efficiente un filesystem attraverso una local o wide area network. I Client mantengono una cache per gli oggetti (file) maggiormente utilizzati, per averne un accesso più rapido.

AFS è basato su un filesystem distribuito chiamato "Andrew File System", originariamente sviluppato all'Information Technology Center della Carnegie-Mellon University. "Andrew" era il nome del progetto di ricerca alla CMU, in ricordo del fondatore dell'Università. Fondata la Transarc e divenuto AFS un prodotto, si decise di eliminare il nome "Andrew" al fine di indicare che ormai si era andati oltre il progetto di ricerca universitario. AFS era divenuto un filesystem robusto e di qualità. Tuttavia, essendo ancora esistenti dei nodi (cell) con filesystem del tipo /asf, e, nota la difficoltà dell'epoca nel cambiare il volume root del filesystem, il nome AFS rimase tale.

Cos'è un nodo (cell) AFS ? 

Un nodo (cell) AFS è un insieme di server collegati tra loro che presentano un singolo filesystem. Di solito, un nodo AFS è costituito da host (postazioni) che usano lo stesso dominio Internet ("domain name"), ad esempio gentoo.org. Gli utenti si collegano ai client workstation, i quali richiedono dati e file dai server del nodo per gli utenti stessi. Gli utenti non sapranno su quale server è situato il file a cui stanno accedendo, poichè ogni volume può essere copiato e spostato su di un altro server senza che se ne accorgano. I file sono sempre accessibili. E' una sorta di NFS potenziato.

Che benefici si ottengono con l'utilizzo di AFS ? 

I punti di forza di AFS sono: abilità di caching (da 100M a 1GB lato client), caratteristiche di sicurezza (basato su Kerberos 4, con access control list), semplicità di addressing (si ha in pratica un solo filesystem), scalabilità (ulteriore aggiunta di server al nodo in caso di necessità), protocolli di comunicazione.

Dove si possono trovare maggiori informazioni ? 

Si legga la FAQ ASF.

Il sito ufficiale di OpenAFS è www.openafs.org.

AFS è stato originariamente sviluppato dalla Transarc che ora è di proprietà di IBM. Si possono trovare maggiori informazioni riguardo AFS sul sito della Transarc.

Come posso effettuare un debug dei problemi? 

OpenAFS ha un ottimo supporto al logging. Naturalmente, di default, i messaggi di log vengono memorizzati nei propri file di log invece che nei normali file log di sistema presenti nella propria macchina. Per redirigere i messaggi di log nel proprio logger di sistema, utilizzare l'opzione -syslog per tutti i comandi bos.

2.Documentazione

Consultare la Documentazione AFS 

Si può facilmente consultare la Documentazione originale AFS di IBM. E' scritta molto bene e, se si deve amministrare un Server AFS, diventa una lettura obbligata.

Esempio 1: Installazione di afsdoc

# emerge app-doc/afsdoc

3.Installazione sul Client

Fase Iniziale 

Nota: Tutti i comandi devono essere digitati su una sola linea. Per facilitarne la lettura, in questo documento alcune volte sono riportati su più linee.

Nota: Sfortunatamente i Client AFS necessitano di una partizione di tipo ext2 per la loro cache per funzionare correttamente; ci sono problemi con le partizioni di tipo reiserfs. La partizione ext2 deve essere di circa 200MB (o più) e va montata in /usr/vice/cache

Prima di compilare il client afs vanno modificati i file CellServDB e ThisCell (si trovano in /usr/portage/net-fs/openafs/files).

Esempio 2: Modifica di CellServDB e ThisCell

 CellServDB:
 >netlabs        #Cell name
 10.0.0.1        #storage
 
 ThisCell:
 netlabs       
 

Attenzione: All'interno del file CellServDB devono essere usati solamente spazi. Nel caso di uso dei TAB, il client andrà sicuramente incontro a problemi.

Il file CellServDB indica al proprio client quale o quali client ha bisogno di contattare per uno specifico nodo (cell). Il contenuto di ThisCell dovrebbe sembrare ovvio. Normalmente la propria azienda usa un nome che è unico. Una buona scelta può essere il dominio (ufficiale) dell'azienda.

Compilazione lato Client 

Esempio 3: Installazione di openafs

# emerge net-fs/openafs

Dopo una corretta compilazione si è pronti per proseguire.

Esecuzione di AFS all'avvio 

I comandi seguenti creano i link appropriati per avviare il client afs durante il boot del sistema.

Attenzione: Si dovrebbe sempre avere un server afs in esecuzione all'interno del proprio dominio quando si avvia un client afs. Se il server AFS non è attivo (o è down), il sistema non si avvierà e attenderà prima di proseguire, per un tempo relativamente lungo (fino al timeout).

Esempio 4: Aggiunta di AFS al runlevel di default

# rc-update add afs default

4.Installazione sul Server

Compilazione lato Server 

I comandi seguenti installano tutti i binari necessari alla configurazione di un Server AFS e di un Client.

Esempio 5: Installazione di openafs

# emerge net-fs/openafs

Avvio del Server AFS 

E' necessario prima di tutto cancellare i file di esempio CellServDB e ThisCell.

Esempio 6: Rimuovere file di esempio

# rm /usr/vice/etc/ThisCell
# rm /usr/vice/etc/CellServDB

In seguito si deve eseguire il comando bosserver per inizializzare il Basic OverSeer (BOS) Server, il quale ha il compito di monitorare e controllare gli altri processi del server AFS. Si pensi al BOS come ad un init del sistema. La flag -noauth va inclusa per disabilitare il controllo delle autorizzazioni, poichè non si è ancora aggiunto l'user admin.

Attenzione: Disabilitando il controllo delle autorizzazioni, la sicurezza del nodo (cell) viene, temporaneamente, compromessa. Tutti questi sottopassaggi vanno completati in un unica ininterrotta sessione e il sistema non deve essere lasciato incustodito fino al successivo riavvio del Server BOS con il controllo delle autorizzazioni attivato.

Esempio 7: Inizializzazione del Basic OverSeer Server

# /usr/afs/bin/bosserver -noauth &

Si controlli che il Server BOS abbia creato i file /usr/vice/etc/CellServDB e /usr/vice/etc/ThisCell

Esempio 8: Controllo della presenza di CellServDB e ThisCell

# ls -al /usr/vice/etc/
-rw-r--r--    1 root     root           41 Jun  4 22:21 CellServDB
-rw-r--r--    1 root     root            7 Jun  4 22:21 ThisCell

Assegnazione del Nome del Nodo (cell) e del Gruppo (Membership) per i Processi del Server 

Si assegni ora il nome al nodo.

Importante: Ci sono alcune restrizioni nel formato del nome. Non possono essere usate lettere in maiuscolo e non si possono superare i 64 caratteri. Il nome del proprio nodo (cell) apparirà nel percorso /afs , quindi conviene usare nomi brevi.

Nota: D'ora in avanti si sostituisca alla stringa <server name> l'hostname completo (ad esempio afs.gentoo.org) della macchina sulla quale state installando il tutto. Al posto di <cell name> va inserito il nome completo del proprio nodo (ad esempio gentoo).

Si esegua il comando bos setcellname per assegnare un nome al nodo:

Esempio 9: Impostazione del cell name

# /usr/afs/bin/bos setcellname <server name> <cell name> -noauth

Avvio del Database Server Process 

Il comando bos create crea le configurazioni dei quattro processi database server nel file /usr/afs/local/BosConfig . I quattro processi funzionano solamente sui database server.

kaserver L'Authentication Server gestisce l'Authentication Database. Può essere sostituito con un demone Kerberos 5 (in questa guida non documentato).
buserver Il Backup Server gestisce il Backup Database
ptserver Il Protection Server gestisce il Protection Database
vlserver Il Volume Location Server gestisce il Volume Location Database (VLDB). E' il più importante

Esempio 10: Creazione configurazioni dei processi database

# /usr/afs/bin/bos create <server name> kaserver simple 
    /usr/afs/bin/kaserver -cell <cell name> -noauth
# /usr/afs/bin/bos create <server name> buserver simple 
    /usr/afs/bin/buserver -cell <cell name> -noauth
# /usr/afs/bin/bos create <server name> ptserver simple 
    /usr/afs/bin/ptserver -cell <cell name> -noauth
# /usr/afs/bin/bos create <server name> vlserver simple 
    /usr/afs/bin/vlserver -cell <cell name> -noauth

E' possibile verificare che tutti i server siano in esecuzione con il comando bos status:

Esempio 11: Controllo del corretto funzionamento dei server

# /usr/afs/bin/bos status <server name> -noauth
Instance kaserver, currently running normally.
Instance buserver, currently running normally.
Instance ptserver, currently running normally.
Instance vlserver, currently running normally.

Sicurezza del Nodo (cell) 

Verranno ora esaminati i meccanismi di sicurezza del nodo. Si creeranno due profili iniziali nell'Authentication Database: l'account di amministratore, chiamato per convenzione admin e un account per i processi del server AFS, chiamato afs. Nessun utente si può connettere usando l'user afs, ma il modulo Authentication Server's Ticket Granting Service (TGS) usa questo account per criptare i ticket del server concessi ai client AFS.

Si passi alla modalità interattiva kas

Esempio 12: Modalità interattiva

# /usr/afs/bin/kas -cell <cell name> -noauth
ka> create afs
initial_password:
Verifying, please re-enter initial_password:
ka> create admin
initial_password:
Verifying, please re-enter initial_password:
ka> examine afs

User data for afs
  key (0) cksum is 2651715259, last cpw: Mon Jun  4 20:49:30 2001
  password will never expire.
  An unlimited number of unsuccessful authentications is permitted.
  entry never expires.  Max ticket lifetime 100.00 hours.
  last mod on Mon Jun  4 20:49:30 2001 by $lt;none>
  permit password reuse
ka> setfields admin -flags admin
ka> examine admin
 
User data for admin (ADMIN)
  key (0) cksum is 2651715259, last cpw: Mon Jun  4 20:49:59 2001
  password will never expire.
  An unlimited number of unsuccessful authentications is permitted.
  entry never expires.  Max ticket lifetime 25.00 hours.
  last mod on Mon Jun  4 20:51:10 2001 by $lt;none>
  permit password reuse
ka>

Il comando bos adduser aggiunge l'utente admin (amministratore) a /usr/afs/etc/UserList .

Esempio 13: Aggiunta dell'utente admin alla UserList

# /usr/afs/bin/bos adduser <server name> admin -cell <cell name> -noauth

Il comando bos addkey definisce la chiave di crittografia (encryption key) del Server AFS in /usr/afs/etc/KeyFile

Nota: Nel caso di richiesta di una password ("input key"), sarà necessario digitare quella usata nella creazione dell'user afs nella modalità interattiva kas.

Esempio 14: Inserimento password

# /usr/afs/bin/bos addkey  <server name> -kvno 0 -cell <cell name> -noauth
    input key:
    Retype input key:

Il comando pts createuser crea un profilo Protection Database per l'utente amministratore.

Nota: Di default, il Protection Server assegna all'utente admin un AFS UID 1, perchè è il primo profilo creato. Se nel file delle password locale (/etc/passwd o uno equivalente) è già presente un admin con UID differente, la flag -id verrà utilizzata per creare UID equivalenti.

Esempio 15: Creazione del profilo Protection Database

# /usr/afs/bin/pts createuser -name admin -cell <cell name> [-id <AFS UID>] -noauth

Il comando pts adduser fà dell'utente admin un membro del gruppo "system:administrators" e il comando pts membership è utile per verificare che ciò sia avvenuto correttamente.

Esempio 16: Fare amministratore un collaboratore del gruppo amministratore e verificare

# /usr/afs/bin/pts adduser admin system:administrators -cell <cell name> -noauth
# /usr/afs/bin/pts membership admin -cell <cell name> -noauth
      Groups admin (id: 1) is a member of:
        system:administrators

Si riavviino tutti i processi del Server AFS

Esempio 17: Riavvio di tutti i processi del server AFS

# /usr/afs/bin/bos restart <server name> -all -cell <cell name> -noauth

Avvio del File Server, Volume Server e Salvager 

Si avvii il processo fs, costituito da File Server, da Volume Server e da Salvager (processi fileserver, volserver e salvager).

Esempio 18: Avvio del processo fs

# /usr/afs/bin/bos create <server name> fs fs /usr/afs/bin/fileserver 
		                              /usr/afs/bin/volserver 
        		                      /usr/afs/bin/salvager 
                		              -cell <cell name> -noauth

Si controlli che tutti i processi siano in esecuzione

Esempio 19: Controllo della corretta esecuzione di tutti i processi

 # /usr/afs/bin/bos status <server name> -long -noauth
 Instance kaserver, (type is simple) currently running normally.
     Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
     Last exit at Mon Jun  4 21:07:17 2001
     Command 1 is '/usr/afs/bin/kaserver'

 Instance buserver, (type is simple) currently running normally.
     Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
     Last exit at Mon Jun  4 21:07:17 2001
     Command 1 is '/usr/afs/bin/buserver'

 Instance ptserver, (type is simple) currently running normally.
     Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
     Last exit at Mon Jun  4 21:07:17 2001
     Command 1 is '/usr/afs/bin/ptserver'

 Instance vlserver, (type is simple) currently running normally.
     Process last started at Mon Jun  4 21:07:17 2001 (2 proc starts)
     Last exit at Mon Jun  4 21:07:17 2001
     Command 1 is '/usr/afs/bin/vlserver'

 Instance fs, (type is fs) currently running normally.
     Auxiliary status is: file server running.
     Process last started at Mon Jun  4 21:09:30 2001 (2 proc starts)
     Command 1 is '/usr/afs/bin/fileserver'
     Command 2 is '/usr/afs/bin/volserver'
     Command 3 is '/usr/afs/bin/salvager'

Il passo successivo è in relazione al se si è o meno mai eseguito un file server AFS nel nodo.

Se si sta installanto il Server AFS per la prima volta nel nodo, è necessario creare il primo volume AFS, root.afs

Nota: Al posto di "partition name" va inserito il nome di una partizione AFS Server della postazione. Per convenzione queste partizioni sono chiamate /vicepx, dove la x può essere compresa tra a e z.

Esempio 20: Creazione del volume root.afs

  # /usr/afs/bin/vos create <server name> 
                            <partition name> root.afs 
				-cell <cell name> -noauth

Se nel nodo sono già presenti postazioni con file server AFS e volumi, verranno utilizzati i comandi vos sncvldb e vos syncserv per sincronizzare il VLDB (Volume Location Database) con la stato attuale dei volumi sulla postazione locale. Tutti i dati necessari saranno copiati sul proprio nuovo server.

Se il comando dovesse restituire il messaggio "partition /vicepa does not exist on the server" (la partizione /vicepa non esiste sul server), bisognerà assicurarsi che la partizione sia stata montata prima dell'esecuzione del server OpenAFS, oppure bisognerà montare la directory e riavviare i processi con il comando /usr/afs/bin/bos restart <server name> -all -cell <cell name> -noauth.

Esempio 21: Sincronizzazione del VLDB

  # /usr/afs/bin/vos syncvldb <server name> -cell <cell name> -verbose -noauth
  # /usr/afs/bin/vos syncserv <server name> -cell <cell name> -verbose -noauth 

Avvio del Server Portion dell'Update Server 

Esempio 22: Avvio del server update

# /usr/afs/bin/bos create <server name> 
                    upserver simple "/usr/afs/bin/upserver 
		    -crypt /usr/afs/etc -clear /usr/afs/bin" 
		    -cell <cell name> -noauth

Configurazione del Top Level del Filespace AFS 

C'è bisogno, a questo punto, di configurare la ACL (access control list) in modo che ogni utente possa accedere al percorso /afs.

Esempio 23: Configurazioen dell'access control list

# /usr/afs/bin/fs setacl /afs system:anyuser rl

Si deve ora creare il volume root, montarlo in modalità solo lettura su /afs/<cell name> e in modalità lettura/scrittura su /afs/.<cell name>

Esempio 24: Configurazione del volume root

# /usr/afs/bin/vos create <server name><partition name> root.cell
# /usr/afs/bin/fs mkmount /afs/<cell name> root.cell 
# /usr/afs/bin/fs setacl /afs/<cell name> system:anyuser rl
# /usr/afs/bin/fs mkmount /afs/.<cell name> root.cell -rw

Ora è tutto pronto ! Si dovrebbe avere un file server AFS funzionante all'interno della propria rete.

Nota: Per il corretto funzionamento del server AFS è essenziale che tutti gli orologi di sistema siano sincronizzati. La soluzione più conveniente consiste nella installazione di un server ntp su di una postazione (ad esempio sul server AFS) per sincronizzare tutti gli orologi dei client attraverso il client ntp. Questo può, naturalmente, essere fatto anche su di un client AFS.

5.Amministrazione di Base

Avviso 

OpenAFS è una tecnologia complessa e ampia. Si consiglia la lettura della documentazione AFS per maggiori e ulteriori informazioni. In questo capitolo verranno illustrate solo alcune operazioni di amministrazione.

Configurazione di PAM per l'acquisizione di un Token AFS al Login 

Per utilizzare AFS è necessario autenticarsi sul Server KA se si sta utilizzando una implementazione di AFS Kerberos 4, o sul Kerberos 5 KDC se si sta utilizzando MIT, Heimdal, oppure ShiShi Kerberos 5. Tuttavia per loggarsi ad una macchina sarà necessario anche un account utente, situato solitamente in /etc/passwd, NIS, LDAP (OpenLDAP), oppure in un database Hesiod. PAM permette a Gentoo di legare l'autenticazione AFS e di login all'account utente.

Sarà necessario aggiornare /etc/pam.d/system-auth, utilizzato anche da altre configurazioni. "use_first_pass" sta ad indicare il controllo prima sul login dell'utente, e "ignore_root" blocca il controllo sul superuser locale in modo da permettere il login se AFS o il network non si avviano.

Esempio 25: /etc/pam.d/system-auth

auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok
auth       sufficient   pam_afs.so.1 use_first_pass ignore_root
auth       required     pam_deny.so

account    required     pam_unix.so

password   required     pam_cracklib.so retry=3
password   sufficient   pam_unix.so nullok md5 shadow use_authtok
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so

Per permettere a sudo di mantenere i token degli utenti reali e per evitare agli utenti locali di ottenere un accesso AFS si cambi /etc/pam.d/su come evidenziato di seguito:

Esempio 26: /etc/pam.d/su

# Qui, utenti con uid > 100 sono considerati appartenenti ad AFS e utenti con 
# uid <= 100 sono ignorati da pam_afs.
auth       sufficient   /usr/afsws/lib/pam_afs.so.1 ignore_uid 100

auth       sufficient   /lib/security/pam_rootok.so

# Se si vuole restringere il numero degli utenti ammessi all'utilizzo di 'su',
# si crei il file /etc/security/suauth.allow, editabile solo da root, e si
# aggiungano gli utenti a cui è permesso effettuare 'su' (un utente per ogni
# linea del suddetto file)
#auth       required     /lib/security/pam_listfile.so item=ruser \
#       sense=allow onerr=fail file=/etc/security/suauth.allow

# Decommentando questa linea si permette agli utenti del gruppo wheel
# di eseguire 'su' senza inserire una password.
#auth       sufficient   /lib/security/pam_wheel.so use_uid trust

# In alternativa, si può implementare una lista di utenti che non hanno
#bisogno di fornire una password
#auth       sufficient   /lib/security/pam_listfile.so item=ruser \
#       sense=allow onerr=fail file=/etc/security/suauth.nopass

# Commentando questa linea si permette a qualsiasi utente, anche a quelli
# non presenti nel gruppo wheel, l'esecuzione di 'su'
auth       required     /lib/security/pam_wheel.so use_uid

auth       required     /lib/security/pam_stack.so service=system-auth

account    required     /lib/security/pam_stack.so service=system-auth

password   required     /lib/security/pam_stack.so service=system-auth

session    required     /lib/security/pam_stack.so service=system-auth
session    optional     /lib/security/pam_xauth.so

# Qui si previene la perdita dell'id token dell'utente reale
session    optional     /usr/afsws/lib/pam_afs.so.1 no_unlog


Ultimo aggiorn.:
2005-10-29
Holger Brueckner
Editor

Benny Chuang
Editor

Tiemo Kieft
Editor

Steven McCoy
Editor

Francesco Grieco
Traduzione

Sommario:  Questa guida mostra come installare un server OpenAFS ed un client su Gentoo Linux
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.