Laboratorio

Modulo 9 - Amministrazione, gestione e autenticazione in rete

Esperienza su AFS file system con openAFS

Per la realizzazione di questo modulo useremo Netkit4TIC con la connettività con la rete reale (leggere il file README).

Nella mappa (pdf, xml) della rete in esame ci sono tre nodi collegati allo stesso dominio di collisione 192.168.10.0/24. Nel nodo kdc (192.168.10.4) sono configurati i seguenti servizi:

Nel nodo alfa (192.168.10.100) sarà configurato il servizio AFS per la cella di nome istituto.it. Il nodo client (192.168.10.200) rappresenta la classica stazione di lavoro, ossia il posto destinato al login dell'utenza.

Vogliamo configurare kerberos, LDAP e AFS in modo tale da sperimentare che un utente già autenticato nel realm ISTITUTO.IT possa ottenere servizio AFS per la propria home directory.

Per l'elenco dei pacchetti da installare per kerberos rimandiamo all'esperienza su Kerberos.

L'elenco dei pacchetti da installare per AFS è: libpam-openafs-session, openafs-client, openafs-dbserver, openafs-fileserver, openafs-krb5, openafs-modules-2.4.26-bs1.
Quest'ultimo pacchetto è generato e confezionato per il mondo virtuale che stiamo usando. In generale è legato al kernel della macchina.

Nella distribuzione Debian tali pacchetti hanno le seguenti rimappature dei cammini ("FHS-compatible path names"):

/usr/afs/etc        /etc/openafs/server
/usr/afs/local      /etc/openafs/server-local
/usr/afs/db         /var/lib/openafs/db
/usr/afs/logs       /var/log/openafs
/usr/afs/bin        /usr/lib/openafs

Il file con l'esperienza deve essere decompresso su una sottodirectory della HOME. In seguito, dopo aver seguito le istruzioni presenti nel file README occorre lanciare lo script:

user@realHost$ ./lab start

(screenshot) che costruisce i tre nodi con i servizi già configurati e attivati.

In seguito gli argomenti vengono esposti suddivisi nelle seguenti sezioni:

Configurazione KDC

Procediamo con i comandi sul nodo krc per l'inizializzazione del database:

root@kdc# kdb5_util create -s
Loading random data
Initializing database '/var/lib/krb5kdc/principal' for realm 'ISTITUTO.IT',
master key name 'K/M@ISTITUTO.IT'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: not24get
Re-enter KDC database master key to verify: not24get

Il tratto evidenziato in colore indica l'attività di generare numeri casuali. Nei mondo virtuale tutte le funzioni che utilizzano generazioni casuali basandosi sull'attività dell'hardware subiscono rallentamenti e a volte dei blocchi perchè l'entropia è molto bassa rispetto alla realtà. In genere quindi dopo lo start dell'esperienza aspetto qualche minuto e nel frattempo genero dell'entropia battendo alcuni comandi alla console della macchina virtuale. Nel caso di blocco dovuto a un comando che usa /dev/random, lo sgancio dalla shell con CTRL-Z, poi lo faccio proseguire in background con il comando bg e nel frattempo genero entropia con comandi dalla tastiera.

Costruiamo le utenze amministrative:

root@kdc# kadmin.local
kadmin.local: ktadd -k /etc/krb5kdc/kadm5.keytab kadmin/admin
kadmin.local: ktadd -k /etc/krb5kdc/kadm5.keytab kadmin/changepw
kadmin.local: addprinc -pw secret krbadm@ISTITUTO.IT
kadmin.local: addprinc -pw secret afsadm@ISTITUTO.IT
kadmin.local: q

Ora facciamo partire il servizio:

root@kdc# /etc/init.d/krb5-kdc start

Per attivare la possibilità di amministrare il kdc da remoto dovremmo anche lanciare:

root@kdc# /etc/init.d/krb5-admin-server start

Configurazione iniziale di OpenAFS

Ogni nodo file server AFS deve possedere almeno un volume dedicato ai volumi AFS. A questo scopo ad ogni macchina virtuale di tipo server è stato passato un backing-store di 20000 KB che servirà da volume. Lo formattiamo ext3 e lo montiamo in /vicepa.

Inoltre ogni nodo AFS (client o server) deve possedere una cache e quindi ad ogni macchina virtuale è stato passato un backing-store di 12000 KB (nel caso pratico sono consigliati 50000 KB). Questo valore è memorizzato nel file /etc/openafs/cacheinfo:

/afs:/var/cache/openafs:10000

che formattiamo ext3 e che montiamo in /var/cache/openafs.

