chconとsemanage fcontextの違いを完全整理【SELinux事故を防ぐ必須知識】

  • URLをコピーしました!

SELinux運用で最も多い事故の一つが、 「chconで直したはずなのに、再起動したら元に戻った」 というケースです。

この原因は、chcon と semanage fcontext の役割の違いを 正しく理解していないことにあります。

本記事では、両者の違いを仕組みから整理し、 実務でどちらを使うべきかを明確にします。

目次

結論:違いを一言で言うと

コマンド役割永続性
chcon今だけ変更なし
semanage fcontext正しい設計を登録あり

SELinuxのファイルコンテキストの基本

SELinuxでは、ファイル・ディレクトリに セキュリティコンテキストが付与されています。

ls -Z /var/www/html

例:

system_u:object_r:httpd_sys_content_t:s0

このタイプによって、 「誰が」「何をできるか」が決まります。

chconとは何か

chcon は、今存在しているファイルのラベルを一時的に変更するコマンドです。

使用例

chcon -t httpd_sys_rw_content_t /var/www/app/data

この時点では動作しますが、 以下のタイミングで元に戻ります。

  • restorecon 実行
  • ファイル再作成
  • OS再起動

なぜchconは危険なのか

  • 設定が残らない
  • 誰が変更したか分からない
  • 障害が再発する

つまり、応急処置専用です。

semanage fcontextとは何か

semanage fcontext は、 「このパスにはこのラベルが正しい」 という設計をSELinuxに登録するコマンドです。

使用例

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/app/data(/.*)?"
restorecon -Rv /var/www/app/data

これにより、

  • 再起動しても
  • ファイルを作り直しても
  • restoreconしても

正しいラベルが維持されます。

chconとsemanageの使い分け

chconを使ってよいケース

  • 一時検証
  • 原因切り分け
  • その場しのぎ

semanage fcontextを使うべきケース

  • 本番環境
  • 恒久対策
  • 再起動がある前提

典型的な事故パターン

事故① chconで直したつもり

→ 再起動後に障害再発

事故② restoreconで壊れる

→ chconが消される

事故③ 設定者不明

→ 属人化・ブラックボックス化

正しい運用フロー

  1. AVCログ確認
  2. 必要なタイプを決める
  3. semanage fcontextで登録
  4. restoreconで反映

確認コマンドまとめ

semanage fcontext -l | grep 対象パス
ls -Z 対象パス

まとめ

chcon と semanage fcontext の違いを理解していないと、 SELinux障害は必ず再発します。

chconは応急処置、semanageは設計

これを守るだけで、SELinux運用は劇的に安定します。

目次