limits.conf
関連記事
/etc/security/limits.conf
を使うことで PAM でログインしたユーザーが使用できるリソースを制限することができます。フォーク爆弾などによってシステムリソースが食い尽くされることを防ぐのに役立ちます。
構文
デフォルトファイルにはコメントが豊富に付けられていますが、limits.conf(5) の man ページを読むことでさらに詳しい情報を得ることができます。
推奨設定
core
コアファイルはデバッグのときは役に立ちますが、通常の使用ではとくに役立ちません。ソフトリミットを0にしてハードリミットを無制限にすることで、デバッグでコアファイルが必要になったときだけ ulimit -c unlimited
で一時的にリミットを変更することができます。
* soft core 0 # Prevent corefiles from being generated by default. * hard core unlimited # Allow corefiles to be temporarily enabled.
nice
最高優先度 (-20) のプロセスを実行できるのは root だけにすることで、システムが反応しなくなった場合に root で対処することができます。
* hard nice -19 # Prevent non-root users from running a process at minimal niceness. root hard nice -20 # Allows root to run a process at minimal niceness to fix the system when unresponsive.
nofile
特定のドメインでプロセスが一度に開くことができるファイル記述子の数を制限します。特定のゲームを動作させるには 値を 8192
などに増やす必要があります。MongoDB や Apache Kafka 等のデータベース管理システムの中は nofile
を 64000
か 128000
に設定することを推奨しているものもあります[1]。
* hard nofile 8192 # Required for certain games to run.
nproc
フォーク爆弾を複製できる回数を制限するため、nproc の制限は重要です。ただし、設定した値が低すぎるとシステムが不安定になったり、新しいプロセスが作成できなくなって使用不可能な状態になることもあります。
ミニマルなウィンドウマネージャを使って複数のデスクトップアプリケーションやデーモンを動かす場合は 300
は低すぎますが、X を起動しないサーバーの場合は十分です (ジョージア大学の Linux サーバーでは 300
に設定されています)。
以下は全てのユーザーの nproc を制限する例です:
* hard nproc 2048 # Prevent fork-bombs from taking out the system.
2048
という値はあくまで例であり、場合によってはもっと高い値が必要になります。逆に、低くしても問題ない可能性もあります。
nproc の設定を何にするのであれ、root ユーザーはいくらでもプロセスを作成できるように設定してください。そうしないと nproc の制限が低すぎた場合に回復できなくなってしまう可能性があります。上記の設定の後に以下の行を記述してください (65536
という値は自由です)。
root hard nproc 65536 # Prevent root from not being able to launch enough processes
priority
デフォルトの nice 値は基本的に 0 ですが、以下のパラメータを使うことでユーザーやグループによってそれぞれ個別の優先度を設定することができます。
* soft priority 0 # Set the default priority to neutral niceness.