Occorre fare attenzione a questa fase poichè il Basic OverSeer (BOS) service è attivato con le autorizzazioni disabilitate e quindi nel caso pratico l'operazione deve essere eseguita con la macchina scollegata dalla rete o con altre accortezze che ne garantiscano l'inaccessibilità.

root@alfa# bosserver -noauth

La prima cosa da fare è scegliere un nome per la cella che si vuole configurare. Tipicamente si sceglie il nome del proprio dominio e si riporta nel file /etc/openafs/ThisCell:

istituto.it

Aggiungiamo le informazioni della nostra cella al database delle celle pubbliche /etc/openafs/CellServDB:

[...]
>istituto.it            #Netkit4TIC AFS cell
192.168.100.222                 #alfa.istituto.it

Costruiamo la cella:

root@alfa# bos setcellname -server alfa.istituto.it \
  -cell istituto.it -name istituto.it -localauth

Verifichiamo che il nome della cella sia corretto:

root@alfa# bos listhosts alfa.istituto.it -localauth
Cell name is istituto.it
    Host 1 is alfa.istituto.it

Il file dove vengono memorizzate le precedenti informazioni è /etc/openafs/server/Cell. Ora costruiamo i processi server:

# Protection Server
root@alfa# bos create -server alfa -instance ptserver -type simple \
          -cmd /usr/lib/openafs/ptserver -cell istituto.it -localauth
# Volume Location Server
root@alfa# bos create -server alfa -instance vlserver -type simple \
          -cmd /usr/lib/openafs/vlserver -cell istituto.it -localauth
# Backup Server
root@alfa# bos create -server alfa -instance buserver -type simple \
          -cmd /usr/lib/openafs/buserver -cell istituto.it -localauth
# Processo fs composto da File Server, Volume Server e Salvager
root@alfa# bos create -server alfa -instance fs -type fs \
          -cmd /usr/lib/openafs/fileserver \
          -cmd /usr/lib/openafs/volserver \
          -cmd /usr/lib/openafs/salvager -cell istituto.it -localauth

Proseguiamo costruendo i principals necessari per AFS. Poichè la nostra cella ha lo stesso nome del reame Kerberos costruiremo un principal chiamato afs@ISTITUTO.IT:

root@kdc# kadmin.local
Authenticating as principal root/admin@ISTITUTO.IT with password.

kadmin: addprinc -randkey afs/istituto@ISTITUTO.IT
kadmin: ktadd -e des-cbc-crc:afs3 -k /etc/krb5.keytab.afs afs/istituto@ISTITUTO.IT
kadmin: q

In seguito spostiamo la chiave sul database del server /etc/openafs/server/KeyFile ma prima verifichiamo la versione della chiave (che sappiamo essere 3):

root@kdc# kadmin.local -q "getprinc afs/istituto.it@ISTITUTO.IT" | grep ^Key:
Key: vno 3, DES cbc mode with CRC-32, no salt
root@alfa# asetkey add 3 /etc/krb5.keytab.afs afs/istituto.it
root@alfa# rm -f /etc/krb5.keytab.afs

Ora dobbiamo costruire l'utenza amministrativa (afsadm):

root@alfa# bos adduser alfa afsadm -cell istituto.it -localauth
root@alfa# pts createuser -name afsadm -cell istituto.it  -id 2001 -noauth
root@alfa# pts adduser afsadm system:administrators -cell istituto.it -noauth
root@alfa# pts membership afsadm -cell istituto.it -noauth

Tale utenza viene registrata nel file /etc/openafs/server/UserList.

Creiamo il volume root.afs:

root@alfa# vos create alfa /vicepa root.afs -localauth

Abbiamo terminato l'inizializzazione "senza protezione" e quindi chiuderemo il server e lo faremo ripartire in modalità sicura:

root@alfa# bos shutdown alfa -wait -localauth
root@alfa# /etc/init.d/openafs-fileserver start
root@alfa# /etc/init.d/openafs-client start

L'attivazione della parte client è ovviamente opzionale.

Costruzione della cella

Per poter operare come amministratore occorre assumere le credenziale ed acquisire il token AFS:

root@alfa# kinit afsadm
Password for afsadm@ISTITUTO.IT:secret
root@alfa# aklog
root@alfa# klist -5
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: afsadm@ISTITUTO.IT

Valid starting     Expires            Service principal
08/30/05 21:12:02  08/31/05 07:11:59  krbtgt/ISTITUTO.IT@ISTITUTO.IT
08/30/05 21:12:10  08/31/05 07:11:59  afs/istituto.it@ISTITUTO.IT

Creiamo il volume d'ingresso root.cell che sarà montato come /afs/istituto.it e che potrà essere leggibile da tutti:

