Rocky Linux 9 一覧へ戻る トップRocky Linux 9 / Apache UserDir機能の有効化
Rocky Linux 9 ・ Web Server

サーバー上の個人用Webスペースを開設する

Apache UserDir(ユーザーディレクトリ)機能の有効化手順

mod_userdir httpd_enable_homedirs

本ガイドでは、Linuxサーバー上の一般ユーザーが、各自のホームディレクトリ内に配置したホームページ用ファイル(HTMLなど)を、個人のウェブサイトとして外部に公開するための手順を解説します。

本ページの位置づけについて

実機で確認したところ、本サイトのRocky Linux 9サーバーではUserDir機能は現在無効(デフォルトのまま)です。このガイドは「必要になった時に使える参考手順」として整理したものであり、現時点でこのサーバー上で稼働している機能ではありません。詳細は末尾の「実機で確認した現在の状況」をご覧ください。

目次

  1. 1. 目的と仕組み(UserDirとは?)
  2. 2. 前提条件
  3. 3.1 ファイアウォール(firewalld)の設定
  4. 3.2 UserDirの有効化と設定
  5. 3.3 SELinuxの設定
  6. 4. 動作確認
  7. 5. トラブルシューティング
  8. セキュリティ上の注意点
  9. 実機で確認した現在の状況

1. 目的と仕組み(UserDirとは?)

通常、Apacheで作成したWebサイトは特定の共通フォルダ(例:/var/www/html)の中にデータを配置します。しかし、「UserDir(ユーザーディレクトリ)」機能を有効にすると、各ユーザーの専用フォルダ(/home/ユーザー名/public_html)が自動的にWeb公開スペースになります。

システムイメージ(概念図)

Webブラウザ(閲覧者) │ ▼ アクセス先URL: http://<サーバーのIP>/~rocky/ │ [ Apache Webサーバー ] │ (URLの「~rocky」を検知して転送先を自動判別) ▼ サーバー内の実際のフォルダ: /home/rocky/public_html/index.html を読み込む

「~(チルダ)」の意味:URLに含まれる「~」は、Linuxシステムにおける「ユーザーのホームディレクトリ」を表す記号です。これによって、どのユーザーのページを表示するかを判別します。

2. 前提条件

作業を始める前に、サーバーの環境が以下の状態であることを確認してください。

項目内容
OSRocky Linux 9 がインストールされていること。
WebサーバーApache httpd がインストールされ、起動していること。
権限root 権限(または sudo 権限)を持つ管理者ユーザーで作業すること。
セキュリティ機能SELinux および firewalld(ファイアウォール)が有効に設定されていること。

3. 構築手順

ここから実際の構築作業に入ります。絶対に手順を省略せず、1ステップずつ進めてください。

3.1

ファイアウォール(firewalld)の設定

外部のWebブラウザからサーバーにアクセスできるように、HTTP通信(ポート80番)を許可します。※すでに設定済みの場合はこのステップをスキップして構いません。

1. HTTPサービスへのアクセスを恒久的に許可します
firewall-cmd --add-service=http --zone=public --permanent
2. 設定を再読み込みして反映します
firewall-cmd --reload
3. 設定が正しく反映されているか(servicesに「http」が含まれているか)確認します
firewall-cmd --list-all

出力結果の「services:」の欄に http が表示されていることを確認してください。

3.2

UserDir の有効化と設定

Apacheの設定ファイルを編集し、個人ウェブサイトの公開ルール(UserDir機能)を有効にします。

1. 設定ファイルをエディタで開きます
vi /etc/httpd/conf.d/userdir.conf
2. ファイル内の指定された箇所を編集(コメントアウト/コメント解除/追記)します

17行目付近:UserDirの無効化設定(disabled)の先頭に # を追加して無効化(=有効に)します。

#UserDir disabled

24行目付近:公開用ディレクトリ名「public_html」の指定の先頭にある # を削除(コメント解除)します。

UserDir public_html

32, 33行目付近:公開ディレクトリに対するアクセス権限を以下のように設定・修正します。

<Directory "/home/*/public_html">
    AllowOverride All      # 必要に応じて変更(.htaccessの許可等)
    Options None            # 必要に応じて変更(CGI実行やファイル一覧表示等)
    Require method GET POST OPTIONS
</Directory>

入力後、Escキーを押し :wq と入力して Enterキーで保存・終了します。

3. 変更した設定を読み込ませるため、Apacheをリロードします
systemctl reload httpd
3.3

SELinuxの設定

