SELinuxの動作を確認する

今回のコラムは前回に引き続きSELinuxについて、そのアクセス制御の動作について解説します。【連載コラム:Linuxを学ぼう(28)】

最終更新日:2024年01月26日

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サーバーのログ設定を確認する

第24回:Webサーバーのユーザーディレクトリを利用する

第23回:WebサーバーでPHPを動かす

ページトップへ