この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
Linuxサーバーを触り始めた頃、上司や先輩からそう言われた経験がある方は多いのではないでしょうか。アプリケーションが起動しない、権限エラーが出る、なぜか繋がらない——そういうトラブルが起きると、まっさきに「SELinuxを切る」という解決策が飛んでくる現場は、今でもなくなっていません。
この記事では、SE時代に「SELinuxはとりあえず切れ」と言われ続けた自分の体験と、20年以上の運用経験を経て気づいた「切らずに向き合う」ことの大切さを、現役講師として正直に語ります。
この記事のポイント
・「SELinuxを切れ」は技術的な解決ではなく先送りにすぎない
・SELinuxが嫌われる理由はエラーメッセージの難しさにある
・ausearch・audit2allow・sealertの3つで原因は特定できる
・SELinuxを理解せずに切り続けると、セキュリティの穴が積み重なる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SE時代、SELinuxを切ることが「当たり前」だった頃の話
2005年頃のことです。私が担当していた社内サーバーをRHEL 4に移行した直後、Apacheの設定を終えて起動テストをすると、特定のディレクトリへのアクセスだけが403エラーになりました。パーミッションを確認しても問題ない。Apacheのconfigも正しい。ログを見ると、なにやら見慣れない「avc: denied」という記述がある。
当時の私はSELinuxのことをほとんど知りませんでした。隣の先輩に「これ何ですか?」と聞くと、「あ、SELinux。とりあえず切っておけばいいよ」という答えが返ってきました。
# その日に私が実行したコマンド setenforce 0
SELinuxがRHELにデフォルト有効で搭載されたのは2005年のRHEL 4からです。当時の現場では、SELinuxの仕組みを理解しているエンジニアは少なく、「わからないから切る」が半ば常識のようになっていました。セミナーで3,100名以上を指導してきた中でも、「最初の職場でSELinuxを無効化することを覚えた」という方は今でも一定数います。
なぜSELinuxはこれほど嫌われるのか
SELinuxを切りたくなる気持ちは、技術的に見ると理解できます。1. エラーメッセージが難解で原因を特定しにくい
SELinuxのアクセス拒否は/var/log/audit/audit.log に記録されますが、このログは人間が読むことを前提に設計されていません。たとえばApacheがファイルにアクセスできない場合、以下のようなログが出ます。type=AVC msg=audit(1716000000.123:456): avc: denied { read } for pid=12345 comm="httpd" name="index.html" dev="sda1" ino=67890 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
2. 解決方法が「設定変更」ではなく「理解が必要」という難しさ
通常のLinuxトラブルは「設定ファイルのここを変える」という対応で解決します。しかしSELinuxのトラブルは、まずアクセス制御の仕組みを理解してからでないと適切な対処ができません。「今すぐサービスを動かさなければならない」という現場の圧力の中で、「理解してから対応する」という余裕が持てないのが現実です。結果として「切る」という選択肢に流れやすくなります。
3. 「切っても問題なさそう」に見える
SELinuxを無効化しても、即座に目に見えた問題は起きません。サービスはちゃんと動く。アクセスはできる。だから「切っても大丈夫」という認識が広まってしまいます。しかし、SELinuxが防いでいたのは「今起きている問題」ではなく「将来起きるかもしれない攻撃」です。その防御を外したことは、事故が起きるまで誰にも見えません。SELinuxを「切らずに向き合う」最初の3ステップ
20年以上サーバーを運用してきた経験から言うと、SELinuxを理解するうえで最初に身につけるべきことは3つです。ステップ1. permissiveモードで原因を安全に調査する
SELinuxには3つのモードがあります。enforcing(有効・拒否)、permissive(有効・許可・ログのみ)、disabled(無効)です。いきなりdisabledにするのではなく、まずpermissiveに変えて動作確認する方法を身につけましょう。# 現在のSELinuxモードを確認する getenforce # 一時的にpermissiveに変更する(再起動で元に戻る) setenforce 0 # enforcing(本来の状態)に戻す setenforce 1
ステップ2. ausearchでAVCエラーを確認する
SELinuxのアクセス拒否ログ(AVC)はausearch コマンドで絞り込んで確認できます。# 直近のSELinux拒否ログを確認する ausearch -m AVC -ts recent # 特定サービス(httpd)のAVCログを確認する ausearch -m AVC -c httpd
ステップ3. audit2allowで推奨対処を確認する
AVCログを確認したら、audit2allow コマンドで「SELinuxが拒否した操作を許可するポリシー」を自動生成できます。まずは何が許可されようとしているかを確認することが重要です。# AVCログからポリシー候補を表示する(実際に適用する前に必ず内容を確認する) ausearch -m AVC -ts recent | audit2allow
restorecon や semanage fcontext)のが正しい順序です。
本記事のまとめ
| よくある対処 | 評価 |
|---|---|
setenforce 0 で永続的に無効化 |
問題を先送りするだけ。セキュリティの穴を放置することになる |
/etc/selinux/config でdisabledに変更 |
同上。再起動後も無効になるため、さらにリスクが高い |
| permissiveモードで原因を調査する | 一時的な対処として適切。原因調査後に適切な設定をする |
| ausearch・audit2allowで原因を特定し対処する | 正しいアプローチ。SELinuxを有効のまま問題を解決できる |
SELinuxは確かに難しい仕組みです。しかし、ausearchとaudit2allowの使い方を一度身につければ、怖くなくなります。「切る前に15分だけ調べる習慣」が、あなたのサーバー運用の質を大きく変えるはずです。
次に読む記事:
・SELinuxを無効化・確認する方法|enforcing/permissive/disabled切替とgetenforce・sestatus
・semanageコマンドでSELinuxのポリシーを管理する方法
SELinuxを含むLinuxサーバー運用の「判断の型」を身につけていますか?
SELinuxの問題に限らず、現場では「なぜ動かないのか」を素早く判断できる力が求められます。まずは現場で通用する構築の全体像を掴んでください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:Linuxの本番サーバーでchmodを間違えた話|現役講師が語る権限ミスの実体験と正しいパーミッション設計の考え方
- この記事の属するカテゴリ:Linux学習ガイドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます