晴耕雨読

working in the fields on fine days and reading books on rainy days

一時的にSELinuxコンテキストを変更する (chcon)

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

以上です。

参考文献