GNU/Linux >> Linux の 問題 >  >> Linux

Bash コマンド :(){ :|:&};:はプロセスを生成してカーネルを死に至らしめます。構文を説明できますか?

:(){ :|:& };:

..: という名前の関数を定義します 、それ自体をスポーンし (2 回、一方が他方にパイプします)、それ自体を背景にします。

改行あり:

:()
{
    :|:&
};
:

: の名前を変更する 関数を forkbomb に :

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

ulimit を使用することで、このような攻撃を防ぐことができます ユーザーごとのプロセス数を制限するには:

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

より永続的に、 /etc/security/limits.conf を使用できます (少なくとも Debian などでは)、例:

* hard nproc 50

もちろん、これは 50 個のプロセスしか実行できないことを意味します。マシンの動作に応じて、これを増やすこともできます!


: という関数を定義しています 自分自身を 2 回呼び出します (コード:: | : )。バックグラウンドでそれを行います (& )。 ; の後 関数定義が完了し、関数 : 始めます。

:のすべてのインスタンスが 2 つの新しい :を開始します... プロセスのバイナリ ツリーのように...

プレーン C で書かれている:

fork();
fork();

Linux
  1. Linuxカーネルについて知らなかった30のこと

  2. システムをシャットダウンするための3つのLinuxコマンドとあなたはそれを簡単に行うことができます

  3. バッシュ演算子の違い[[Vs[Vs(Vs((?

  1. Readlinkコマンドのオプションを説明しますか?

  2. Linux で Xcode を実行できますか?

  3. 前の bash コマンドの引数を思い出すにはどうすればよいですか?

  1. Bash の「test」コマンドでの「&&」と「&」の比較

  2. -e は bash シバンで何をしますか?

  3. ps は Linux でカーネル以外のプロセスのみを表示できますか?