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 |
|
|