web-dev-qa-db-ja.com

Apacheはシンボリックリンクをたどりません(403 Forbidden)

UbuntuでApacheを設定するのに問題があります。私は このガイド に従っています。

# /usr/sbin/Apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built:   Feb 22 2011 18:33:02

私の公開ディレクトリ/ var/wwwは、そこに配置されたPHPページを正常に処理および実行できます。ただし、ホームフォルダー内のディレクトリを指すシンボリックリンクを/ var/wwwに作成し、そこにページを提供したいと思います。

[root /var/www]# ll
total 36
drwxr-xr-x  3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx  1 root root   16 2011-09-11 13:21 about -> /root/site/about

ブラウザで/ aboutにアクセスしようとすると、

Forbidden

You don't have permission to access /about on this server.

私の知る限り、提供したいファイルに十分な特権を与えました。

[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume

私はFollowSymLinksオプションを認識しており、/ etc/Apache2/sites-enabled/000-defaultファイルに設定されていると思います。

DocumentRoot /var/www
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/>
    Options FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

何が欠けているのでしょうか?

83
Tim

Apacheが/root/root/siteおよび/root/site/aboutの実行権限を持っていることを確認してください。

実行:

chmod o+x /root /root/site /root/site/about
122
palacsint

403エラーは、暗号化されたファイルシステムによって引き起こされる場合もあります。 暗号化されたホームフォルダへのシンボリックリンク

シンボリックリンクが暗号化されたフォルダーを指している場合、Apacheおよびファイル/フォルダーのアクセス許可が正しく設定されていても、Apacheユーザー(たとえばwww-data)はコンテンツにアクセスできません。 www-dataユーザーのアクセスは、このような呼び出しでテストできます。

Sudo -u www-data ls -l /var/www/html/<your symlink>/

これには回避策/解決策があります。 www-dataユーザーをプライベートグループに追加する(暗号化されたデータをWebユーザーに公開する)か、暗号化されていないrsyncedフォルダーをセットアップする(おそらくかなり安全)。私自身は、おそらく開発中にrsyncソリューションに行きます。

https://askubuntu.com/questions/633625/public-folder-in-an-encrypted-home-directory

私の目的に便利なツールはlsyncdです。これにより、暗号化されたホームフォルダーで直接作業でき、Apache Webページでほとんど瞬時に変更を確認できます。同期は、ファイルシステムの変更によってトリガーされ、rsyncを呼び出します。私はかなり小さなWebページとスクリプトで作業しているだけなので、同期は非常に高速です。 0秒の遅延を設定することは可能ですが、rsyncを開始する前に1秒の短い遅延を使用することにしました

Lsyncdのインストール(Ubuntuで):

Sudo apt-get install lsyncd

バックグラウンドサービスの開始:

lsyncd -delay 1 -rsync /home/<me>/<work folder>/ /var/www/html/<web folder>/
17
user3811904

新しいサーバーでは長い間解決できなかった同様の問題がありました。 palacsintの答えに加えて、質問すべき良い質問は次のとおりです。Apache2.4を使用していますか? Apache 2.4には、上記の構成を使用すると機能しない許可を設定するための異なるメカニズムがあるため、 このブログ投稿で説明されている解決策 を使用しました。

基本的に、私がする必要があったのは、設定ファイルを以下から変換することでした:

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all

</Directory>

に:

Alias /demo /usr/demo/html

<Directory "/usr/demo/html">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Orderおよびallow行がすべての付与が必要

12

この質問に関連して、私はなぜ私の仮想ホストが私にその403を与えているのかを見つけました。

私はこの質問と他の質問についてすべての可能性を運無しにテストしました。それはほとんど私を怒らせます。

シンボリックリンクを介したCapistranoの方法と同様のリリース展開を使用してサーバーをセットアップし、DocRootフォルダー(現在のリリースフォルダーへのシンボリックリンク)にアクセスしようとすると、403が提供されました。

私の仮想ホストは:

DocumentRoot /var/www/site.com/html
<Directory /var/www/site.com/html>
        AllowOverride All
        Options +FollowSymLinks
        Require all granted
</Directory>

私のメインのhttpd.confファイルは(デフォルトのApache 2.4インストール)でした:

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes -FollowSymLinks -Includes
(...)

メインのオプション定義は、vhostsフィールドよりも優先されていたことがわかります(私にとっては直感に反します)。だから私はそれを次のように変更しました:

DocumentRoot "/var/www"
<Directory "/var/www">
    Options -Indexes +FollowSymLinks -Includes
(...)

ユーレカ! (MAIN httpd.confファイルのFollowSymLinksの前のプラス記号に注意してください。これが他の失われた魂を助けることを願っています。

7
mustangp51d

最初にselinuxを無効にします(vim/etc/selinux/config)

vim /etc/httpd/conf/httpd.confは、シンボリックリンクとディレクトリインデックスの次の行を編集します。

documentroot /var/www/html
<directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride None
</directory>

.htaccessファイルの場合、AllowOverride all

1
n s n srinivas

私の状況で発見したように、シンボリックリンクが失敗する別の方法があります。サーバーとしてSELinuxシステムがあり、シンボリックリンクがNFSマウントフォルダーを指している場合(他のファイルシステムが同様の症状を引き起こす可能性があります)、httpdが間違ったコンテキストを参照し、ターゲットフォルダーのコンテンツの提供を拒否する可能性があります。

私の場合、/var/www/htmlls -Zで取得できる)のSELinuxコンテキストはunconfined_u:object_r:httpd_sys_content_t:s0です。 /var/www/htmlのシンボリックリンクは同じコンテキストを持ちますが、ターゲットのコンテキストはNFSマウントされたフォルダーであり、system_u:object_r:nfs_t:s0です。

解決策は、fscontext=unconfined_u:object_r:httpd_sys_content_t:s0mountオプションに追加することです(例:# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>)。 rootcontextは無関係であり、defcontextはNFSによって拒否されます。私はcontextを単独では試しませんでした。

1
Urhixidur

14.04へのアップグレード後に問題が発生した場合 https://askubuntu.com/questions/452042/why-is-my-Apache-not-working-after-upgrading-to-ubuntu-14-04 アップグレード前にrootが変更された=/var/wwwアップグレード後=/var/www/html

1
lxx