[LatinaLUG] [Shell] Script letale
Gabriele Mambrini
gm@badpenguin.org
Ven 9 Nov 2007 23:21:24 CET
Con ordine: per prima cosa deoffuschiamo il codice cominciando a
metterlo a capo in maniera più familiare.
.() {
. | . &
}
.
A questo punto :-) dovrebbe intravvedersi la definizione di una
funzione, il cui nome è . (e che va a "nascondere" il built-in punto)
pippo() {
pippo | pippo &
}
pippo
quindi questa funzione (che alla fine viene innescata) fa creare sub
shell che la rieseguono e le mette in background. Risultato dopo poco
tempo il sistema viene invaso da questi processi, che diventano talmente
tanti che il tutto il tempo viene passato a crearli e terminarli e non
vengono più schedulati in maniera usabili i processi "veri" dell'utente.
Quindi non si riesce più a chiudere quel termninale, ad dare un contro-C
a quella shell e nemmeno ad usare X o a fare login :-)
In realtà c'è un limite nel numero di processi che può generare un
utente e lo si può vedere con bash usando ulimit:
$ ulimit -u
16372
e il default è troppo alto. Infatti facendo girare
$ ulimit -u 200; .() { .|.& }; .
il sistema resta governabile e si riesce a fermare in tempo il piccolo
diavolo. Con un default più basso si può proteggere il sistema da questo
trucco. Chiudo con una nota di folklore:
# uname
OpenBSD
# ulimit -p
532
Gabriele
Maggiori informazioni sulla lista
latina