【Stream9ユーザーが送る】SELinuxの呪文から解放?Ubuntu標準「AppArmor」とアクセス制御のハマりどころ

この記事は約5分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

長年CentOS(RHEL系)でサーバーを触ってきた管理人ですが、例の移転劇によりUbuntuサーバーへと着地しました。
結論から言うと、「パーミッション設定は合ってるのに動かないときの原因(敵)が違う」ので、CentOS感覚でSELinuxのコマンド(chconsetenforce 等)を探しても見つかりません。

今回はCentOSで散々戦ってきたSELinuxと、Ubuntuの標準「AppArmor」の違いや、アクセス制御に関するハマりどころについてメモしておきます。

💡 「755にしたのに403エラー」の元凶、SELinux

CentOS(RHEL系)でWebサーバーやWordPressを構築したことがある人なら、一度はこんな経験があるはずです。

  • ファイルの所有者は nginxhttpd)に変えた
  • パーミッションも 755644 に設定した
  • なのにブラウザで見ると 「403 Forbidden」 が出る…!

そして「またお前か!」と行き着くのが、RHEL系の強力な強制アクセス制御(MAC)である SELinux でした。
CentOS時代は、コンテキストを変更する呪文(chcon -t httpd_sys_content_t ...)を叩くか、諦めて setenforce 0(一時無効化)にして逃げるのが風物詩(?)でしたよね。

🔍 UbuntuにはSELinuxがない!代わりにいる「AppArmor」

Ubuntuに移行して最初に感動するのが、「デフォルトでSELinuxが入っていない(動いていない)」という点です。
代わりにUbuntuでは、AppArmor(アップアーマー) という別のセキュリティ機構が標準で有効になっています。

SELinux と AppArmor の違い

項目CentOS (SELinux)Ubuntu (AppArmor)
制御の単位ファイルやプロセスへの「ラベル(コンテキスト)」付け「パス(ファイルパス)」 ベースのプロファイル
設定の難易度非常に複雑(呪文レベル)比較的人間が読んで理解しやすい
WordPressでの事故画像アップロード不可・403エラーが多発通常のドキュメントルート配置ならほぼ事故らない
トラブル時の対処chcon, restorecon, audit2allow/etc/apparmor.d/ 内のプロファイル修正

SELinuxが「あらゆる要素に細かくタグを貼って監視する」厳格なシステムなら、AppArmorは「このプログラム(例えばMySQL)はこのディレクトリ以外触っちゃダメ」と「プログラムごとに壁を作る」システムです。
そのため、Webサーバーの公開ディレクトリ(/var/www/ や WordOpsのパス)にファイルを置く程度であれば、AppArmorが邪魔をして403エラーを吐くことはほぼありません

⚠️ Ubuntuで「アクセス制限」でハマるパターンとは?

「じゃあUbuntuならパーミッション問題でハマることはないの?」と言われると、実は別のハマりどころがあります。

1. アプリ固有のAppArmorプロファイルに引っかかる

Webサーバー自体はAppArmorでブロックされにくいですが、MySQL(MariaDB)やBIND(DNS)、Named などは厳格なプロファイルが適用されています。
例えば、データベースの保存先(datadir)をデフォルトの /var/lib/mysql/ から別のストレージ(/mnt/volume/mysql/ など)へ変更した場合、Linuxのディレクトリ権限を整えても AppArmorにブロックされてMariaDBが起動しなくなります

  • 対処法: /etc/apparmor.d/local/usr.sbin.mysqld などに新しいパスを追記して、sudo systemctl reload apparmor で反映させる必要があります。

2. シンプルに「www-data 権限」の付け忘れ

SELinuxの呪文から解放された反面、純粋なLinuxのオーナー権限ミスで動かないケースです。
CentOS時代のWebサーバーの実行ユーザーは nginxapache でしたが、Ubuntu(Debian系)では伝統的に www-data というユーザー/グループ名が使われます。

Bash
# UbuntuでのWordPressディレクトリ権限付与の基本
sudo chown -R www-data:www-data /var/www/example.com/htdocs

ここをCentOS時代の癖で chown -R nginx:nginx などとやろうとして「そんなユーザーいません」となるのがお約束ですw

📝 まとめ:SELinuxの恐怖から解放されるだけでもUbuntuへ渡った価値あり!

今回は、CentOS Stream 9からUbuntuへ移行して感じた「アクセス制御(SELinux vs AppArmor)」の違いについて解説しました。

  • Ubuntuには恐怖のSELinuxが(デフォルトでは)存在しない!
  • 代わりにAppArmorが動いているが、Web運用でハマる率は圧倒的に低い
  • Web実行ユーザーは nginx ではなく www-data
  • DBのパス変更などをするときだけAppArmorのプロファイル設定を思い出せばOK

CentOS時代、「設定は合ってるはずなのにSELinuxのせいで動かない」という不毛なトラブルシューティングに何時間も奪われてきた身としては、Ubuntuの素直さ(パーミッションを通せば素直に動いてくれる安心感)は感涙ものでした。

次回は、自動化や定期処理でお世話になる『systemd-timer全盛のStream9から、まだcrontabが現役なUbuntuの世界へ』についてメモしていきます。お楽しみに!

コメント

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