SELinuxの動作を確認する
今回のコラムは前回に引き続きSELinuxについて、そのアクセス制御の動作について解説します。【連載コラム:Linuxを学ぼう(28)】
SELinuxがどのようにアクセス制御をするのか、そして設定を変更してアクセスを許可し、システムを意図した通りに動作させるための方法を解説します。
確認方法
SELinuxはLinux上の様々な動作をすべて強制的にアクセス制御しますが、ごく簡単なことをしているだけではSELinuxが有効になっていることにも気づきません。そこで、Apache HTTP Serverのユーザーディレクトリ機能を使って、SELinuxが実際にアクセス制御を行っていることを確認します。
ユーザーディレクトリ機能は、ユーザーのホームディレクトリにあるHTMLファイルなどをWebサーバーとして見せる仕組みです。具体的には以下の手順で確認しましょう。
ユーザーディレクトリ機能の準備
ユーザーディレクトリ機能を動作させるには、Webサーバーの設定変更と、公開するためのディレクトリの作成が必要です。
Apache HTTP Serverでは、UserDirディレクティブを有効にします。以下の例では、設定ファイルが分割されていて、/etc/httpd/conf.d/userdir.confを編集しています。
$ sudo vi /etc/httpd/conf.d/userdir.conf
以下のように設定を 変更しています。
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disabled ← コメントアウト
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
UserDir public_html ← コメントアウトを外して有効化
</IfModule>
Webサーバーを再起動して、設定を読み込ませます。
$ sudo systemctl restart httpd
そして、アクセス用のファイルを作ります。ホームディレクトリ以下にpublic_htmlディレクトリを作成し、パーミッションを711に設定してWebサーバーがアクセスできるようにします。
$ cd ~
$ mkdir public_html
$ chmod 711 ~
$ chmod 711 ~/public_html
作成したディレクトリの中にindex.htmlファイルを作成します。
$ echo "SELinux test" > /home/sato/public_html/index.html
SELinuxの動作確認
準備ができたので、実際に動作を確認してみましょう。
まず、現在のSELinuxの状態を確認します。
$ getenforce
Permissive
Permissiveの状態です。curlコマンドでアクセスしてみます。
$ curl localhost/~user/
SELinux test
ユーザーディレクトリが機能しているのがわかります。では、SELinuxを有効にしてみます。
$ sudo setenforce 1
$ getenforce
Enforcing
再度アクセスしてみます。
$ curl localhost/~admin/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
Webサーバーがpublic_html内にアクセスしようとしたが、SELinuxによって止められたためアクセスできず、「403 Forbidden」のエラーとなりました。
次回は、SELinuxの設定を変更にして、個別にアクセス制御を許可する方法を解説します。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第27回:SELinuxについて
第26回:Webサーバーのログ設定の内容を確認する
第25回:Webサーバーのログ設定を確認する
第23回:WebサーバーでPHPを動かす