回答:
ハード制限は、rootのみが上げることができます(どのプロセスでも下げることができます)。そのため、セキュリティに役立ちます。非ルートプロセスはハードリミットを超えることができません。しかし、非ルートプロセスはその子よりも低い制限を持つことができないという点で不便です。
ソフト制限は、プロセスによっていつでも変更できます。そのため、プロセスが連携している限り便利ですが、セキュリティには向いていません。
ソフト制限の典型的な使用例ulimit -Sc 0
は、デバッグしている特定のプロセスに対してコアダンプを有効にするオプションを維持しながら()コアダンプを無効にすることです((ulimit -Sc unlimited; myprocess)
)。
ulimit
シェルコマンドのラッパーであるsetrlimit
システムコールなので、それはあなたが決定的なドキュメントを見つける場所です。
一部のシステムではすべての制限が実装されていない場合があります。具体的には、一部のシステムはファイル記述子のプロセスごとの制限をサポートしていません(Linuxはサポートしています)。そうでない場合、シェルコマンドは何もしません。
ulimit -m
、RLIMIT_RSS
)は、Linuxではもはや有効ではない制限の例です。ただしulimit -v
、仮想メモリの制限(、RLIMIT_AS
)は機能します。
prlimit
シェルユーティリティもあります。
ハード制限は、セキュリティ上の目的のためです。非rootユーザーの場合、現在設定されているハード制限からのみハード制限を下げることができます。彼はそれを増やすことはできません。ハード制限の増加は、rootユーザー(またはsudo特権を使用する場合にのみ可能)によってのみ実行できます。非rootユーザーができることは、プロセスの範囲[0、hard limit]にある制限(ソフト制限と呼ばれる)を選択することです。プロセスによって考慮され考慮されるソフト制限。
ulimit -n
?非常に低い値(bash -c 'ulimit -n 4; exec 3>a; exec 4>b; exec 5>c'
)でシェルを実行してみてください。出力は何ですか?