Laboratorio di Amministrazione di
Sistemi L-A
Prova pratica del 10 luglio 2007
Descrizione generale del problema
Un generico client (si utilizzi Virtual1 per i test, prevedendo ove
opportuno di generalizzare il codice perchè funzioni con
qualsiasi client) può accedere alle risorse di calcolo
di un server noto (Virtual2) seguendo il protocollo dettagliato di
seguito.
- Il client inserisce nella directory LDAP sul server la richiesta
di eseguire un'elaborazione, specificando oltre al proprio IP il nome
del programma ed il nome dell'utente che lo vuole eseguire.
- Il server periodicamente controlla se nella directory LDAP sono
presenti nuove richieste, e nel caso, per ogni richiesta:
- controlla via SNMP se sull'IP registrato nella richiesta
è in esecuzione lo script client.sh
- se il controllo è positivo:
- configura il proprio packet filter per consentire a tale IP l'accesso via SSH
- rende eseguibile il programma per l'utente
- aggiorna l'entry LDAP per confermare il consenso all'accesso
- se il controllo è negativo cancella l'entry LDAP
- Il client verifica se la propria entry è stata aggiornata
- se il controllo è positivo, viene eseguito il comando
sul server via ssh
- se il controllo è negativo, viene ripetuto dopo una
pausa per un numero stabilito di volte, superato il quale il client
termina l'esecuzione.
- Il server verifica periodicamente la presenza di entry di
età superiore ad una certa soglia, e trovandone fa pulizia di
tutto quanto ad esse relativo (eventuali connessioni ssh, abilitazioni
all'accesso, possibilità di eseguire programmi, entry LDAP)
Si ipotizzi che:
- su di una data postazione di tipo Virtual1 non si possa lanciare
più di una istanza di client.sh per volta.
- gli utenti unix delle postazioni client siano tutti presenti
anche sul server
Componenti da progettare
File da consegnare: richiesta.schema (2)
- Schema da inserire nella configurazione della directory LDAP su Virtual2,
che definisce
gli attributi stato, utente, ip e programma di tipo stringa, timestamp di tipo intero, ed
utilizzandoli definisce la classe richiesta.
File da consegnare: client.sh (10)-
Questo script, lanciato sul client, realizza l'intera parte client del
protocollo. Viene lanciato specificando come parametro (uno ed uno
solo) il nome di un programma che il client vuole eseguire sul server,
e procede in questo modo:
- verifica se un'altra istanza di client.sh, anche di
altri utenti, è attiva, e nel caso termina immediatamente.
- determina l'IP della macchina su cui gira, il nome
dell'utente che l'ha lanciato, e data/ora nel formato restituito da date +%s ;
- inserisce nella directory LDAP una richiesta complilando
- gli attributi ip, utente e timestamp con i tre parametri
sopra rilevati,
- l'attributo programma
con la stringa passata sulla riga di comando,
- l'attributo stato con la
stringa "NEW";
- controlla per un massimo di 3 volte, attendendo ogni
volta 5 secondi, se l'entry inserita al passo precedente ha cambiato stato da "NEW" a "OPEN".
- se il controllo fallisce, lo script termina
- se il controllo ha successo, esegue via ssh il programma sul server
File da consegnare: snmpd.conf (2)
- File di configurazione
del demone SNMP di Virtual1 che permetta di osservare se esiste un processo
attivo di nome client.sh.
File da consegnare: check.sh (4)
- Questo script, lanciato su Virtual2,
controlla via SNMP se sulla macchina identificata dall'IP passato sulla
riga di comando c'è un processo di nome client.sh attivo, ritornando codice di uscita 0 (true) in tal caso e 1 (false) se invece non rileva il processo.
File da consegnare: serveropen.sh (6)
- Questo script, girando senza interruzione su Virtual2:
- controlla ogni 5 secondi se esistono nella directory entry con
stato NEW
- per ognuna, lancia lo script check.sh
passandogli come parametro l'ip letto dalla entry
- se check.sh ritorna un
codice di uscita 0 (true), serveropen.sh
lancia lo script serverok.sh
passandogli come parametri ip, utente e programma letti dalla entry,
altrimenti elimina l'entry LDAP.
File da consegnare: serverok.sh (8)
- Questo script, lanciato su Virtual2 da serveropen.sh
che gli passa sulla riga di comando un IP, un nome utente ed un nome di
programma:
- configura il packet filter del server perchè accetti le
connessioni ssh dall'ip
- fa sì che l'utente possa eseguire il programma (vincoli e
suggerimenti: il programma deve rimanere di proprietà di root, ed avere permessi 770)
- aggiorna l'entry LDAP modificando timestamp al tempo corrente e stato a "OPEN"
File da consegnare: serverclose.sh (8)
- Questo script, girando senza interruzione su Virtual2:
- controlla ogni 5 secondi se esistono nella directory entry con
stato OPEN che abbiano timestamp
vecchio più di 100 secondi rispetto al tempo corrente
- per ognuna:
- individua e termina eventuali connessioni ssh relative all'entry
- rimuove dal packet filter l'abilitazione all'accesso via ssh
per l'ip letto nell'entry
- rende il programma specificato nell'entry non eseguibile
dall'utente
- rimuove l'entry
Durata della prova: 3 ore
Modalità di consegna
Utilizzare l'interfaccia di gestione dell'esame per caricare
indipendentemente ciascuno dei file.
I file devono avere esattamente i nomi specificati nel testo.