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 のように、特定のパラメータを確認することもできます。