web-dev-qa-db-ja.com

OS Xでのフォーク爆弾保護-ulimitでプロセスを制限しますか?

約1年前にUNIXの魅力的な世界に紹介されましたが、その後、より良い表現がなかったため、今日、私のいじくり回しの結果、「廃棄物が急速に回転するブレードと衝突しました」。専門家から少しアドバイスをもらう時期かもしれないと思いました。

OS X10.6を実行しているコンピュータをフォーク爆弾から保護するための私のオプションは何かと思っていました。私はこれを尋ねます。なぜなら(私は完全な報復であるため)、システムは標準のBASHフォーク爆弾に対して脆弱ではなかったので、実行時に次のようになりました。

"-bash: fork: Resource temporarily unavailable"

また、Cで書かれたワンライナーに対して脆弱ではないこと。実行したと言えば、すべてが停止し、起動できなかったため、明らかに(再起動以外に)何もできませんでした。新しいプロセス。 ulimitを見てみましたが、今は少し頭がおかしいです。

Ulimitを使用してユーザーごとに(より低い?)プロセス制限を設定した場合、別のユーザーとしてSSHで接続し、どういうわけかフォーク爆弾を殺すことができますか?ご覧のとおり、私はこれらすべてにかなり慣れていません。それについて考えると、実際にどのように物を殺すのかわかりません。

とにかく、(同じフォークCプログラムを実行しているときに)フォーク爆弾が再び発生するのを防ぐ方法を知りたいのですが、これはパーソナルマシンにとっては少しやり過ぎかもしれませんが、システムを少し少なくすることができればユーザーがクラッシュを引き起こす可能性があるので、私はそれをしたいと思います。私自身の安心のために。

要約すると(私の長くてバラバラなとりとめのないことで申し訳ありませんが、ここでは遅く、おそらくお分かりのように-私はあまりオンラインに投稿しません。正直言って私はもっと潜んでいます。私は愚かな質問を投稿しました!:-p

  • シェルからのフォーク爆弾の実行からMacを保護するにはどうすればよいですか? (それが最善の方法である場合はulimitを使用します)

  • Ulimitがその方法である場合、ulimitの変更をスティックにするにはどうすればよいですか?私が間違っていなければ、再起動時にデフォルトにリセットされます。

  • 上記の2つのポイントを実行した後、DO_NOT_EXECUTEと呼ばれる実行中のフォーク爆弾をどのように殺すのでしょうか。理想的には、C実行可能ファイルを実行し、CTRL-Cで終了できるようにすると、BASH fbで発生するエラーと同じエラーが発生するようにしますが、回復できる方法を見つけることができます。再起動せずに。

あなたの忍耐(そしてあなたが私に与えることができるかもしれないどんな助けでも)に感謝します、

oms

2
oms

sysctl を見て、カーネルの制限を調整してください。何らかの理由で、MacOS Xのmanページにはkern.maxprocperuidが記載されていません。 数年前にMac OS Xのヒントで言及されています

多くのプロセスをすばやく取り除くことに関しては、私は killall を使用します。

1
Joe H.

Mac OS X…「フォーク:リソースが一時的に利用できません」

必要な変更を持続させることを含め、この分野を完全にカバーします。に示されている制限の違いに基づいて、これから保護されると思います。

$ sysctl kern.maxproc kern.maxprocperuid

もちろん、あなたがフォーク爆弾を発射したユーザーだった場合、そのような運はありません!

1
medina