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 Laboratorio di Amministrazione di Sistemi L-A

A.A. 2006/2007

Informazioni generali Materiale didattico Guida al laboratorio Esercitazioni proposte
Calendario


Esercizi svolti in laboratorio (cliccare sul nome del file per vedere il codice) e proposte di esercizi da svolgere autonomamente.
Nome file
Testo
Data di svolgimento Strumenti utilizzati
uid.sh
Verificare se c'è un UID libero tra il più alto presente nel file /etc/passwd e quello immediatamente inferiore.
31 gennaio Variabili, backtick, pipelines, filtri (sort, head, tail), aritmetica della shell, test, if-then-else
max.sh Stampare lo username corrispondente al più elevato userid presente nel file /etc/passwd 31 gennaio cut, read, apertura di subshell
read.sh
produrre su standard output l'elenco degli utenti presenti in /etc/passwd nella forma "nome username id userid"
31 gennaio awk
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.
2 febbraio rev, grep
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
2 febbraio
dirsize1.sh
produrre su standard output l'elenco delle 10 directory che occupano più spazio al di sotto di /usr, ordinato dalla più grande alla più piccola.
2 febbraio du
dirsizeN.sh
produrre su standard output l'elenco delle 10 directory di N-esimo livello (N passato come parametro) che occupano più spazio al di sotto di /, ordinato dalla più grande alla più piccola 2 febbraio
free1h.sh

Stampa un messaggio su un file se in una qualsiasi partizione lo spazio libero scende sotto al 10%.
2 febbraio df
archiveflat.sh
Copiare in una directory (passata come primo parametro allo script) tutti i file più vecchi di un certo numero di giorni (passato come secondo parametro).
2 febbraio find
archivetree.sh
Copiare mantenendo la struttura delle directory originali in cui si trovano, tutti i file più vecchi di un certo numero di giorni (passato come secondo parametro allo script) e tutti i file appartenenti ad uid non corrispondenti ad utenti validi del sistema in una directory (passata come primo parametro).
7 febbraio tar
load.sh
Se il carico del sistema è inferiore ad una soglia specificata come primo parametro dello script, lancia il comando specificato come secondo parametro. Altrimenti, con at, rischedula il test dopo 2 minuti, e procede così finchè non riesce a lanciare il comando.
Estensione proposta: limitare a 20 i tentativi, poi abbandonare.
7 febbraio uptime,
at
logload.sh
Campionare ogni 10 secondi il carico del sistema e scrivere l'output sul file /var/log/load. Configurare il sistema per accertarsi che lo script sia sempre in esecuzione.
7 febbraio init,
ridirezione output dopo ciclo
logrotate.sh Ogni giorno alle 23:59 ruotare il log /var/log/load tenendo le ultime N copie in file compressi con nome /var/log/load.x.gz (x=1 per la copia più recente, x=2 per la penultima, ecc...). Curare l'atomicità delle operazioni in modo da non perdere dati, ed effettuare le verifiche opportune per evitare che l'accesso concorrente possa danneggiare i file. 7 febbraio kill,
ps,
for,
seq,
fuser
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", memorizzando il risultato nel file "testo.ord" in locale 9 febbraio ssh

sshknock


