SELinuxのchconコマンドを使って、一時的にSELinuxコンテキストを変更する方法について説明します。
ファイルのコンテキスト変更 (chcon)
まずは、chconを使ったファイルのSELinuxコンテキストの変更方法についてです。 検証用に test.html を用意し、タイプを httpd_sys_content_t に変更します。
~]# ls -Z test.html
unconfined_u:object_r:admin_home_t:s0 test.html
~]# chcon -t httpd_sys_content_t test.html
~]# ls -Z test.html
unconfined_u:object_r:httpd_sys_content_t:s0 test.html
chcon で設定した内容は一時的なものですが、再起動しても消えることはありません。
~]# reboot
...再起動...
~]# ls -Z test.html
unconfined_u:object_r:httpd_sys_content_t:s0 test.html
restorecon はSELinuxコンテキストをデフォルト値に復元するためのコマンドです。 restorecon コマンドを使うと、chcon で設定した内容は消えて、コンテキストが元に戻ります。
~]# restorecon -v test.html
Relabeled /root/test.html from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:admin_home_t:s0
~]# ls -Z test.html
unconfined_u:object_r:admin_home_t:s0 test.html
ディレクトリのコンテキスト変更 (chcon -R)
HTTPサーバが /var/www/html ではなく別のドキュメントルートを使用する場合は、ディレクトリのコンテキストを修正する必要があります。 まず、/var/www/html の代わりに /web をApacheのドキュメントルートとして使いたいとします。
~]# mkdir /web
~]# touch /web/file{1,2,3}.html
新しい最上位ディレクトリーを作成すると default_t タイプのラベルが付けられます。
~]# ls -dZ /web
unconfined_u:object_r:default_t:s0 /web
~]# ls -Z /web
total 0
unconfined_u:object_r:default_t:s0 file1.html
unconfined_u:object_r:default_t:s0 file2.html
unconfined_u:object_r:default_t:s0 file3.html
HTTPサーバがアクセスできるように、一時的に /web 以下を再帰的に httpd_sys_content_t タイプのラベルに変更します。
~]# chcon -R -t httpd_sys_content_t /web
変更結果:
~]# ls -dZ /web
unconfined_u:object_r:httpd_sys_content_t:s0 /web
~]# ls -Z /web
unconfined_u:object_r:httpd_sys_content_t:s0 file1.html
unconfined_u:object_r:httpd_sys_content_t:s0 file2.html
unconfined_u:object_r:httpd_sys_content_t:s0 file3.html
chcon によるSELinuxコンテキストの変更は一時的なものなので、restorecon で元に戻すことができます。 ディレクトリに対しては -R オプションで再帰的に適用(復元)させることができます。
~]# restorecon -R -v /web
Relabeled /web from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
Relabeled /web/file1.html from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
Relabeled /web/file2.html from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
Relabeled /web/file3.html from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
以上です。