Nome file
|
Testo
|
uid.sh
|
Verificare se
c'è un UID libero tra il più alto (solitamente 65534)
presente nel file /etc/passwd e quello immediatamente inferiore.
|
uid2.sh
|
Estendere uid.sh per
indicare correttamente il primo UID utilizzabile anche nel caso che
/etc/passwd non contenga 65534
|
read.sh
|
produrre su standard
output l'elenco degli utenti presenti in /etc/passwd nella forma "nome username id userid"
|
read2.sh
|
modificare read.sh
per trovare efficientemente e stampare lo username corrispondente
all'userid più alto presente nel file
|
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
|
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.
|
dirsize2.sh
|
produrre su standard
output l'elenco delle 10 directory di secondo livello (es.: local/bin,
java/jre, share/doc) che occupano
più spazio al di sotto di /usr, ordinato dalla più grande
alla più
piccola |
dirsize3.sh
|
modificare
dirsize1.sh per stampare anche l'elenco delle 5 directory più
grandi trovate al di sotto di ciascuna delle 10 individuate al passo
precedente. |
danger.sh
|
Cercare i file con
il SUID bit settato e le directory scrivibili da tutti senza sticky bit
|
free1h.sh
|
Stampa un messaggio
su un file se in una qualsiasi partizione lo spazio libero scende sotto
al 10%.
Schedulare free1h con crontab perchè sia eseguito ogni ora.
|
free5s.sh |
Utilizza free1h per
eseguire il monitoraggio ogni 5 secondi. |
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).
|
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).
|
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.
|
load2.sh
|
Migliorare lo script
precedente perchè:
- deduca correttamente il percorso di lancio dello script da
rischedulare
- deduca correttamente il percorso di lancio del comando (parametro
dello script da rischedulare)
- limiti il numero di tentativi di lancio ad un massimo di 20
|
monitor
remoto [PDF]
|
(il file PDF
descrive il problema, propone passo per passo una traccia di soluzione,
e contiene spunti di esercizi da svolgere autonomamente per estenderla)
|
toctoc.sh
|
|
|
|
|
V
|
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"
|
avanti.sh
|
|
|
|
|
|
V
|
Il secondo script
è pensato per girare su router
che riceve la
connessione lanciata da client.
Tale
macchina deve agire da
router/firewall, bloccando di default tutto il traffico che tenti di
attraversarlo.
Lo script avanti.sh deve
verificare senza mai fermarsi, ogni 5 secondi, la presenza di
connessioni ssh al router,
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 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
|
timeout.sh
|
Trascorsi 5 minuti
circa (per comodità nel calcolo si possono trascurare i secondi)
dal transito dell'ultimo pacchetto avvistato su router relativo ad una delle
connessioni abilitate tra un client
ed un server su una
determinata port, la regola
del packet filter inserita in precedenza deve essere rimossa.
|
Progetto complessivo
|
Un certo insieme di
utenti di deve poter monitorare il carico dei propri server linux (uno
o più per utente). I dati che permettono la mappatura tra utente
e server e tra server e credenziali d'accesso sono memorizzati in una
directory LDAP (ospitata su di un server configurabile con la variabile
d'ambiente $LDAPSERVER) secondo queste specifiche:
- l'utente è definito a partire dalla
classe "account" dello schema cosine.schema, con l'aggiunta di un
attributo ammsisserver con
valore "nome/ip/metodo", dove metodo
può essere ssh oppure snmp
- il server è definito a partire
dalleclassi "nisObject" e "ipHost" di nis.schema
- se il server e' accessibile via ssh deve essere
presente l'ulteriore attributo ammsisusername
- se il server e' accessibile via snmp deve
essere presente l'ulteriore attributo ammsiscommunity
Una volta che l'utente abbia avviato il controllo:
- in caso il carico sia superiore a 0.8 si deve registrare l'evento
sulla facility local0.warning
di syslog e ripetere il controllo dopo 15 minuti
- in caso contrario si deve registrare l'evento sulla facility local0.info di syslog e ripetere il
controllo dopo 3 minuti.
La macchina locale deve essere configurata per bloccare tutto il
traffico IP da e per il mondo esterno, consentendo per il tempo minimo
indispensabile il transito dei pacchetti strettamente necessari.
Ai fini del test si configuri almeno un server in modo che sia
accessibile via ssh senza dover digitare la password ed un server in
modo che il demone snmp riporti direttamente il superamento della
soglia di carico. Si popoli corrispondentemente la directory
perchè l'utente root locale possa accedere a questi server di
test.
----
|
|
|