root@alfa# vos create alfa /vicepa root.cell
root@alfa# fs mkmount /afs/istituto.it root.cell
root@alfa# fs setacl /afs system:anyuser read
root@alfa# fs setacl /afs/istituto.it system:anyuser read

Indichiamo che entrambe i volumi devono avere repliche read-only e occorre creare il punto d'ingresso per l'albero in read/write usando un mount point speciale:

root@alfa# vos addsite alfa a root.afs
Added replication site alfa /vicepa for volume root.afs
root@alfa# vos addsite alfa a root.cell
Added replication site alfa /vicepa for volume root.cell
root@alfa# fs mkmount /afs/.istituto.it root.cell -rw
root@alfa# vos release root.afs
Released volume root.afs successfully
root@alfa# vos release root.cell
Released volume root.cell successfully

Costruzione delle home per l'utenza

Iniziamo con la costruzione della home:

root@alfa# vos create alfa /vicepa home
root@alfa# fs mkmount /afs/.istituto.it/home home
root@alfa# fs setacl /afs/.istituto.it/home system:anyuser read
root@alfa# vos addsite alfa /vicepa home
root@alfa# vos release home
root@alfa# vos release root.cell

Costruiamo un utente:

root@alfa# kadmin.local -q "addprinc -pw bianchi mrossi@ISTITUTO.IT" -w secret
root@alfa# pts creategroup users -id -3001

root@alfa# pts createuser mrossi -id 2002
root@alfa# pts adduser mrossi users
root@alfa# vos create alfa /vicepa home.mrossi
root@alfa# fs mkmount /afs/.istituto.it/home/mrossi home.mrossi
root@alfa# vos release home
root@alfa# fs setacl /afs/istituto.it/home/mrossi mrossi all
root@alfa# fs setquota /afs/istituto.it/home/mrossi -max 2000

Configurazione client

Per prima cosa definiamo il principal associato al nostro utente di prova mrossi@ISTITUTO.IT (con password bianchi) e il principal associato al nodo client stesso:

root@client# kadmin -p krbadm
Authenticating as principal krbadm with password.
Password for krbadm@ISTITUTO.IT:secret

kadmin: addprinc -pw bianchi mrossi@ISTITUTO.IT

kadmin: addprinc -pw secret host/client.istituto.it@ISTITUTO.IT
kadmin: ktadd -k /etc/krb5.keytab host/client.istituto.it@ISTITUTO.IT
kadmin: q

Per la configurazione del nodo client ricorreremo alla configurazione di PAM per l'autenticazione e poi a NSS in combinazione con LDAP per la risoluzione dei nomi dei servizi.

Come sperimentato nell'esperienza legata al PAM occorre modificare i files common-* all'interno della directory /etc/pam.d inserendo con clausola sufficient il modulo kerberos:

# /etc/pam.d/common-account
account   sufficient pam_krb5.so
account   required   pam_unix.so

# /etc/pam.d/common-auth
auth      sufficient pam_krb5.so nullok_secure forwardable
auth      required   pam_unix.so nullok_secure use_first_pass

# /etc/pam.d/common-password
password  sufficient pam_krb5.so nullok obscure
password  required   pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass

# /etc/pam.d/common-session
session   sufficient pam_krb5.so forwardable
session   optional   pam_openafs_session.so
session   required   pam_unix.so

In seguito configuriamo come il Name Service Switch (NSS) deve accedere a LDAP:

# /etc/libnss-ldap.conf
host ldap.istituto.it
base dc=istituto,dc=it
nss_base_passwd ou=People,dc=istituto,dc=it
nss_base_shadow ou=People,dc=istituto,dc=it
nss_base_group  ou=Group,dc=istituto,dc=it

e ora l'ultimo passo è quello di attivare il NSS a consultare LDAP:

# /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Configurazione client "reali"

Per la configurazione dei client reali rimandiamo al già citato documento di Paternò. Ricordiamo solo che occorre configurare opportunamente le tabelle di routing.

Sperimentazione interattiva

Da questo punto in poi iniziano le attività interattive che si possono sperimentare alla conclusione dello script lab.

Login

Per sperimentare il login ci posizioniamo sul nodo client e diamo le nostre credenziali (utente: mrossi, password: bianchi):

client login: mrossi
Password for mrossi@ISTITUTO.IT:bianchi 

root@client$ klist -5
Ticket cache: FILE:/tmp/krb5cc_2002_jrceV7
Default principal: mrossi@ISTITUTO.IT

Valid starting     Expires            Service principal
09/01/05 18:08:15  09/02/05 04:08:15  host/client.istituto.it@ISTITUTO.IT
09/01/05 18:08:15  09/02/05 04:08:15  krbtgt/ISTITUTO.IT@ISTITUTO.IT
09/01/05 18:08:16  09/02/05 04:08:15  afs/istituto.it@ISTITUTO.IT

