apacheでシンボリックリンクがForbiddenになる時は「SymLinksIfOwnerMatch」を疑おう

In: apache

8 1月 2014

先日、とあるサーバーで、共通のディレクトリを各ユーザーがシンボリックリンクで読み込む、という構造のサイトを作った。
Aサーバーでは上手く言ったのだが、BサーバーではAccess Forbiddenエラーが出てしまった。

Forbidden

You don’t have permission to access /directory/ on this server.


Apache/2.2.3 (Red Hat) DAV/2 mod_auth_pgsql/2.0.3 PHP/5.2.17 mod_python/3.2.8 Python/2.4.3 mod_ssl/2.2.3 OpenSSL/0.9.8e-fips-rhel5 SVN/1.6.11 mod_perl/2.0.4 Perl/v5.8.8 Server at dacelo.info Port 80

「You don’t have permission to access」=「アクセス権がない」とのことで、試しにリンク元のディレクトリをリンク先のユーザーに合わせてみたら表示された。
パーミッションをchmodで777にするなどでは解決できなかった。

http.confでの「SymLinksIfOwnerMatch」

httpd.confを見てみると、シンボリックリンクに関する設定が変更されていた。

A.SymLinksIfOwnerMatch

<Directory /home/dacelo/public_html>
    AllowOverride All
    Options Indexes SymLinksIfOwnerMatch
</Directory>

この設定だと、シンボリックリンクがそのディレクトリの所有者(owner)に適合(Match)しないと表示されない、ということになる。
シンボリックリンクをユーザー間で有効にする通常の設定はこちら。

B.FollowSymLinks

<Directory /home/dacelo/public_html>
    AllowOverride All
    Options Indexes FollowSymLinks
</Directory>

広告

(FollowSymLinks=シンボリックリンクをフォローする)

Aの場合は、例えばroot権限の重要なディレクトリにWeb上でシンボリックリンクが貼られたりすることがなくなるので、セキュリティ的には向上しますが、パフォーマンスが低下します。また、そもそもシンボリックリンクを使いたいときには困ってしまいます。

Bの場合は便利ですが、上記理由からセキュリティ面ではちょっと不安があります。また、アクセスのたびにファイルやディレクトリーがシンボリックされているかどうかチェックするためにlstat 関数が実行されるので、パフォーマンスが若干低下します。

また、最近ロリポップ!サーバーへの攻撃で、シンボリックリンクの設定が利用された、という事例もありましたので注意したいところです。

ロリポップの共有 Web サービス下のサイト改ざん事件で、 攻撃手法の一つとして 「他ユーザー所有のファイルへのシンボリックリンクを自分のコンテンツディレクトリ下に作り、Apache HTTPD 経由でアクセスする」手順が利用されたらしい。
Apache HTTPD: `Options -FollowSymLinks` は不完全 – ダメ出し Blog”

その他参考サイト

コメント

2 Responses to apacheでシンボリックリンクがForbiddenになる時は「SymLinksIfOwnerMatch」を疑おう

トラックバックURL:

Avatar

weblogy

1月 8th, 2014 at 2:03 PM

技術メモ更新。apacheでシンボリックリンクがForbiddenになる時は「SymLinksIfOwnerMatch」を疑おう | Weblogy

Avatar

madarax11

1月 9th, 2014 at 8:33 AM

apacheでシンボリックリンクがForbiddenになる時は「SymLinksIfOwnerMatch」を疑おう – Weblogy

Comment Form

About this blog

ここは、SE見習いである私ことdaceloが、日夜習得していくシステム関連の備忘録、phpやWordPressTipsのネタ、あるいはSEOやWebマーケティング関連の雑感を投稿するブログです。 平日は大体毎日投稿しています。土日は休業日です。

カテゴリー

カテゴリー

アーカイブ