Ce matin, j'ai lu un message qui décrit une vulnérabilité apparente des systèmes Linux. C'est en fait une séquence de caractères - s'il est lancé en ligne de commande - crée une boucle infinie, ce qui entraîne une saturation de mémoire RAM et CPU bloc. Ce n'est pas un déficit de Linux, mais une idée claire de qui lance la chaîne d'erreur de bash sur n'importe quel système d'exploitation qui est équipé. L'auteur du message l'indique, cependant, le simple et efficace moyen le plus pour atténuer les effets de script, mais dangereux microscopiques.

Peut-être cet article peut être utile pour amortir un peu le "ton d'excuse avec laquelle il chante le système d'exploitation d'acier GNU / Linux: il ya une séquence de caractères que peu, si vous avez tapé dans le terminal, envoyer tout le système en chute libre. Voici le code incriminé:

: () { : | : & };: Comment est-il possible que cette brève et énigmatique chaîne peut créer beaucoup de ravages alors? En réalité ce qui se passe est tout à fait normal et l'explication pour ceux qui ont script bash alphabétisation est la suivante: les fonctions en bash.

Les fonctions, en bash, sont déclarées avec la syntaxe suivante:
nomeFunzione() { comando1; comando2; ... comandoN; } nomeFunzione() { comando1; comando2; ... comandoN; } et sont invoquées en tapant leur nom, que les contrôles normaux. Ainsi, par exemple, le code suivant:
saluta(){ echo "ciao"; };saluta qui ne déclarent pas les saluts fonction, il imprime le mot bonjour sur le terminal, et l'invoquer. La fonction de code incriminé est appelé: (deux points).

Eh bien oui, même si c'est un nom particulièrement exotique juridique pour une fonction bash.

Comme vous pouvez le voir maintenant, à la lumière de cela, la fonction (une fois appelé) s'appelle elle-même et redirige sa sortie à une autre invocation de lui-même à travers le tuyau (barre verticale). Si vous ne connaissez pas le tuyau sur lequel il n'est pas nécessaire de s'attarder en détail aux fins de l'explication (et sur lequel il ya une abondante documentation à son tour), il suffit de dire qu'ils vont ouvrir en parallèle entre les deux commandes qui apparaissent, puis code: |: apparaissant dans le corps de la fonction à deux reprises et invoquer cette fonction en parallèle, ce qui entraîne une récursion (double).

Enfin, le Mail & à la fin de la commande a pour effet d'exécuter en arrière-plan.

Ainsi, lorsque la fonction est lancée, elle s'appelle elle-même deux fois en parallèle entraînant une bifurcation (fork), chacune des deux fentes de la bifurcation, à son tour, et ainsi de suite. Le fait que les fonctions sont exécutées en arrière-plan qui fournit un licenciement (par exemple, avec la commande kill), ceux créés par elle (si les deux fourchettes et leurs descendants) ne sera pas achevé à son tour, comme ils le feraient normalement. Cette fonction de démarrage imparable que le produit de façon exponentielle, éventuellement saturer les ressources (CPU et mémoire) et après un temps un certain temps »est le gel du système.

L'antidote. Pour les timides: l'antidote à ces fork bomb, et il est tout simplement de mettre une limite sur le nombre de processus est lancé par un utilisateur.

Le message d'origine:

http://www.tuxbay.org/index.php?option=com_content&task=view&id=152&Itemid=1

Partager ce contenu:
  • del.icio.us
  • Google Bookmarks
  • Digg
  • Facebook
  • Technorati
  • MySpace