systemdセキュリティハードニング

サンドボックスディレクティブを使用してsystemdサービスをハードニングします。ProtectSystem、ProtectHome、NoNewPrivileges、PrivateTmp、ケーパビリティ制限で攻撃面を最小化する方法を学びます。

Advanced Configurations

詳細な説明

systemdでサービスをロックダウンする

systemdは、名前空間、seccompフィルター、ケーパビリティ制御を使用してカーネルレベルでセキュリティ境界を適用する広範なサンドボックス機能を提供します。

[Service]
# ファイルシステム制限
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
ReadWritePaths=/opt/myapp/data

# 権限制限
NoNewPrivileges=yes
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

# カーネル保護
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes

ファイルシステム保護

ProtectSystem=strict: /dev/proc/sysを除くファイルシステム全体を読み取り専用でマウント。ReadWritePaths=で特定の書き込みアクセスを許可。

PrivateTmp=yes: このサービスからのみ見えるプライベート/tmpディレクトリを作成。サービス間のtmpベースの攻撃を防止。

セキュリティ監査

systemd-analyze securityを使用してサービスを監査できます:

systemd-analyze security myapp.service

各ディレクティブの推奨事項とともにセキュリティスコア(0-10、低いほど良い)を出力します。

段階的ハードニング

基本ディレクティブから開始し、サービスが正常に動作することを確認しながら追加します。

ユースケース

潜在的なセキュリティ侵害の影響範囲を最小化するために、ファイルシステムアクセスを制限し、権限昇格をブロックし、プロセスを分離することで、プロダクションWebアプリケーションのsystemdサービスをハードニングする場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く