Linuxサーバー管理

SELinux/AppArmorの基礎と設定【MAC完全ガイド】

Linuxサーバー管理
記事内に広告が含まれています。

SELinux(RHEL/CentOS系)とAppArmor(Ubuntu/Debian系)は、ファイアウォールやパーミッションとは別の次元でプロセスのアクセスを制御するMAC(強制アクセス制御)システムです。「rootでも許可されていない操作はできない」という強力なセキュリティ層です。

SELinux(RHEL/CentOS/Fedora系)

# SELinuxの現在の状態を確認
$ getenforce
Enforcing    # 有効(ポリシー違反をブロック)
# Permissive = 違反をログに記録するがブロックしない
# Disabled   = 無効

# 詳細な状態確認
$ sestatus

# 一時的にPermissiveに変更(再起動で元に戻る)
$ sudo setenforce 0    # Permissive
$ sudo setenforce 1    # Enforcing に戻す

# 永続的な設定変更(/etc/selinux/config を編集)
SELINUX=enforcing   # enforcing / permissive / disabled

⚠️ 本番環境では SELINUX=disabled にするのは避けましょう。トラブルシュートには permissive を使い、解決後は enforcing に戻します。

# SELinuxによる拒否ログを確認
$ sudo ausearch -m avc -ts recent
$ sudo journalctl | grep "SELinux is preventing"

# 拒否されたアクセスを許可するポリシーを生成
$ sudo audit2allow -a -M mymodule
$ sudo semodule -i mymodule.pp

# Nginxをカスタムポートで動かす場合の例
$ sudo semanage port -a -t http_port_t -p tcp 8080
$ sudo semanage port -l | grep http

AppArmor(Ubuntu/Debian系)

# AppArmorの状態確認
$ sudo aa-status

# プロファイルの一覧
$ sudo apparmor_status

# 特定プロファイルを無効化(troubleshoot用)
$ sudo aa-disable /etc/apparmor.d/usr.sbin.nginx

# プロファイルをcomplainモード(違反ログのみ)に変更
$ sudo aa-complain /etc/apparmor.d/usr.sbin.nginx

# enforceモードに戻す
$ sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

# 新しいプロファイルを読み込む
$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

# 拒否ログを確認
$ sudo journalctl | grep "apparmor"
$ sudo dmesg | grep "apparmor"

SELinux vs AppArmor

比較項目SELinuxAppArmor
採用ディストリRHEL/CentOS/FedoraUbuntu/Debian/SUSE
設定の複雑さ複雑(ラベルベース)比較的シンプル(パスベース)
学習コスト高い低〜中程度
トラブルシュートaudit2allow で支援aa-complain で支援

まとめ

  • SELinux/AppArmorは「rootでも制限される」強力なセキュリティ層
  • 問題が起きたらまず permissive/complain モードで原因を確認する
  • 本番環境で disabled にするのは避ける。許可ポリシーを追加して解決する
  • SELinuxは audit2allow、AppArmorは aa-complain でトラブルシュートする

📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。

コメント

タイトルとURLをコピーしました