3日間悩んだApache2.4系ユーザーディレクトリのForbidden

* 本ページはプロモーションが含まれています

Apache2.4系を入れる必要があったので、CentOS6/Apache2.2からCentOS7/Apache2.4へ更新しました。

2.4系では、httpsd.conf内の書式やアクセス制御の書式も変更になり、修正を施し、Apache起動まで確認できたところで、ユーザーディレクトリの設定を有効にしたところ、Fobiddenのエラーでハマってしまいました。

この時の環境では、

  • Firewall無効
  • SELinux無効
  • mod_userdir.soのモジュールが読み込まれているか確認
  • /etc/httpsd/conf.d/userdir.con内を確認
    UserDir public_html
    <Directory “/home/*/public_html”>
    AllowOverride ALL
    Options ALL
    Require all granted
  • userのパーミッションを711確認
  • user下public_htmlディレクトリのパーミッションを755確認
  • public_html下のindex.htmlに読み込み属性があるか確認
  • user下に.htaccessがあるか確認
    .htaccessが見つかった場合、アクセス制御書式が古くなっているのでorder deny allow形式からRequire形式に変更

おおよそ、これくらいの設定で普通なら閲覧できるはずなんです。

実は、今回運用したサイトの構成で、userのディレクトリは、グループ分けする必要があったので、下記のようになってます。

/home/group1/user1
/home/group1/user2
/home/group2/user3
/home/group2/user4

これらuser1からuser4までチルダ(~)を使ったURL(https://localhost/~user1)でアクセスすると、すべて、下記のエラー

Forbidden
You don’t have permission to access /~user1 on this server.

httpsdのエラーログを見ても、permission denied.と記載されている。

/home/group/userの位置が悪いのか?と思い、/home/user5のユーザーを作成してみると、~/user5でアクセス出来る。

と言うことは、/etc/httpsd/conf.d/userdir.conf内のディレクティブ/home/*/public_htmlが怪しい。
*の指定だと、homeとpublic_html間に何が入っても有効なはずじゃないのか?と思い、下記のディレクティブを追加してみた。

<Directory "/home/*/*/public_html">
AllowOverride ALL
Options IncludesNoExec ExecCGI FollowSymLinks
Require method GET POST OPTIONS
</Directory>

これで、Apacheを再起動したところ、チルダ(~)による各ユーザーのホームページが閲覧できるようになった。

結果オーライだが、/home/*/*/public_htmlの書式は、何かスマートじゃないよね?
何かよい書き方もしくは方法があったら、教えてください。


See also