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が消される
事故③ 設定者不明
→ 属人化・ブラックボックス化
正しい運用フロー
- AVCログ確認
- 必要なタイプを決める
- semanage fcontextで登録
- restoreconで反映
確認コマンドまとめ
semanage fcontext -l | grep 対象パス
ls -Z 対象パス
まとめ
chcon と semanage fcontext の違いを理解していないと、 SELinux障害は必ず再発します。
chconは応急処置、semanageは設計。
これを守るだけで、SELinux運用は劇的に安定します。
あわせて読みたい


SELinuxが原因で通信できない時の切り分け手順【Firewall正常でも要注意】
Linuxサーバーで「ポートはLISTENしている」「Firewallも開いている」 にもかかわらず通信できない場合、原因として非常に多いのが SELinux です。 本記事では、SELinux…
あわせて読みたい


SELinuxのAVCログを読めるようになる実践ガイド【denyの意味が分かる】
SELinuxトラブル対応で最も重要なのが AVCログ です。 「AVC denied が出ているのは分かるが、何をどう直せばいいか分からない」 という状態では、SELinuxは一生怖い存…
あわせて読みたい


SELinux enforcing環境でよくある障害事例集【原因と正しい対処】
SELinuxを enforcing のまま運用していると、 「原因不明の通信エラー」「権限はあるはずなのに動かない」 といった障害に必ず直面します。 本記事では、現場で頻発する…
