Università
di Bologna
Universita di Bologna
Facoltà di
Ingegneria
Facolta di Ingegneria

Dipartimento di Elettronica
Informatica e Sistemistica

Laboratorio di Informatica 
Avanzata
lia

uniwex logo
Iscrizione agli esami

Corso di Amministrazione di Reti di Calcolatori L-A

A.A. 2004/2005

Informazioni generali
Materiale didattico
Laboratorio
Calendario


Le esercitazioni si svolgono in LAB3, secondo il calendario comunicato su questo sito, in ambiente Linux. L'accesso al sistema richiede:

  • uno username che può essere calcolato inserendo la matricola qui e premendo

  • una password che è il PIN del badge

Modalità di svolgimento degli esercizi: ogni studente deve depositare, entro la mattina precedente la data d'inizio di ciascun appello, in una cartella chiamata ARC2005 creata all'interno della propria home directory tutti i file che riguardano gli esercizi, nominandoli come indicato di seguito

Elenco degli esercizi da svolgere
aggiornato e definitivo.

Per ogni esercizio è riportato il nome del file che deve contenere la soluzione. Nel caso sia necessario configurare syslog, cron o init per eseguire correttamente i compiti assegnati,
non è richiesto di inventare soluzioni sofisticate per impostare tali configurazioni automaticamente dallo script stesso, è sufficiente indicare nei commenti come si procederebbe alla configurazione manuale dei suddetti servizi.

Nome file
Testo
estensioni.sh
Contare quanti file esistono con una certa estensione, definita come la stringa posta dopo l'ultimo carattere "punto" presente nel nome del file, per tutte le estensioni trovate nei file presenti nel direttorio passato come parametro sulla riga di comando  e sottodirettori. Limitare l'output alle sole 5 estensioni più numerose.
estparam.sh
Modificare l'esercizio precedente per contare quanti file esistono con una certa estensione, limitatamente all'elenco di estensioni passate come parametri sulla riga di comando
iscritti.sh
Questo comando deve accettare un nome di file come parametro. Tale file deve contenere un elenco di righe nella forma nome spazio cognome. La prima parte dell'output dello script deve essere l'elenco in ordine alfabetico delle lettere iniziali dei cognomi trovate nel file, ciascuna seguita da due numeri: il primo deve riportare quanti cognomi iniziano con tale lettera, il secondo quanti cognomi sono stati elaborati fino a quel momento. Es:
A 10 10
B 4 14
C 7 21
...
Al termine, lo script deve indicare a quale lettera corrisponde il superamento della metà dei presenti, ad esempio se il risultato è "L" significa che tra A e K ci sono meno della metà dei cognomi mentre tra A ed L più della metà o esattamente la metà.
motd.sh
Questo script deve inviare, per posta elettronica, a tutti gli utenti del sistema, ogni giorno lavorativo alle 9 di mattina, il contenuto del file di testo /etc/motd. In caso di fallimento nell'invio ad un utente, deve ritentare dopo 10 minuti, e continuare a tentare ogni 10 minuti finchè l'invio non ha successo o finchè non raggiunge un massimo stabilito in 20 tentativi (per utente).
È possibile risolvere l'esercizio predisponendo script ausiliari richiamati dallo script principale. Se si sceglie questa strada, chiamare gli script secondari motd1.sh, motd2.sh, ecc...
presenze.schema
ldapgrow.sh
findabs.sh
Prima di iniziare può tornare utile questo piccolissimo prontuario.
L'esercizio prevede 4 passi:
  1. includere lo schema studenti nel server LDAP come fatto in laboratorio e popolare la directory di studenti di test (vedi istruzioni)
  2. definire (nel file presenze.schema)  una classe labammreti che contenga due attributi: dataUltimaPresenza di tipo stringa e numeroPresenze di tipo numerico. ATTENZIONE all'unicità degli OID, usate numeri simili a quelli contenuti nello schema studenti incrementando l'ultima cifra
  3. (file ldapgrow.sh) leggere tutte le entry dalla directory LDAP installata sulle macchine virtuali (uml), e sostituire nella directory ogni entry che eredita dalla classe studente con una nuova entry che erediti anche dalla classe labammreti e che abbia i nuovi attributi inizializzati a zero
    • variante: ...e se labammreti discendesse da studente anzichè da top?
  4. (file findabs.sh) stampare a video nome e cognome di tutti gli studenti per cui l'attributo numeroPresenze è minore di 3.
