SELinuxを「とりあえず切れ」と言われた日の話|SE時代の先輩の言葉と20年後に気づいたことを現役講師が語る

HOMEリナックスマスター.JP 公式ブログLinux学習ガイド > SELinuxを「とりあえず切れ」と言われた日の話|SE時代の先輩の言葉と20年後に気づいたことを現役講師が語る
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「SELinuxを無効にしてください」

Linuxサーバーを触り始めた頃、上司や先輩からそう言われた経験がある方は多いのではないでしょうか。アプリケーションが起動しない、権限エラーが出る、なぜか繋がらない——そういうトラブルが起きると、まっさきに「SELinuxを切る」という解決策が飛んでくる現場は、今でもなくなっていません。

この記事では、SE時代に「SELinuxはとりあえず切れ」と言われ続けた自分の体験と、20年以上の運用経験を経て気づいた「切らずに向き合う」ことの大切さを、現役講師として正直に語ります。

この記事のポイント

・「SELinuxを切れ」は技術的な解決ではなく先送りにすぎない
・SELinuxが嫌われる理由はエラーメッセージの難しさにある
・ausearch・audit2allow・sealertの3つで原因は特定できる
・SELinuxを理解せずに切り続けると、セキュリティの穴が積み重なる


SELinuxを「とりあえず切れ」と言われた日の話|SE時代の先輩の言葉と20年後に気づいたことを現役講師が語る
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

SE時代、SELinuxを切ることが「当たり前」だった頃の話

2005年頃のことです。私が担当していた社内サーバーをRHEL 4に移行した直後、Apacheの設定を終えて起動テストをすると、特定のディレクトリへのアクセスだけが403エラーになりました。

パーミッションを確認しても問題ない。Apacheのconfigも正しい。ログを見ると、なにやら見慣れない「avc: denied」という記述がある。

当時の私はSELinuxのことをほとんど知りませんでした。隣の先輩に「これ何ですか?」と聞くと、「あ、SELinux。とりあえず切っておけばいいよ」という答えが返ってきました。

# その日に私が実行したコマンド setenforce 0

一行打てば問題は消えました。その瞬間はそれで解決した気になっていました。でも後になって思い返すと、あの「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

この1行を見て即座に「ああ、httpd_tコンテキストがuser_home_tのファイルを読もうとして拒否されたのか」と読める人は、最初からSELinuxに習熟した人だけです。初見で理解しろというのが無理な話です。

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

permissiveモードでは、SELinuxはアクセスを拒否せずにログだけを記録します。これで「何が問題だったか」を後から調べることができます。

ステップ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

もちろん、audit2allowの出力をそのまま適用すればいいわけではありません。まずどのサービスが何にアクセスしようとして拒否されているかを理解してから、適切なSELinuxコンテキストを設定する(restoreconsemanage fcontext)のが正しい順序です。

本記事のまとめ

よくある対処 評価
setenforce 0 で永続的に無効化 問題を先送りするだけ。セキュリティの穴を放置することになる
/etc/selinux/config でdisabledに変更 同上。再起動後も無効になるため、さらにリスクが高い
permissiveモードで原因を調査する 一時的な対処として適切。原因調査後に適切な設定をする
ausearch・audit2allowで原因を特定し対処する 正しいアプローチ。SELinuxを有効のまま問題を解決できる
「SELinuxを切る」という判断は、短期的にはサービスを動かせますが、サーバーのセキュリティ設計を一部放棄することと同義です。私がSE時代に学んだのは「わからないものを切る」という習慣でした。でも今、3,100名以上を指導した立場から言えることは、「わからないものを切るのではなく、わかるまで向き合う習慣こそが現場で信頼されるエンジニアの条件だ」ということです。

SELinuxは確かに難しい仕組みです。しかし、ausearchとaudit2allowの使い方を一度身につければ、怖くなくなります。「切る前に15分だけ調べる習慣」が、あなたのサーバー運用の質を大きく変えるはずです。

次に読む記事:
SELinuxを無効化・確認する方法|enforcing/permissive/disabled切替とgetenforce・sestatus
semanageコマンドでSELinuxのポリシーを管理する方法

SELinuxを含むLinuxサーバー運用の「判断の型」を身につけていますか?

SELinuxの問題に限らず、現場では「なぜ動かないのか」を素早く判断できる力が求められます。まずは現場で通用する構築の全体像を掴んでください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録