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
| 比較項目 | SELinux | AppArmor |
|---|---|---|
| 採用ディストリ | RHEL/CentOS/Fedora | Ubuntu/Debian/SUSE |
| 設定の複雑さ | 複雑(ラベルベース) | 比較的シンプル(パスベース) |
| 学習コスト | 高い | 低〜中程度 |
| トラブルシュート | audit2allow で支援 | aa-complain で支援 |
まとめ
- SELinux/AppArmorは「rootでも制限される」強力なセキュリティ層
- 問題が起きたらまず
permissive/complainモードで原因を確認する - 本番環境で
disabledにするのは避ける。許可ポリシーを追加して解決する - SELinuxは
audit2allow、AppArmorはaa-complainでトラブルシュートする
📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。



コメント