「シンボリックリンクは許可されていないか、リンクターゲットにアクセスできません」/ CentOS 6上のApache


30

新しいCentOS 6インストールがあり、ドキュメントルートに開発ファイルへのシンボリックリンクがあります。

[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root  0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/

私のhttpd.confにはこれがあります:

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

シンボリックリンクのターゲットには、Apacheが必要なものを読み取ることができるアクセス許可があります。

 [root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app

私も変更してSELinuxを無効にしてみました/etc/selinux/conf

SELINUX=disabled

しかし、私が何をしても、誰かがそのリンクにアクセスしようとするとhttp://localhost/refresh-app/、403 FORBIDDENエラーページが表示され、これは次のように書かれてい/var/log/httpd/error_logます:

Symbolic link not allowed or link target not accessible

Apacheがシンボリックリンクのターゲットにアクセスできないのはなぜですか?


Apacheを実行しているユーザーは何ですか?そのユーザーとしてそのリソースを実際に読むことができますか?
-draeath

同様に、selinuxをpermissiveモードで実行し、sealertを使用して監査ログを解析することをお勧めします-これにより、SELinuxがそれを拒否する理由/方法を確認でき、多くの場合、解決策も得られます。
-draeath

@draeath:それを確認する方法がわかりません。
ビリーONeal

@draeath:1.これはプロダクションボックスではありません。SELinuxがオフかどうかは気にしません。2.いずれにせよ、私はこの時点でトラブルシューティングを行っているだけです。根本的な原因がわかったら復元するでしょう。
ビリーONeal

心配しないでください。これはよくある見落としです。初めてやったとき、serverfault.com / questions / 313485 /… ::そのエラーの1つです。:D
whoami

回答:


44

問題が見つかりました。ターンアウト、Apacheは、私が提供していないだけでディレクトリへのアクセスを望んでいる/home/billy/refresh-app/、だけでなく、その上のすべてのディレクトリ、すなわち/home/billy//home/。(なぜ...サブディレクトリへのアクセスを誰かに与えることは、そのサブディレクトリの上のすべてに許可を与える必要がないはずです...)

私はそれが.htaccess何かを探しているか、おそらくディレクトリトランスバーサルのアクセス権をどのように扱うかについて* nixが奇妙であると推測します。


15
変ではありません。それが動作する方法です。アクセスしようとしているパス全体に+ xが必要です。
バハマ

4
@bahamat:それは意味がありません。実行されないファイルの実行権限が必要なのはなぜですか?(これは、/...にほとんど権利を与える必要がないことを完全に割引きます)ACLを備えたシステムには、通常、個別のディレクトリ横断オプションがあります。Unixが設計されてから30年、ACLシステムが広く利用できるようになってから、ACLが標準になると思います。:ため息:
ビリーONeal

11
彼はディレクトリの+ xを意味していたと思います。ユーザーに切り替えて、+ xなしのディレクトリにcd-ingしてみてください。メモリから+ Xアクセスすることができますが、+ rはリストファイルにあなたを可能にし、+ながら言ったディレクトリに変更ファイルにあなたを可能にするwはディレクトリが表示されない

1
@BillyONeal:「パス全体」というフレーズはディレクトリを意味します。
バハマ

5
これは、UNIXでの正しい動作です。親ディレクトリの下のサブディレクトリに変更しようとしている親ディレクトリに対する実行権限(gまたはoの場合は+ x)が必要です。
slm

11

私は、Ubuntu 10で動作していた以下の設定がありましたが、Ubuntu 14(Apache 2.4)で動作しなくなった同様の問題がありました。

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>

これに切り替えると、問題がソートされます(Webサーバーのユーザーがシンボリックリンクに直接アクセスできなかった場合でも)

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>

私はその-SymLinksIfOwnerMatch設定を伝えることができることから、Apache 2.4の変更と関係がありますが、正確な原因を調査しようとしませんでした。

私はまたopenbase_dir、PHPの制限まで下がると考えましたが、そうではありませんでした。


6

このエラーは、暗号化されたフォルダーにリンクしている場合にも発生する可能性があります。


4

「FollowSymLinks」は、httpd.confで必要なオプションです。詳細はこちら。htdocsでもルールが必要なようですが...それはあなたが必要なオプションです。


3
参照してくださいOptions All- FollowSymLinksすでに指定されています。
ビリーONeal

2

selinuxが実施されているかどうかを確認することもできます。RedHat / Fedoraで、次を実行します。

getenforce

応答が「強制」の場合、実行することができます

setenforce 0

ブラウザでもう一度URLを試してください。

selinuxを無効にすることがこの問題を解決する最善の方法であると言っているわけではありませんが、原因を特定するのに役立つ場合があることに注意してください。


これはsymリンクの問題を修正しましたが、悪影響はありますか?
digz6666

2
Options +FollowSymLinks

これで.htaccessファイルを作成してください(symlinkの前にdirに入れてください)。


私の場合、/var/www別の中間シンボリックリンクへのシンボリックリンクを作成していました。シンボリックリンクを使用する必要がある場合は、宛先への直接のシンボリックリンクにします。
スリダールサルノバト

0

すべての許可を許可し、followsymlinkを許可した後に私の問題を解決するのは、「FollowSymLinksの場合、具体的には.confファイル内のディレクトリ構造内でなければなりません。Apache現在のマニュアル

FollowSymLinksおよびSymLinksIfOwnerMatchオプションは、セクションまたは.htaccessファイルでのみ機能します。

ここから回答


0

私の解決策は、という名前のすべてのリポジトリの共有フォルダーを作成することでした/home/repo

そして、自分の家からシンボリックリンクのような: ln -s /home/repo ~/Code そう~/Code/www.xxxx.com/public するポイント /home/repo/www.xxxx.com/public

また、Apache Webルートへのリンクは /var/www/html/home/repo/www.xxxx.com/public

ここで見つけました:https : //github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

一部のsymlink + userグループのアクロバシーを使用すると、複数のユーザー/バージョンを展開できます。


0

行の@Billey ONeil @Flion I couldntの答え(低レップ数)
ここでは、私がしなければならなかったでした:
注:別名LL = 'lsの$ LS_OPTIONS -lh')

root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/

次に、ソースリンク内のすべてのディレクトリを確認します。

root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12  2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug  7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/

/ home / DATAディレクトリが原因です。
これで修正してください:

root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/

修正はすぐに行われます-Apacheを再起動する必要はありません。


-1

また、SELinux設定を調整し、setenforceがパス上にない場合があります。だからこれを試してください:

sudo /usr/sbin/setenforce 0

そして、これを再起動間で持続させる

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