SELinux とサービス(拒否の犯人を見抜く)
RHEL系サーバでは SELinux が既定で有効だ。設定は正しいのにサービスがファイルを読めない・繋げない、の多くはこれが原因になる。getenforce で状態を見て、ls -Z でファイルの「文脈(context)」を確認、restorecon や semanage で正しい文脈・ポートを許可する。むやみに無効化せず「文脈を直す」のが正道だ。
サーバを立てて「設定は完璧なのに動かない」とき、犯人がSELinuxであることは非常に多い。これはアクセス制御の追加の関所で、ふつうの権限(rwx)を通っても、ここで別途チェックされる。
🚦 まず状態を見る
getenforce で今の状態が分かる。Enforcing なら強制中、Permissive なら警告だけ、Disabled なら無効。sestatus はもっと詳しく表示する。まずここで、SELinuxが関わっているかを判断する。
⚠
つまずき動かないからと setenforce 0 で丸ごと無効化するのは悪手。穴を全開にするに等しい。原因(文脈)を直すのが正しい対処だ。
🏷 ファイルには「型」が付く
SELinuxでは、ファイルやプロセスに文脈(context)という型ラベルが付く。ls -Z で見える httpd_sys_content_t のような型が、httpdの読める型と一致して初めてアクセスが許される。設定が正しくても、型が違えば弾かれる。
🔧 直し方の型(かた)
既定の場所なら restorecon -R パス で正しい型に戻すだけでよい。標準外の場所を使うなら semanage fcontext で既定を登録してから restorecon する。ポートを増やすなら semanage port、機能を許すなら setsebool を使う。
▶
例restorecon -R /var/www/html(文脈を戻す) / setsebool -P httpd_can_network_connect on(httpdの外部接続を許可)。
💡
ポイント困ったら /var/log/audit/audit.log に拒否の記録が残る。「何の型で弾かれたか」がそこに書いてあり、直す手がかりになる。
この項目に出てくる用語
SELinuxコンテキスト(文脈)せりなっくすこんてきすと
ファイルやプロセスに付く「種別ラベル」。SELinuxはこの型が合うかで許可/拒否を判断する。
SELinux booleanせりなっくすぶーりあん
SELinuxの機能ごとのスイッチ。よくある例外を on/off で許可する仕組み。