
長年CentOS(RHEL系)でサーバーを触ってきた管理人ですが、例の移転劇によりUbuntuサーバーへと着地しました。
結論から言うと、「パーミッション設定は合ってるのに動かないときの原因(敵)が違う」ので、CentOS感覚でSELinuxのコマンド(chcon や setenforce 等)を探しても見つかりません。
今回はCentOSで散々戦ってきたSELinuxと、Ubuntuの標準「AppArmor」の違いや、アクセス制御に関するハマりどころについてメモしておきます。
💡 「755にしたのに403エラー」の元凶、SELinux
CentOS(RHEL系)でWebサーバーやWordPressを構築したことがある人なら、一度はこんな経験があるはずです。
- ファイルの所有者は
nginx(httpd)に変えた - パーミッションも
755や644に設定した - なのにブラウザで見ると 「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サーバーの実行ユーザーは nginx や apache でしたが、Ubuntu(Debian系)では伝統的に www-data というユーザー/グループ名が使われます。
# 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の世界へ』についてメモしていきます。お楽しみに!


コメント