A qualcuno di noi sara’ capitato di leggere in giro riguardo al seguente codice da battere sul terminale:

ATTENZIONE!: Non lanciate questo comando prima di avere letto tutta la spiegazione.

:(){ :|:& };:

Spiegazione Tecnica

NB: Vogliate scusarmi sin da ora per le scarse conoscenze e per i termini tecnici tradotti dall’inglese

Questa funzione di bash, chiamata recursive function, e’ forse il codice piu’ “orribile” che si possa utilizzare su qualsiasi sistema Unix / Linux. E’ usata spesso dagli amministratori di sistema per testare i limiti dei processi in uso da parte di un gruppo o di un utente.
Tali limiti sono configurabili tramite il file /etc/security/limits.conf o PAM

Una volta attivato il fork bomb sul sistema, potrebbe non essere piu’ possibile ripristinare la normale situazione di operativita’ costringendoci ad eseguire un reboot forzato come unica soluzione per interrompere tutte le istanze create da questo comando composto.

:() – E’ un nome funzione che non accetta alcun argomento. Generalmente, la funzione di bash e’ definita nel modo seguente:

foo(){
arg1=$1
echo ”
#do_something on $arg argument
}

fork() bomb e’ definito come segue:

:(){
:|:&
};:

:|: – qui viene usata una tecnica di programmazione chiamata recursion che passa l’output ( pipes ) ad un altra chiamata della funzione stessa ‘:’. La parte peggiore e’ la funzione che viene richiamata due volte, per “bombardare” il nostro sistema.

& – Mette la function call in background, cosi’ i processi “figli” non possono “morire” continuando a “divorare” le risorse.

; – Termina la definizione di funzione

: – Richiama la funzione (run), a.k.a imposta il fork() bomb.

Un esempio di codice piu’ “umanamente” interpretabile:

bomb() {
bomb | bomb &
}; bomb

Puo’ capitare in situazioni scolastiche / universitarie o di Internet point, che questi limiti non siano definiti..e per ottenere un sistema sicuro e stabile e’ bene specificare il valore massimo di processi che ogni utente (o gruppo) puo’ gestire.
Per la spiegazione dei parametri (gruppi, utenti, wildcards) basta leggere l’introduzione che troviamo nel file:

sudo kate /etc/security/limits.conf

Facciamo un esempio concreto di quanto appreso fino ad ora:

@student hard nproc 20
@faculty soft nproc 20
@faculty hard nproc 50
dyve hard nproc 300

dyve = nome utente
@student = nome gruppo
hard – soft = limiti rinforzati
nproc = numero processi
300 = limite processi

Teniamo presente che ambienti desktop come Gnome o KDE generano una notevole quantita’ di processi, quindi prendiamo come riferimento il numero dei processi che normalmente utilizziamo, ad esempio controllando con:

ksysguard

Free Image Hosting at www.ImageShack.us

Nel mio caso, un limite di 300 andra’ benissimo.
Adesso e’ possibile testare il fork bomb senza che il sistema vada in freeze

bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable
bash: fork: Resource temporarily unavailable

😉

Related Posts Plugin for WordPress, Blogger...

Il tuo indirizzo ip:
3.85.143.239

Valutazione 3.00 su 5
happy wheels 2 demo

Category:

Senza categoria

Tags:

,

Commenti via Facebook:

Leave a Reply

Your email address will not be published. Required fields are marked *

*

11 Comments

  • Complimenti, bell’articolo 🙂

    Sono quasi commosso 😀
    Questa proprio non la sapevo

      Quota

  • @redgun
    complimenti a te per il blog..stasera torno a farci una visitina, c’e’ quel programma per la chitarra che serve ad un mio amico..solo che anche lui usa linux
    😉

      Quota

  • me l’aveva fatto un mio amico nel 2003 all’uni ed ora è un DD

      Quota

  • Grazie per il bell’articolo…

      Quota

  • Ciao Divi, bell’articolo xD lo avevo letto in inglese da qualche parte ma è un bene che tu lo proponga in italiano.. volevo solo suggerirti, anche se probabilmente li hai mantenuti intenzionalmente, che “recursive function” e “recursion” si possono tranquillamente tradurre “funzione ricorsiva” e “ricorsione”. ma come ho detto probabilmente lo sai già =)

      Quota

  • @stefanauss
    si li ho mantenuti cosi’ perche’ sono comunque usati nel linguaggio tecnico
    grazie per la precisazione
    😉

      Quota

  • cazz mi hai battuto sul tempo e’ una vita che volevo fare un articolo su questa riga di bash malefica … ca zz cazz .. mi hai battuto sul tempo!!!! 😉
    considera che avevo inziato a riscrivere guide sulla bash .. mannaggia .. LOL

      Quota

  • divi ma hai disabilitato i trackback? perchè sembra che il mio non sia arrivato…

      Quota

  • @Kijio
    e lo so, sai quanti articoli che ho buttato io?
    😀
    @simo_magic
    no, non l’ho disabilitato..

      Quota

  • davide ITALY 11 anni ago

    Testato con gusto per veder cosa succedeva…
    Credo che dopo aver modificato il file occorra un termina sessione almeno per far sentire i cambiamenti perché con Lenny mi è andata in blocco mentre al riavvio invece funzionava perfettamente. …….. carino ora cerco di modificare lo script per far venir fuori il numero di processi generati.

      Quota

  • @davide
    nel mio caso non e’ stato necessario riavviare la sessione..pero’ ho cannato la prima volta a mettere @dyve..perche’ la chiocciola va nei gruppi..non davanti all’utente..
    meno male che san Firefox salva la sessione
    😀

      Quota