ユーザーディレクトリを有効にする

LinuxBeginner
オンラインで実践に進む

はじめに

大学のサーバーを管理しているとします。すべての学生が自分の個人用 Web サイトを持ち、university.com/~student1 のような URL でアクセスできるようにしたいとします。

すべてのファイルを 1 つの中央ディレクトリに置く代わりに、Apache には ユーザーディレクトリ という機能があります。この機能を使うと、各ユーザーは自分のホームディレクトリから直接 Web サイトを公開できます。通常は、ホームディレクトリ内に public_html というサブディレクトリを作成します。

この機能は、現在の大規模な本番環境ではあまり一般的ではありません。しかし、URL のマッピング、権限、ユーザーごとの Web コンテンツがどのように連携するかを学ぶうえで、今でも役立ちます。

この実験では、次の操作を行います。

  1. モジュールを有効にする:Apache で userdir 機能を有効にします。
  2. ディレクトリを作成する:ホームディレクトリ内に public_html フォルダーを作成します。
  3. 権限を設定する:Apache がファイルにアクセスできるように、必要な権限を設定します。
  4. テストする:ブラウザーからのリクエストを使って、個人用ページにアクセスします。

Userdir モジュールを有効にする

Apache はモジュール式のサーバーです。必要に応じて、特定の機能を有効または無効にできます。userdir モジュールは、~username のような URL をユーザーのホームディレクトリに対応付けます。

このモジュール式の設計は、Apache の大きな特徴の 1 つです。多くの機能は常にデフォルトで有効になっているわけではありません。管理者が、サーバーの役割に応じて必要なモジュールを有効にします。

まず、Apache が実行中であることを確認します。

sudo service apache2 status

a2enmod(Apache 2 Enable Module)コマンドを使って userdir モジュールを有効にします。

a2enmod ヘルパーは、Ubuntu の Apache パッケージで使われる仕組みの一部です。設定をすべて手動で編集する代わりに、必要なシンボリックリンクを作成してモジュール管理を簡単にします。

sudo a2enmod userdir

モジュールを有効にしていることを示すメッセージが表示されます。

有効なモジュールを一覧表示して、userdir が有効になったことを確認します。

ls /etc/apache2/mods-enabled/ | grep userdir

userdir.conf と userdir.load が表示されれば、モジュールは有効です。

Web ディレクトリを設定する

userdir モジュールは、ユーザーのホームディレクトリ内にある public_html という名前のフォルダーを探します。この実験でのユーザー名は labex です。

ホームディレクトリに移動します。

cd ~

public_html ディレクトリを作成します。

mkdir ~/public_html

サイトをテストするため、このディレクトリ内に簡単な index.html ファイルを作成します。

echo "<h1>My Personal Page</h1><p>Welcome to the labex user directory.</p>" > ~/public_html/index.html

次に、権限を設定します。デフォルトでは、ユーザーのホームディレクトリは非公開になっていることが多く、Apache のユーザー(www-data)がその中に入れない場合があります。Apache がホームディレクトリ内の public_html フォルダーにアクセスするには、ホームディレクトリに対する実行(x)権限が必要です。

これは、Web サーバーが通常の Linux ファイルシステム権限に依存していることを示すよい例です。Apache は、通過して読み取る権限を持つファイルだけを提供できます。

ホームディレクトリの権限を変更します。

chmod 711 /home/labex
  • 711(rwx--x--x)を設定すると、自分自身には完全な操作権限が与えられます。一方、Apache などの他のユーザーには、ディレクトリを通過するための実行権限が与えられますが、内容を一覧表示するための読み取り権限は与えられません。

ディレクトリに対する読み取り権限と実行権限の違いは、分かりにくいものの重要です。ディレクトリの実行権限は「そのディレクトリに入る、またはその中を通過できる」ことを意味します。読み取り権限は「その内容を一覧表示できる」ことを意味します。

権限を確認します。

ls -ld /home/labex

権限表示の末尾に x が含まれていれば、ディレクトリを通過できる状態です。

サービスを再起動する

モジュールを有効にしたり設定を変更したりした後は、変更を反映するために Apache を再起動する必要があります。

Apache サービスを再起動します。

sudo service apache2 restart

Apache が正常に再起動したことを確認します。

sudo service apache2 status

ステータスが active (running) になっていれば、Apache は実行中です。

設定を確認する

これですべての設定が完了したので、個人用 Web ページをテストします。

URL の形式は http://server_address/~username/ です。この実験ではサーバー自身からアクセスするため、localhost を使用します。

curl を使ってページを取得します。

curl http://localhost/~labex/

作成した HTML コンテンツが表示されます。

<h1>My Personal Page</h1>
<p>Welcome to the labex user directory.</p>

403 Forbidden エラーが表示された場合は、ホームディレクトリ(/home/labex)と public_html ディレクトリの権限をもう一度確認してください。

まとめ

この実験では、個人用 Web ディレクトリを正常に設定しました。次の操作を学びました。

  • Apache の userdir モジュールを有効にする。
  • public_html ディレクトリを作成し、コンテンツを追加する。
  • Apache がアクセスできるようにしながら、セキュリティを維持するためのディレクトリ権限を設定する。
  • ユーザー固有の URL にアクセスして設定を確認する。

この機能は、教育環境や共有ホスティング環境で、ユーザーに個人用の Web スペースを提供するために広く使用されています。