ulimit:ハード制限とソフト制限の違い


87

ulimitのハード制限とソフト制限の違いは何ですか?

開いているファイルの数については、1024のソフト制限と10240のハード制限があります。1024を超えるファイルを開くプログラムを実行することは可能です。ソフト制限は何ですか?


4
話しているulimit -n?非常に低い値(bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c')でシェルを実行してみてください。出力は何ですか?
ジル

回答:


77

ハード制限は、rootのみが上げることができます(どのプロセスでも下げることができます)。そのため、セキュリティに役立ちます。非ルートプロセスはハードリミットを超えることができません。しかし、非ルートプロセスはその子よりも低い制限を持つことができないという点で不便です。

ソフト制限は、プロセスによっていつでも変更できます。そのため、プロセスが連携している限り便利ですが、セキュリティには向いていません。

ソフト制限の典型的な使用例ulimit -Sc 0は、デバッグしている特定のプロセスに対してコアダンプを有効にするオプションを維持しながら()コアダンプを無効にすることです((ulimit -Sc unlimited; myprocess))。

ulimitシェルコマンドのラッパーであるsetrlimitシステムコールなので、それはあなたが決定的なドキュメントを見つける場所です。

一部のシステムではすべての制限が実装されていない場合があります。具体的には、一部のシステムはファイル記述子のプロセスごとの制限をサポートしていません(Linuxはサポートしています)。そうでない場合、シェルコマンドは何もしません。


6
ソフトリミットのユースケースの場合は+1。常駐セットのサイズ制限(ulimit -mRLIMIT_RSS)は、Linuxではもはや有効ではない制限の例です。ただしulimit -v、仮想メモリの制限(、RLIMIT_AS)は機能します。
アダムザルクマン

@Gilles、プロセスを再起動せずに、ソフト制限を変更すると、すぐに有効になりますか?
ライアン

1
@Ryanはい、プログラムはsetrlimit(もちろんルートとして実行されていない限り、ハード制限で許可されている範囲で)を呼び出すことで、いつでも独自のソフト制限を変更できます。ほとんどのプログラムにはユーザーが実行できるコマンドはありませんが、デバッガーを使用してプログラムに接続してsetrlimit呼び出しを実行するか、Linuxで呼び出すことができますprlimit(シェルについては知りません)ユーティリティ)。
ジル

1
現在、prlimitシェルユーティリティもあります。
telcoM

0

ハード制限は、セキュリティ上の目的のためです。非rootユーザーの場合、現在設定されているハード制限からのみハード制限を下げることができます。彼はそれを増やすことはできません。ハード制限の増加は、rootユーザー(またはsudo特権を使用する場合にのみ可能)によってのみ実行できます。非rootユーザーができることは、プロセスの範囲[0、hard limit]にある制限(ソフト制限と呼ばれる)を選択することです。プロセスによって考慮され考慮されるソフト制限。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.