usermon.sh

Monitorare continuamente il sistema e avvertire immediatamente root (vedere la man page del comando mail) appena un utente specificato come argomento lancia un nuovo processo. L'avvertimento deve essere inviato solo una volta per ogni nuovo processo individuato.
sshnum.sh
Visualizzare il numero di processi in esecuzione su una macchina remota il cui nome sia passato come argomento
sshload.sh
Dato un file di nome "lista" che contiene un nome di macchina in ciascuna riga, visualizzare il nome di quella che ha meno processi che girano
sshsort.sh
Dato un file di nome "testo" sulla macchina locale, composto da 1 parola per ogni riga, lo si faccia remotamente ordinare alla macchina che ha meno processi in esecuzione tra quelle elencate nel file "lista"
iptlog1.sh
Fare il log del traffico diretto alla porta 631 della propria macchina.
iptlog2.sh
Fare il log del traffico diretto alla porta 631 della propria macchina che non sia proveniente dalla macchina stessa.
iptping.sh
Dato un file di nome "elenco" contentente diversi IP (uno per riga), e dato sulla riga di comando un parametro "durata"  espresso in secondi, produrre uno script che consenta di far funzionare i ping diretti dalla propria macchina verso una qualunque delle macchine presenti in "elenco" per un tempo “durata” dalla partenza dello script. Normalmente i ping in uscita devono essere bloccati, mentre deve essere sempre consentito che qualunque macchina remota possa pingare la propria.
super1.sh
Costruire uno script che appena lanciato impedisca a chiunque di accedere da remoto via ssh, e rimanga in esecuzione per monitorare l’arrivo di ping da  macchine remote. All'arrivo di un ping da una macchina "m" consenta alla macchina "m" stessa di accedere alla nostra macchina via ssh.
super2.sh
Modificare lo script precedente in modo che, senza mai fermarsi, osservi i tutti i ping in arrivo, chiudendo l'accesso ssh alla macchina "m" alla ricezione di un ping successivo a quello che aveva richiesto l'apertura dell'accesso. Il sistema deve essere multiuser, cioè deve gestire correttamente le richieste provenienti da una molteplicità di macchine.
super3.sh
Modificare lo script precedente in modo che, se una macchina ha avuto accesso ssh in seguito ad un ping, l'accesso venga automaticamente revocato (anche se non arriva un altro ping) se tale macchina non produce traffico ssh per "durata" secondi.
toctoc.sh


chie.sh
Il primo script, toctoc.sh, deve usare ssh per depositare nella directory /tmp/ di una macchina remota (da specificare sulla riga di comando) un file che abbia come nome l'IP address della macchina su cui gira lo script, e che contenga un numero di porta TCP (anch'esso specificato, come secondo parametro, sulla riga di comando), mantenendo poi la connessione ssh per almeno un minuto.
Esempio, sulla macchina 10.1.1.1 lancio "toctoc.sh 10.2.2.2 80": viene creato sulla macchina 10.2.2.2 un file di nome /tmp/10.1.1.1 che contiene 80
Il secondo script è pensato per girare sul server che riceve la connessione lanciata dal primo. Tale server deve agire da router/firewall, bloccando mormalmante tutto il traffico che tenti di attraversarlo.
Lo script chie.sh deve verificare senza mai fermarsi, ogni 5 secondi, la presenza di connessioni ssh al server, verificare la presenza di file inviati da client "toctoc" e la loro corrispondenza con le connessioni ssh rilevate, e nel caso ne trovi deve:
1) inserire una regola nel packet filter che consenta al client di attraversare il server solo per connettersi alla porta remota specificata nel file. Porre attenzione alla direzione delle connessioni.
2) cancellare il file creato dal client e disconnettere forzatamente la connessione ssh agendo sul server sshd
snmpd.conf


manager.sh
Configurare il demone (agent) SNMP di Linux perchè invii una trap ad un manager collocato all'indirizzo 127.0.0.1 quando lo spazio libero sulla partizione / scende al di sotto di una certa soglia.
Scrivere una bozza di manager in grado di intercettare la trap e stamparne a video il contenuto.