グローバルに設定する場合
alias ':(){ :|:& };:'='echo fork bomb averted'
それはバッシュフォーク爆弾の実行を回避するための効果的なセキュリティ戦略ですか、それとも実行する方法はありますか?
私は質問がうまくいくと思います:コマンドが他のものにエイリアスされているときにコマンドを実行する方法はありますか?
の 二、 番号、 三、...その主な障害は次のとおりです。
エイリアスの有効な名前ではありません。 バッシュのオンラインマニュアル :
文字...と上記のシェルメタ文字または引用文字は、エイリアス名に表示されない場合があります。
(
、)
、&
、|
および空白は、Bash 4.4で廃止されました。
その特定の文字列は、シェルでフォーク爆弾を作成する唯一の方法ではなく、見た目がよくないことで有名です。たとえば、実際に文字で構成されるものの代わりに、関数:
を呼び出す必要はありません。
エイリアスを設定できた場合、ユーザーはエイリアスの設定を解除したり、コマンドラインでエイリアス名をエスケープして回避したり、スクリプトで関数を実行してエイリアスを完全に無効にしたりできます(Bashは非インタラクティブシェルでエイリアスを展開しません)。 。
シェルがフォーク爆弾のすべてのバージョンを停止するのに十分に制限されている場合でも、汎用システムには、サブプロセスを再帰してフォークできる他のプログラム可能なユーティリティがあります。 PerlまたはCコンパイラを入手しましたか?簡単です。 awkでもおそらくそれを実行できます。それらがインストールされていない場合でも、コンパイルされたバイナリをシステムの外部から取り込んだり、/bin/sh
を実行したりすることを停止する必要があります。機能するシステム。
ulimit -u
(つまり、RLIMIT_NPROC
)または同等のものを使用して、ユーザーが開始できるプロセスの数を制限します。ほとんどのLinuxシステムには pam_limits
があり、ユーザーが選択したコマンドが開始される前にプロセス数の制限を設定できます。
/etc/security/limits.conf
のこのようなものは、すべてのユーザーに50プロセスのハード制限を課します。
* hard nproc 50
いいえ。フォーク爆弾を書く方法は多すぎます。
邪悪なフォーク爆弾作成者は、別の関数名で再試行するだけです。または彼のフォーク爆弾が成功するまで他の変更。
不注意なフォークボムのライターは、最初から正規のフォークボムを作成しません。
自分で不注意なフォークボムのライターになるのは実際にはかなり簡単です。たとえば、再帰的なmake
を外部のチェックされていないcd
と一緒に使用し、それを-j
オプションと存在しないサブディレクトリと組み合わせることができます-実際の例かつて。
すべての可能性から保護することはできません。最も確実なのは、断固とした攻撃者に対してではありません。達成できることは、システムの複雑さを増すことだけです。
有効なエイリアス名 ではないため、フォーク爆弾にエイリアスを設定することはできません。
$ alias ':(){ :|:& };:'='echo fork bomb averted'
bash: alias: `:(){ :|:& };:': invalid alias name
文字「/」、「$」、「 `」、「=」、および上記のシェルのメタ文字または引用文字は、エイリアス名に表示されない場合があります。
一部のシェルは、宣言時にエイリアス名をチェックせず、コマンドを解釈するときに無効な名前をスキップします。フォーク爆弾には常に&
が含まれます。これは有効なエイリアス名に含めることができないため、この方法で自分を保護することはできません。
二回、いいえ。
それはフォーク爆弾を書く唯一の方法ではありません。
エイリアスがあるときに「コマンド」を実行する方法もいくつかあります。
command the-command
\the-command
例:
$ alias ls=not-really-ls
$ ls
-bash: not-really-ls: command not found
$ \ls
jeff.html output.png
$ command ls
jeff.html output.png