(screenshot) possiamo quindi verificate che il modulo pam_krb5 ha chiamato in automatico kinit ottenendo il Ticket Granting Ticket (TGT) e che il modulo pam_openafs_session ha chiamato in automatico aklog per ottenere il token per l'utenza AFS. È inoltre presente il token per la workstation.

Ora abbiamo accesso al file system AFS:

mrossi@client$ pwd
/afs/istituto.it/home/mrossi
mrossi@client$ df -h /afs
Filesystem            Size  Used Avail Use% Mounted on
AFS                   8.6G     0  8.6G   0% /afs

Infatti nel database LDAP abbiamo definito la HOME in AFS e abbiamo riportato lo stesso identificatore utente (uidNumber) (screenshot). Per poterlo velocemente verificare viene fornito con l'esperienza il file d'impostazione che basta copiare nella home. Al lancio di gq ricordarsi che la password è secret:

user@realHost$ cp .gq ~
user@realHost$ gq

Possiamo controllare le autorizzazioni presenti (ACL):

mrossi@client$ fs la $HOME 
Access list for /afs/istituto.it/home/mrossi is
Normal rights:
  system:anyuser l
  mrossi rlidwka

Visualizziamo i volumi attraversati:

mrossi@client$ fs exam /afs
File /afs (536870913.1.1) contained in volume 536870913
Volume status for vid = 536870913 named root.afs.readonly
[...]
mrossi@client$ fs exam /afs/istituto.it/
File /afs/istituto.it/ (536870916.1.1) contained in volume 536870916
Volume status for vid = 536870916 named root.cell.readonly
[...]
mrossi@client$ fs exam /afs/istituto.it/home/
File /afs/istituto.it/home/ (536870919.1.1) contained in volume 536870919
Volume status for vid = 536870919 named home.readonly
[...]
mrossi@client$ fs exam /afs/istituto.it/home/mrossi/
File /afs/istituto.it/home/mrossi/ (536870921.1.1) contained in volume 536870921
Volume status for vid = 536870921 named home.mrossi
[...]

Amministrazione Server

Posizioniamoci sul file server alfa. Per operare come amministratore occorre identificarsi come principal afsadm (e quindi ottenere un ticket TGT) e dal quale ottenere un token AFS:

root@alfa$ kinit afsadm
root@alfa$ aklog

Vediamo cosa contiene la directory /vicepa:

root@alfa# ls -c /vicepa
AFSIDat          V0536870919.vol  V0536870916.vol  V0536870915.vol  Lock
V0536870921.vol  V0536870918.vol  V0536870913.vol  V0536870912.vol

root@alfa# ls -c /vicepa/AFSIDat/
7  4  1  README  +

root@alfa# cat /vicepa/AFSIDat/README
These files and directories are a part of the AFS namespace. Modifying them
in any way will result in loss of AFS data,
ownership and permissions included.

Costruiamo ora una seconda partizione AFS (su un backing store /dev/ubd/3 passato al momento della costruzione della macchina virtuale):

root@alfa# /sbin/mkfs.ext3 -q /dev/ubd/3
root@alfa# bos shutdown alfa.istituto.it -wait
root@alfa# mkdir /vicepb
root@alfa# mount -rw /dev/ubd/3 /vicepb
root@alfa# bos restart alfa.istituto.it -all
root@alfa# vos partinfo alfa.istituto.it
Free space on partition /vicepa: 18534 K blocks out of total 19746
Free space on partition /vicepb: 18700 K blocks out of total 19746

Creazione di un volume:

root@alfa# vos create alfa.istituto.it /vicepb volume.di.prova
Volume 536870924 created on partition /vicepb of alfa.istituto.it

Accesso ai volumi:

root@alfa# fs mkm /afs/istituto.it/mp volume.di.prova
root@alfa# fs sa /afs/istituto.it/mp mrossi write

Creiamo il volume Read-Only:

root@alfa# vos addsite alfa /vicepb volume.di.prova
Added replication site alfa /vicepb for volume volume.di.prova
root@alfa# vos rel volume.di.prova
Released volume volume.di.prova successfully

Il volume è immediatamente disponibile:

root@alfa# fs exam /afs/istituto.it/mp
File /afs/istituto.it/mp (536870924.1.1) contained in volume 536870924
Volume status for vid = 536870924 named volume.di.prova
[...]

Creative Commons License FREE THE MOUSE Valid HTML! Sandro Doro (email me)
Ultima modifica: $Date: 2005-09-06 15:38:20 $