グローバルに設定したい場合
alias ':(){ :|:& };:'='echo fork bomb averted'
これがBashフォーク爆弾の実行を防ぐための効果的なセキュリティ戦略ですか、それともそれを実行する方法はまだありますか?
質問は次のとおりです。別のコマンドにエイリアスされたコマンドを実行する方法はありますか?
ベストアンサー1
二、いいえ、三...主な障害物は次のとおりです。
有効なエイリアスではありません。Bashのオンラインマニュアル:
上記の文字...とシェルメタ文字または引用符文字は、エイリアスには表示しないでください。
(
Bash 4.4には、)
および空白&
がもう存在しません。|
この特定の文字列はシェルにフォークボムを作成する唯一の方法ではなく、あいまいに見えるので有名です。たとえば、
:
実際に文字で構成されるのではなく、関数を呼び出す必要はありません。エイリアスを設定できる場合、ユーザーはエイリアスをオフにするか、コマンドラインからエイリアスをエスケープしてバイパスするか、スクリプトで関数を実行してエイリアスを完全に無効にすることができます(Bashは非対話型シェルでエイリアスを拡張しません) 。 )。
すべてのバージョンのフォーク爆弾を防ぐのに十分なシェルが制限されていても、ユニバーサルシステムにはサブプロセスを繰り返してフォークできる他のプログラマブルユーティリティがあります。 PerlやCコンパイラはありますか?とても簡単です。でもawkもできます。これらのファイルをインストールしなくても、ユーザーがシステム外でコンパイルされたバイナリをインポートしたり、システム
/bin/sh
の残りの部分が正しく機能するために必要なシェルを実行したりするのを防ぐ必要があります。
ただ使用ulimit -u
(たとえばRLIMIT_NPROC
)またはユーザーが開始できるプロセスの数を制限するのと同じです。ほとんどのLinuxシステムで利用可能pam_limits
ユーザーが選択したコマンドを実行する前に、プロセス数制限を設定できます。
次のようにすると、/etc/security/limits.conf
すべてのユーザーに対して50のプロセスという厳しい制限が設定されます。
* hard nproc 50