Apacheはシンボリックリンクを追跡しません(403 Forbidden)


90

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>

私が見逃している可能性のあるアイデアはありますか?

回答:


126

Apacheはのための実行権限を持っていることを確認し/root/root/siteそして/root/site/about

実行:

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

8
どうもありがとう...親ディレクトリも実行可能でなければならないことに気付きませんでした。
Tim

39
まあ、私はそれが機能しないとは言いませんが、一般的に/ rootにo + xを与えるのは良い考えではありません;)
Michal Rzemieniecki

11
ミハルは正しいです。ACL(少なくともMacでは)を使用できることがわかりました。これは、「その他」よりも少し安全なapacheアプリ(_www)のみにchmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/aboutこれらのアクセス許可を付与します。
James S

1
Mac OS(10.9.4)では、〜/ Documentsに実行権限がなく、サイトファイルをホストするgitリポジトリがありました。〜/ Documentsにchmod o + xを付与するとうまくいきました!ありがとう!
Ernani Joppert 14

1
ついに答えが出ました!ありがとう。
2015年

21

403エラーは、暗号化されたファイルシステム、たとえば暗号化されたホームフォルダーへのシンボリックリンクによっても発生する可能性があります

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

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

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

/ubuntu/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>/

3
これsudo -u www-data ...は、権限の問題があるかどうかを確認するのに最適な方法です。ユーザーは、ディストリビューションに応じて、www-data、apache、またはその他のユーザーになる可能性があることに注意してください。
mkasberg 2017年

やっとやっと!私はすでに私の最も基本的な能力を疑っていました!
kalabalik 2017

これに数時間を費やし、最終的には暗号化されました!
myol 2017年

15

新しいサーバーで長い間解決できなかった同様の問題がありました。palacsintの回答に加えて、尋ねるべき良い質問は、Apache 2.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>

Orderallowの行がRequire all Grantedに置き換えられていることに注意してください


Order / Allow / Denyコマンドは、ほとんどのコンピューターで引き続き使用できます。新しいバージョンでは、access_compatモジュールに実装されています。そのモジュールが有効になっている場合、最初の部分が期待どおりに機能する可能性は低くありません。そこにない場合、Apache2を起動しようとするとエラーで失敗するはずです。
Alexis Wilke、2017

どの構成ですか?/etc/httpd/conf/httpd.conf私のシステム上に存在しない、また、ディレクトリが/etc/httpd/存在しません。
アーロン・フランケ

@AaronFranke Apacheがインストールされていますか?/etc/apache2/httpd.conf /etc/apache2/apache2.conf /etc/httpd/httpd.conf /etc/httpd/conf/httpd.conf
RightHandedMonkey

はい、Apacheをインストールしました。Ubuntuを使用しています。/etc/apache2/apache2.conf私のために存在します。
アーロンフランケ

7

この質問に関連して、私は私のvhostが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の前のプラス記号に注意してください。これが他の失われた魂を助けることを願っています。


Apache 2.4では、単一のオプション行で「+」と「-」を組み合わせることはできないため、ソリューションによって構成が無効になり、httpdが起動に失敗します。
deesto 2017

そうです、ファイルでDocumentRootを「以前」に宣言したにもかかわらず、子のDirectoryセクションをオーバーライドしていました(何ですか?)
rogerdpack

2

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

私の場合、/var/www/html(で取得できるls -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:s0することですmount(例:)# 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


2

最初に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


/etc/httpd/システムにフォルダがない場合はどうなりますか?
アーロンフランケ


1

他の答えが示しているように権限を変更することに加えて、私はそれを有効にするためにApacheを再起動する必要がありました:

sudo service apache2 restart

0

あなたが必要な場合に備えて、さらにもう一つの微妙な落とし穴AllowOverride All

深いFSツリー内のどこかで、古い.htaccess持ちます

    Options Indexes

の代わりに

    Options +Indexes

FollowSymLinksサーバー構成のセットをさりげなく無効にし、ここで不思議な403を引き起こすのに必要なすべてでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.