http://www.sample.com/~user_id/
というようにroot以外のユーザーがサイトを公開できるようにするには、apacheでユーザーディレクトリの設定を有効にする必要があります。
ahacheの設定ファイル(httpd.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 disable
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
UserDir public_html
</IfModule>
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
このように設定すれば問題ないはずなのですが、記述に間違いないにも関わらず「Forbidden」のエラーが出てユーザーディレクトリにアクセス出来ない事があります。
この場合、次のような原因が考えられます。
ユーザーディレクトリやpublic_htmlのパーミッションが711以上になっていない。
LinuxにSELinuxが実装されている場合、SELinuxがアクセスをブロックしているなどが考えられます。
SELinuxはパーミッションとは別のセキュリティです。
ですからパーミッションの設定が適正でも、こちらのセキュリティで引っかかっているのかもしれません。
確認方法
root権限でコマンドラインから、以下のコマンドを入力して、SELinuxを一時的に無効にします。(再起動すると変更は無効になる)
# setenforce 0
これでアクセスできるなら、SELinuxがアクセスを制限しているので設定を変更する必要があります。
Fedora Core6の場合(CUI表示)、public_htmlのプロパディを開きアクセス権のタブをクリックします。
下のほうのSELinux Contextが「Read from all httpd scripts and the daemon」に選択されていない。
またはこの項目がない場合は、ディレクトリにSELinuxのタイプラベルが割り当てられていません(たぶん)。
SELinuxはディレクトリやファイルに「タイプ」と呼ばれるラベルを割り当てて管理しています
このラベルがないとapacheはディレクトリやファイルにアクセスできません
この場合、フォルダやファイルのタイプを初期化することで解決する事が多いようです。
方法は、
ユーザーディレクトリにpublic_htmlディレクトリを作成した後,root権限で,
#restorecon -R /home
とします。
これでhomeディレクトリ以下のタイプラベルが初期化され、タイプラベルが付け直されます。
SELinuxを有効にするにはroot権限でコマンドラインから、
# setenforce 1
とします。(再起動すると変更は無効になる)
ファイルやディレクトリを新規作成した時に、タイプラベルがうまく付与されない事が多いようです。
これを解決するにはユーザー登録した時に自動でディレクトリを作成するように設定すればよいと思います。
/etc/skel/ディレクトリの内容は新規ユーザー登録時にコピーされますので、ここにpublic_htmlディレクトリを作成します。
Fedora Core6の場合、この方法だときちんとタイプラベルが付与されていました。
あと、ユーザーディレクトリのパーミッションは初期状態では700になっていますので、711に変更するのを忘れないように。
参考にしたサイト
Fedora Core3 SELinuxメモ