linux security sysctl pam selinux apparmor fstab

Linux カーネルとセキュリティ設定:sysctl、PAM、およびアクセス制御

sysctl、PAM、SELinux、AppArmor、およびセキュアな fstab マウント設定を使用した、Linux カーネルの要塞化とセキュリティ設定の包括的なガイド。

2026-04-18

Linux カーネルとセキュリティ設定:sysctl、PAM、およびアクセス制御

Linux システムのセキュリティを確保するには、カーネルから始まり、認証システム、アクセス制御、ストレージのマウントに至るまで、多層的なアプローチが必要です。このガイドでは、現代の Linux 環境における最も重要なセキュリティ設定コンポーネントについて詳しく説明します。

1. sysctl によるカーネルパラメータの設定

sysctl コマンドと /etc/sysctl.conf ファイル(および /etc/sysctl.d/ 内のファイル)は、実行時に Linux カーネルパラメータを設定するための主要なツールです。これらのパラメータの多くは、セキュリティに重大な影響を及ぼします。

sysctl 設定ジェネレーターの活用

設定ファイルを手動で編集することもできますが、sysctl 設定ジェネレーター (sysctl config generator) を使用すると、重要な要塞化設定を見落とさないようにするのに役立ちます。設定すべき一般的なパラメータは次のとおりです。

  • ネットワークの要塞化: IP フォワーディングの無効化 (net.ipv4.ip_forward = 0)、ICMP リダイレクトの無視 (net.ipv4.conf.all.accept_redirects = 0)、TCP SYN cookie 保護の有効化 (net.ipv4.tcp_syncookies = 1)。
  • メモリ保護: kernel.randomize_va_space = 2 による ASLR(アドレス空間配置のランダム化)の有効化。
  • 情報漏洩の制限: カーネルログへのアクセス制限 (kernel.dmesg_restrict = 1) およびカーネルシンボルテーブルの制限 (kernel.kptr_restrict = 2)。

Linux カーネルパラメータ参照表

パラメータ 推奨値 説明
net.ipv4.tcp_syncookies 1 SYN フラッド攻撃から保護します。
net.ipv4.conf.all.rp_filter 1 IP スプーフィングを防ぐための逆パスフィルタリングを有効にします。
kernel.randomize_va_space 2 バッファオーバーフロー攻撃を防ぐための完全な ASLR。
fs.protected_fifos 2 全員に書き込み権限のあるディレクトリ内での FIFO への不正な書き込みを防ぎます。

2. プラグ可能認証モジュール (PAM)

PAM は、サービス自体を変更することなく、さまざまなサービスの認証を管理するための柔軟な方法を提供します。強力なパスワードポリシーと多要素認証を強制するには、PAM を正しく設定することが不可欠です。

PAM 設定ジェネレーターの考慮事項

PAM 設定ジェネレーター (PAM config generator) は通常、/etc/pam.d/ 内のファイルに焦点を当てます。セキュリティのために含めるべき主なモジュールは次のとおりです。

  • pam_cracklib.so / pam_pwquality.so: パスワードの複雑さの要件(長さ、文字の種類)を強制します。
  • pam_tally2.so / pam_faillock.so: ブルートフォース攻撃を防ぐために、ログイン失敗回数が一定数に達した後にアカウントをロックします。
  • pam_unix.so: /etc/shadow に対してパスワードを確認するための標準モジュール。

パスワード品質設定の例:

password requisite pam_pwquality.so retry=3 minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

3. 強制アクセス制御:SELinux と AppArmor

ユーザーとグループに基づく標準的な任意アクセス制御 (DAC) とは異なり、強制アクセス制御 (MAC) を使用すると、管理者はシステム上のすべてのプロセスとファイルに対してきめ細かなセキュリティポリシーを定義できます。

SELinux ポリシージェネレーター vs. AppArmor プロファイルジェネレーター

  • SELinux (Security-Enhanced Linux): すべてのオブジェクト(プロセス、ファイル、ポート)にラベル付けシステムを使用します。強力ですが、学習曲線は急です。複雑な拒否を処理するには、多くの場合 SELinux ポリシージェネレーター (SELinux policy generator) (audit2allow など) が必要になります。
  • AppArmor: パスベースのプロファイルを使用します。一般に SELinux よりも設定が容易であると考えられています。AppArmor プロファイルジェネレーター (AppArmor profile generator) (aa-genprof など) は、アプリケーションの動作を監視することでプロファイルの作成を支援します。

SELinux と AppArmor の比較

機能 SELinux AppArmor
制御タイプ ラベルベース パスベース
複雑さ
デフォルト採用 RHEL, CentOS, Fedora Ubuntu, Debian, openSUSE
柔軟性 非常に高い
学習曲線 緩やか

4. /etc/fstab によるセキュアなストレージマウント

/etc/fstab ファイルは、ストレージデバイスのマウント方法を定義します。正しいマウントオプションを使用すると、一時ディレクトリからの悪意のあるバイナリの実行など、多くの種類の攻撃を防ぐことができます。

/etc/fstab ジェネレーターのセキュリティフラグ

/etc/fstab ジェネレーター (/etc/fstab generator) を使用する場合は、非システムパーティション(/tmp/var、または外部ドライブなど)に次のセキュリティフラグを含めるようにしてください。

  • nodev: ファイルシステム上のブロックまたはキャラクタ特殊デバイスの解釈を禁止します。
  • nosuid: set-user-identifier または set-group-identifier ビットを無効にします。
  • noexec: ファイルシステム上でのバイナリの実行を禁止します。

/tmp のセキュアなエントリ例:

UUID=... /tmp tmpfs rw,nosuid,nodev,noexec 0 0

FAQ:Linux セキュリティ設定

Q: SELinux と AppArmor のどちらを使うべきですか?

A: 通常、使用しているディストリビューションによります。ネイティブにサポートされ、デフォルトで有効になっているものを使用してください(RHEL 系は SELinux、Debian 系は AppArmor)。これらは最も包括的な事前設定済みポリシーを備えています。

Q: なぜ net.ipv4.ip_forward はデフォルトで無効なのですか?

A: IP フォワーディングを有効にすると、システムがルーターとして動作できるようになります。これは、明示的な意図がなく、適切にファイアウォールが設定されていない場合、セキュリティリスクになる可能性があります。

Q: PAM を誤って設定するとどうなりますか?

A: PAM の設定を誤ると、全員(root を含む)がシステムからロックアウトされる可能性があります。PAM の変更をテストするときは、常にアクティブな root シェルを開いたままにするか、リカバリプラン(Live CD からの起動など)を用意しておいてください。

Q: sysctl の設定が適用されているか確認するにはどうすればよいですか?

A: sysctl -a コマンドを使用して、現在のすべてのカーネルパラメータとその値を確認します。sysctl net.ipv4.tcp_syncookies のように、特定のパラメータを確認することもできます。