私のサーバーを守る見えないファイアウォール:Linuxユーザーリソース制限 (ulimit) 完全ガイド 🛡️

こんにちは!Linuxサーバーを運用していると、ヒヤリとする瞬間に遭遇することがあります。ユーザーの一人が実行した誤ったスクリプト一つが、サーバーのCPUやメモリをすべて占有し、システム全体が停止してしまう状況です。😱 特に、無限に自己複製する「フォーク爆弾(fork bomb)」攻撃は、想像するだけでも恐ろしいものです。

このような大惨事を防ぐために必要なのが、ユーザーリソース制限(User Resource Limits)です。特定のユーザーやグループがシステムリソースを過度に使用するのを事前に防ぐ、見えないファイアウォールのようなものです。今日は、この強力な機能のすべてを掘り下げてみましょう!


1. 制限の二つの顔:ソフトリミット vs ハードリミット 🚦

Linuxのリソース制限には二つの種類があります。この二つの違いを理解することが最も重要です。

ソフトリミット (Soft Limit)

名前の通り、柔らかい、一種の「警告線」または「推奨限度」です。ユーザーはこの制限に達すると警告を受けますが、ハードリミットの範囲内で一時的に自分で限度を上げることができます。

ハードリミット (Hard Limit)

絶対に超えることのできない「物理的な壁」または「最大限度」です。一度設定されると、管理者(root)のみがこの限度を上げることができ、一般ユーザーは決してこの値を超えることはできません。

💳 クレジットカードの例え: ソフトリミットは、「今月は10万円だけ使おう」と自分で決めた予算目標のようなものです。一方、ハードリミットは、カード会社が設定した「総信用限度額50万円」のようなもので、それ以上は使いたくても使えません。


2. どこでどうやって?リソース制限設定ファイルを徹底解説 🛠️

これらの制限は、/etc/security/limits.conf ファイル、またはより推奨される方法として、/etc/security/limits.d/ ディレクトリ内に新しい .conf ファイルを作成して設定します。(例:99-custom.conf)

設定ファイルの構文は、1行に1つのルールを定義する非常にシンプルなものです。

# <domain>    <type>    <item>    <value>
  • : ルールを適用する対象です。
  • username: 特定のユーザー名(例:john)
  • @groupname: 特定のグループ(例:@developers)
  • *: すべてのユーザー
  • : 制限の種類です。
  • soft: ソフトリミット
  • hard: ハードリミット
  • : 制限するリソースの種類です。
  • nproc: 最大プロセス数(Number of Processes) – 「フォーク爆弾」防止に必須!
  • fsize: 生成できるファイルの最大サイズ(単位:KB)。無限に増大するログファイルの防止。
  • nofile: 開くことのできるファイルの最大数(Number of Open Files) – ウェブサーバーやDBサーバーに非常に重要。
  • cpu: 最大CPU使用時間(単位:分)
  • memlock: メモリに固定できる最大空間(単位:KB)
  • : 制限する値です。

3. 実践例:このように使ってみましょう 📋

以下は実際の使用例です。この内容を /etc/security/limits.d/99-my-limits.conf のようなファイルに保存します。

# developersグループに属するすべてのユーザーは、最大100個のプロセスを持つことができる(soft/hard同じ)
@developers    -    nproc    100

# 'jane'ユーザーは最大5GBサイズのファイルまでしか作成できない(hard)
jane    hard    fsize    5242880 # 5 * 1024 * 1024 KB

# 'john'ユーザーのオープンファイル数をsoft 50000、hard 60000に制限する
john    soft    nofile   50000
john    hard    nofile   60000

# すべてのユーザーはCPUを1000分以上使用できない
* hard    cpu      1000

4. 設定完了!次は確認の時間 ✅

設定を終えた後には、二つの重要なステップが残っています。

1. 再ログイン必須!

limits.conf の設定は、ユーザーが新しくログインする際に pam_limits.so モジュールによって適用されます。したがって、設定を変更した場合は、該当ユーザーは必ずログアウトしてから再度ログインする必要があります。

2. ulimit コマンドで確認

ログインしたユーザーは、ulimit コマンドを通じて自分に適用された制限を確認できます。

  • すべての制限を確認する:

`

ulimit -a

`

  • 最大プロセス数を確認する(soft/hard):

`

ソフトリミットを確認 (-Su)

ulimit -Su

ハードリミットを確認 (-Hu)

ulimit -Hu

`

  • 最大ファイルサイズを確認する(soft):

`

ソフトリミットを確認 (-Sf)

ulimit -Sf

`

結論:安定したサーバーのための必須習慣

ユーザーリソース制限は、単にユーザーを「制御」するための機能ではありません。予期せぬミスや攻撃からシステム全体を保護し、すべてのユーザーに公平なリソースを割り当てることで、サーバーの安定性と信頼性を高める専門的なシステム管理技術です。

今すぐあなたのサーバーに適切なリソース制限を設定し、夜も眠れないような障害から解放されましょう!🚀


タグ:

Linux, ulimit, limits.conf, リソース管理, システム管理, セキュリティ, nproc, fsize, DevOps, サーバー安定性


Comments

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です