本ガイドでは、Linuxサーバー上の一般ユーザーが、各自のホームディレクトリ内に配置したホームページ用ファイル(HTMLなど)を、個人のウェブサイトとして外部に公開するための手順を解説します。
本ページの位置づけについて
実機で確認したところ、本サイトのRocky Linux 9サーバーではUserDir機能は現在無効(デフォルトのまま)です。このガイドは「必要になった時に使える参考手順」として整理したものであり、現時点でこのサーバー上で稼働している機能ではありません。詳細は末尾の「実機で確認した現在の状況」をご覧ください。
目次
1. 目的と仕組み(UserDirとは?)
通常、Apacheで作成したWebサイトは特定の共通フォルダ(例:/var/www/html)の中にデータを配置します。しかし、「UserDir(ユーザーディレクトリ)」機能を有効にすると、各ユーザーの専用フォルダ(/home/ユーザー名/public_html)が自動的にWeb公開スペースになります。
システムイメージ(概念図)
「~(チルダ)」の意味:URLに含まれる「~」は、Linuxシステムにおける「ユーザーのホームディレクトリ」を表す記号です。これによって、どのユーザーのページを表示するかを判別します。
2. 前提条件
作業を始める前に、サーバーの環境が以下の状態であることを確認してください。
| 項目 | 内容 |
|---|---|
| OS | Rocky Linux 9 がインストールされていること。 |
| Webサーバー | Apache httpd がインストールされ、起動していること。 |
| 権限 | root 権限(または sudo 権限)を持つ管理者ユーザーで作業すること。 |
| セキュリティ機能 | SELinux および firewalld(ファイアウォール)が有効に設定されていること。 |
3. 構築手順
ここから実際の構築作業に入ります。絶対に手順を省略せず、1ステップずつ進めてください。
ファイアウォール(firewalld)の設定
外部のWebブラウザからサーバーにアクセスできるように、HTTP通信(ポート80番)を許可します。※すでに設定済みの場合はこのステップをスキップして構いません。
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --reload
firewall-cmd --list-all
出力結果の「services:」の欄に http が表示されていることを確認してください。
UserDir の有効化と設定
Apacheの設定ファイルを編集し、個人ウェブサイトの公開ルール(UserDir機能)を有効にします。
vi /etc/httpd/conf.d/userdir.conf
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キーで保存・終了します。
systemctl reload httpd
SELinuxの設定
SELinuxが有効な環境では、セキュリティ上の初期設定として、Apacheがユーザーのホームディレクトリにアクセスすることが禁止されています。これを許可する設定を行います。
(-P オプションにより、サーバー再起動後も恒久的に設定が維持されます)
setsebool -P httpd_enable_homedirs on
restorecon -R /home
4. 動作確認
設定が完了したら、一般ユーザーのアカウントを使って、実際にウェブページが公開できるか確認します。
4.1 テストページの作成
今回は例として、一般ユーザー「rocky」にログインし、公開用ディレクトリとテスト用のHTMLファイルを作成します。
mkdir public_html
Apacheがユーザーのホームディレクトリを経由して public_html フォルダ内のファイルを参照できるように、権限を変更します。
chmod 711 /home/rocky
chmod 755 /home/rocky/public_html
【解説】なぜ 711 なのか?
他のユーザー(Apacheを含む)に対して、ホームディレクトリ内のファイルを勝手に見られたり(読み取り)書き換えられたり(書き込み)しないようにしつつ、「通り抜けて public_html にたどり着くこと(実行権限: x)」だけを許可するために 711 という制限された権限を設定します。
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スペースが必要になった際の参考手順としてご活用ください。