はじめに
Linux環境においてSELinuxを運用する際、ファイルやディレクトリのセキュリティコンテキスト(Security Context)を一時的に切り替える代表的なツールが chcon コマンドです。本記事では、Webサーバーのアクセス権限トラブルシューティングなど実務で役立つ4つの典型的な操作パターンとともに、システムの再起動やリストア処理に伴うコンテキスト消失のリスクと注意点について詳しく解説します。
セキュリティコンテキストの確認手順とchconの基本構文
検証環境として独立した作業ディレクトリを用意するため、mkdir -p /tmp/chcon_lab && cd /tmp/chcon_lab を実行してディレクトリの作成と移動を同時に行います。

コンテキストの確認および属性変更をテストするためのサンプルファイルとして、touch web_sample.html を実行して空のHTMLファイルを作成します。

作成したファイルに付与されている現在のSELinux属性を調べるため、ls -Z web_sample.html を実行します。
出力結果に表示される ? マークは、現在稼働中のシステムでSELinuxが無効化(Disabled)されているか、ファイルシステム上で適切なラベル情報が割り当てられていない状態を意味しています。
ファイルやディレクトリのセキュリティ属性を書き換える chcon コマンドは、基本的に chcon [オプション] コンテキスト ファイル名 という形式で指定します。
⚙️ [主要なオプション一覧]
-t : 対象リソースのセキュリティコンテキスト「タイプ(Type)」を変更します。-u : セキュリティコンテキストの「ユーザー(User)」を変更します。-r : セキュリティコンテキストの「ロール(Role)」を変更します。-R : ディレクトリ配下の全階層に対して再帰的(Recursive)に変更を反映します。--reference : 既存の参照用ファイルと同じセキュリティコンテキストをそのまま複製・適用します。-v : 変更処理の詳細な進捗ログを標準出力へ表示します。

特定のタイプ属性を変更する実践パターン(-tオプション)
Webサーバー配下のコンテンツ配置を想定したテストを行うため、mkdir -p /tmp/chcon_lab && touch /tmp/chcon_lab/index.html を実行して作業用ディレクトリと公開用ドキュメントを配置します。

ApacheやNginxなどのHTTPデーモンによる正常なファイル読み込みを許可するため、chcon -t httpd_sys_content_t /tmp/chcon_lab/index.html を実行し、ファイルのタイプ識別子を httpd_sys_content_t に切り替えます。

設定が正しく反映されたか確かめるため、ls -Z /tmp/chcon_lab/index.html を実行してセキュリティコンテキストの状態をチェックします。
ターミナルに表示される ? は、検証環境のSELinux機能が無効(Disabled)に設定されているため、割り当てられたラベル情報をシステムが参照できないことを示しています。

参照ファイルからの属性複製(–reference)と再帰的一括適用(-R)
階層構造を持つディレクトリ群に対する一括適用の動作を確認するため、mkdir -p /tmp/chcon_lab/public_html && touch /tmp/chcon_lab/public_html/style.css を実行してサブディレクトリとCSSファイルをあらかじめ生成します。

属性複製の対象として利用する別のWebページを作成するため、touch /tmp/chcon_lab/target_page.html を実行します。

設定済みの index.html が持つコンテキスト情報をそのまま引き継ぐため、chcon --reference=/tmp/chcon_lab/index.html /tmp/chcon_lab/target_page.html を実行します。--reference オプションを活用することで、長くて複雑なコンテキスト文字列を手動入力する手間を省き、すでに正常稼働しているファイルの設定をミスなくコピーできます。

Web公開用ディレクトリ内の全コンテンツに同じアクセス権限を一括付与するため、chcon -R -t httpd_sys_content_t /tmp/chcon_lab/public_html を実行します。-R オプションを指定すれば、ディレクトリ階層を自動で辿りながら、内部に含まれるすべてのサブファイルに対して httpd_sys_content_t が再帰的に適用されます。

配下のファイル群にコンテキストが正しく適用されたかを確かめるため、ls -laZ /tmp/chcon_lab/public_html を実行して詳細な属性一覧を確認します。
ここでも ? が出力されていますが、これは実行環境のSELinuxが無効(Disabled)状態となっており、ラベルの管理情報が保持されていないことを表しています。

運用前に知っておくべきchconの制限事項と重要な注意点
SELinuxの公式コンテキスト復元ユーティリティである restorecon を利用可能にするため、apt-get update -qq && apt-get install -y policycoreutils を実行して必要な管理ツール群をシステムへ導入します。

コンテキストのリセット挙動を検証するためのテスト用ファイルとして、touch /tmp/chcon_lab/warning_test.txt を実行します。

テスト用ファイルに対し、chcon -t tmp_t /tmp/chcon_lab/warning_test.txt を実行して一時的に tmp_t タイプを割り当てます。chcon コマンドによるラベル変更はファイルシステムのinode上に直接書き込まれる一時的な措置であり、SELinuxのシステムポリシーデータベースに永続化されるわけではありません。

コンテキスト変更後の状態を確認するため、ls -Z /tmp/chcon_lab/warning_test.txt を実行します。
画面上の ? 表示は、対象サーバーでSELinuxが無効化(Disabled)されているため、付与されたコンテキスト情報がシステム上で評価されていない状態を意味します。

システムポリシーに定義された本来の標準コンテキストへ初期化を試みるため、restorecon -v /tmp/chcon_lab/warning_test.txt を実行します。chcon で設定した値は、restorecon の実行やファイルシステム全体の再ラベリング(autorelabel)が行われると、定義済みのデフォルトポリシーによって強制的に上書きされてしまいます。本番環境で恒久的な変更を行いたい場合は、chcon ではなく semanage fcontext を使用してポリシーそのものを更新する必要があります。

復元処理実行後のファイル属性を確かめるため、ls -Z /tmp/chcon_lab/warning_test.txt を再度実行します。
結果として ? が表示されているのは、SELinuxが無効(Disabled)のまま動作しているためです。

本記事では、Linux環境における chcon コマンドの基礎的な使い方や代表的なオプション、そして実務運用において不可欠な一時的変更と恒久的ポリシーの違いについて解説しました。
トラブルシューティングや一時的な権限調整には非常に便利なツールですが、システムの再ラベリングで初期化される特性を正しく理解し、安全なシステム管理に役立ててください。