私たち全員は、許可されていないシェルで実行されてもホストが応答しないようにする「フォーク爆弾」を見たことがあります。
警告:次のシェルスクリプトを実行しないでください。しないでください。
:(){ :|:& };:
私も知っていますcgroup、メモリ、CPU消費、I / Oスケジューリング優先順位などを制限するために「コントローラ」を割り当てることができるLinuxカーネルレベルのプロセスグループ化構造です。
理論的には、この制御メカニズムを使用して、ユーザーがホストシステムを停止することなく自分のシェルでフォーク爆弾を実行できるようにすることが可能である必要があります。
私はよく分からないどのようにフォーク爆弾は、リソースを消費するためにcgroupを使用してこれを行う方法を知りません。
ベストアンサー1
cgroups
個人的にはここがちょっと過剰だと思います。しかし、ulimit
システムコールで何かを実行するたびに、以下を使用する傾向がありますfork
(習慣にするのは悪い経験です...)。
$ ulimit -u 2500
$ ./mypotentiallydeadlyprogram
このようにして、現在のシェルに対して2500のプロセス制限を設定しました。したがってfork
、呼び出しが多すぎると、最終的に呼び出しが失敗し、システムがクラッシュするのを防ぎ、Ctrl+を強く押しますC。
私のコンピュータでは2500が良い限界だと思いますが、コンピュータが処理できる作業とフォーク爆弾をどれだけ移動させるかによっては、値を増減する必要があるかもしれません。また、機械が生き残るために何かを生産する必要があることも覚えておいてください。機械が窒息するように置かないでください。 ~/.bashrc
私は人々がこれを自分のセッションに書き込んで、セッションの基本的なバッシュを制限するのを見ました。これはシステム管理者にとって非常に楽しいことですが、ユーザーはログイン後に停止することについて非常に不満を表しています。
一時的な制限を設定するのに便利ですがulimit
、rootアクセス権があり、特定のユーザーに制限を適用したい場合は、より恒久的な制限を設定できます。これは次の方法で行うことができます/etc/security/limits.conf
。
# <domain> <type> <item> <value>
youruser soft nproc 2500
youruser hard nproc 2750
上記の設定では、youruser
ソフト制限は2500プロセス(最大2750)です。このファイルを使用すると、システム内のさまざまなエンティティ(ユーザー、グループ...)にさまざまな制限を設定できます。見るより多くの情報が必要な場合は、該当するマニュアルを確認してください。。ただし、これはシステム全体の構成なので、この制限は適用されません。シェルダンのためのyouruser
。
ただし、/proc/sys/kernel/pid_max
カーネルが付与できる最大PIDが含まれます。 PIDは再利用可能なので、これはあなたの仕事に関連していると思うかもしれません。最大プロセス数。