knockwatch.sh
Esaminando la documentazione di sshd, specialmente relativa al formato del file authorized_keys. individuare una soluzione a questo problema:
Creare un utente che, contattato via ssh, possa esclusivamente ed automaticamente scrivere su di un file l'IP di provenienza della richiesta.
Pianificare l'esecuzione di uno script in grado di rilevare se l'IP scritto nel file è cambiato tra la sua invocazione precedente e quella attuale.
9 febbraio
rete (Illustra l'uso dei comandi ifconfig e route per ricreare in laboatorio una configurazione client-router-server) 14 febbraio ifconfig
route
client-server Predisporre un canale di comunicazione testuale tra virtual1 porta 3001 e virtual3 porta 3003. Verificare con wireshark, su virtual2, i dati in transito, e lanciare netstat sulle tre macchine per osservare cosa riporta (e cosa no). 14 febbraio nc
wireshark
netstat
tmon.sh Monitorare il traffico ssh tra v1 e v3 su v2. Al superamento di una certa soglia (espressa in numero di pacchetti per minuto) connettersi alla sorgente del traffico eccessivo ed individuare gli utenti responsabili. 16 febbraio iptables
sshlog Loggare su v2 i pacchetti che v1 in qualità di client ssh invia a v3 21 febbraio iptables
syslogd
tcpdump
toctoc.sh
routerconf.sh
avanti.sh
timeout.sh
Il primo script, toctoc.sh, gira sulla macchina client ed accetta come parametri due indirizzi IP (router e server) ed un numero di porta TCP (port).
Usando ssh, deve depositare nella directory /tmp/ di router un file che abbia come nome l'IP address di client, che contenga in una singola riga i valori server e port separati da uno spazio, mantenendo poi la connessione ssh per almeno un minuto.
Esempio, sulla macchina 172.16.1.1 lancio
toctoc.sh 172.16.1.254 172.16.2.1 80 -> viene creato sulla macchina 172.16.1.254 un file di nome /tmp/172.16.1.1 che contiene "172.16.2.1  80"

Il secondo script routerconf.sh serve a configurare inizialmente il router, che deve agire da firewall, bloccando di default tutto il traffico che tenti di attraversarlo.

Il terzo script avanti.sh è pensato per girare su router, e deve verificare senza mai fermarsi, ogni 5 secondi, se sono presenti connessioni ssh a router a cui corrispondano in /tmp file inviati da client "toctoc". Nel caso ne trovi deve:
1) inserire una regola nel packet filter che consenta al client di attraversare il router solo per connettersi al server sulla 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

Il quarto script timeout.sh, in esecuzione sul router anch'esso, deve osservare il  transito dei pacchetti relativo alle connessioni abilitate da avanti.sh. Trascorsi 5 minuti circa (per comodità nel calcolo si possono trascurare i secondi) di assenza di traffico relativo ad una connessione, deve rimuovere dal packet filter la regola che la consente, inserita in precedenza da avanti.sh.
21 febbraio ssh
iptables
logging
inittab
kill
netstat
cron
filesystem.schema
ldap-fs-store.sh
(ldap-fs-insert.sh)
ldap-fs-sumspace.sh
ldap-fs-purge.sh

(è consigliabile aver letto la guida a ldap)
filesystem.schema - Definire un attributo fn di tipo adatto a rappresentare un nome di file, un attributo fs adatto a rappresentare una dimensione in byte, una classe ausiliaria dir che contenga obbligatoriamente fn e facoltativamente fs, una classe ausiliaria file che contenga obbligatoriamente sia fn che fs

ldap-fs-store.sh - memorizzare nella directory un sottoalbero del filesystem, passato come parametro allo script, riproducendo con i DN la struttura gerarchica della collocazione di file e directory

ldap-fs-sumspace.sh - esplorando la directory LDAP, calcolare per ogni entry che rappresenta una directory lo spazio occupato dai file presenti in tale directory, ed aggiornare l'entry con la somma

es: in LDAP ho
        fn=pippo,fn=lib,fn=usr.... con fs=10
        fn=pluto,fn=lib,fn=usr.... con fs=20
-->     aggiorno l'entry fn=lib,fn=usr....
        impostando fs=30

ldap-fs-purge.sh - esplorare la directory LDAP, e verificare se i file in essa rappresentati esistono ancora sul filesystem. In caso contrario rimuoverli da LDAP.
2 marzo ldapadd
ldapsearch
ldapmodify
ldapdelete
testo Prova d'esame svolta il 22 febbraio 2007, con link alla traccia di soluzione