SELinuxが有効な環境では、セキュリティ上の初期設定として、Apacheがユーザーのホームディレクトリにアクセスすることが禁止されています。これを許可する設定を行います。

1. Apacheがホームディレクトリを読み取れるようにする論理値(Boolean)を有効にします

(-P オプションにより、サーバー再起動後も恒久的に設定が維持されます)

setsebool -P httpd_enable_homedirs on
2. ホームディレクトリ配下のセキュリティコンテキスト(SELinuxのラベル)を正しい状態に修復・反映します
restorecon -R /home

4. 動作確認

設定が完了したら、一般ユーザーのアカウントを使って、実際にウェブページが公開できるか確認します。

4.1 テストページの作成

今回は例として、一般ユーザー「rocky」にログインし、公開用ディレクトリとテスト用のHTMLファイルを作成します。

1. 公開用ディレクトリ public_html を新規作成します
mkdir public_html
2. 適切なパーミッション(権限)を設定します

Apacheがユーザーのホームディレクトリを経由して public_html フォルダ内のファイルを参照できるように、権限を変更します。

chmod 711 /home/rocky
chmod 755 /home/rocky/public_html

【解説】なぜ 711 なのか?

他のユーザー(Apacheを含む)に対して、ホームディレクトリ内のファイルを勝手に見られたり(読み取り)書き換えられたり(書き込み)しないようにしつつ、「通り抜けて public_html にたどり着くこと(実行権限: x)」だけを許可するために 711 という制限された権限を設定します。

3. テスト用のHTMLファイルを作成します
vi ./public_html/index.html

【入力内容】以下の内容をそのまま貼り付けて保存します。

<html>
<body>
<h1 style="width: 100%; font-size: 48px; text-align: center;">
UserDir Test Page
</h1>
</body>
</html>

入力後、Escキーを押し :wq と入力して Enterキーで保存・終了します。

4.2 ブラウザーからのアクセス確認

作業用PCなど、任意の端末からWebブラウザを起動し、以下のURL形式でアクセスします。

アクセスURL:http://<サーバーのIPアドレス>/~rocky/

画面中央に大きく 「UserDir Test Page」 と表示されれば、設定と動作確認は完了です。

5. トラブルシューティング

もし設定後にページにアクセスできない場合は、以下の原因と確認手順を順番にチェックしてください。

① 「サイトにアクセスできません」等の通信エラーになる場合

ネットワークまたはサービス自体が停止している可能性があります。

確認項目コマンド・確認方法
ファイアウォールの確認firewall-cmd --list-all を実行し、services の項目に http が含まれているか確認します。
Apacheの稼働状態の確認systemctl status httpd を実行し、Apacheが正常に動作しているか(Active: active (running) であるか)確認します。

② 「Forbidden (403)」エラーが表示される場合

アクセス権限(パーミッション)やセキュリティ機能により、ファイルの読み込みがブロックされています。

確認項目確認方法
ホームディレクトリの権限不足ユーザーのホームディレクトリ(/home/rocky など)のパーミッションが 711(または実行権限 x が他者に対して付与されている状態)になっているか再確認します。
公開フォルダ・ファイルの権限不足public_html フォルダが 755、および内の index.html ファイルに適切な読み取り権限(通常は 644)が付与されているか確認します。
SELinuxの設定漏れSELinuxの設定が反映されているか確認します。getsebool httpd_enable_homedirs を実行し、値が on になっているか確認してください。

セキュリティ上の注意点

実機のApache標準設定ファイル(userdir.conf)には、次のような重要なコメントが書かれています。

# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).

つまり、UserDirを有効にすると「そのユーザー名がサーバー上に実在するかどうか」を外部から推測されるリスクがあります(/~存在しないユーザー名//~実在するユーザー名/でアクセス時の反応が変わりうるため)。不特定多数がアクセスできる公開サーバーで有効化する場合は、この点を理解した上で運用してください。RHEL系(Rocky Linux含む)がデフォルトでこの機能を無効にしているのは、この理由によるものです。

実機で確認した現在の状況

2026年8月4日時点で、本サイトのRocky Linux 9サーバーの実際の設定を確認しました。

$ getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off

$ cat /etc/httpd/conf.d/userdir.conf
(デフォルトのまま:UserDir disabled)

UserDir機能:未有効化(デフォルトのまま) — 本ガイドの手順は現時点で未適用です。将来的に個人用Webスペースが必要になった際の参考手順としてご活用ください。

Rocky Linux 9 一覧へ戻る