web-dev-qa-db-ja.com

PHPのopen_basedir制限を緩和するにはどうすればよいですか?

open_basedir は、ディレクトリツリー内でPHPによって開くことができるファイルを制限します。

Webルートディレクトリの外部にいくつかのクラスライブラリと構成ファイルを保存しています。このように、Webサーバーはそれらを一般にアクセス可能にしません。ただし、アプリケーションからそれらを含めようとすると、次のようなopen_basedir制限エラーが表示されます。

警告:realpath()[function.realpath]:有効なopen_basedir制限。ファイル(/var/www/vhosts/domain.tld/zend/application)は許可されたパス内にありません:/ var/www /の(/var/www/vhosts/domain.tld/httpdocs:/tmp) 5行目のvhosts/domain.tld/httpdocs/index.php

私のウェブルートはこちらです:

/var/www/vhosts/domain.tld/httpdocs

ライブラリと構成ディレクトリは次のとおりです。

/var/www/vhosts/domain.tld/zend

ドメインフォルダーの下のディレクトリツリーがアプリケーションで使用可能になるようにopen_basedirの制限を緩和する最善の回避策は何ですか?私はこれをやりたいドメインがいくつかありますが、セキュリティの脆弱性を作成することにも明らかに警戒しています。

注:CentOS、Apache、Pleskを使用しており、サーバーへのルートsshアクセス権があります。また、これはZend Frameworkには直接適用されませんが、このインスタンスで使用しています。 Zendのブートストラップからのインクルージョンは次のとおりです。

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());
21
isuldor

Apache(これがWebサーバーであると仮定)構成ファイル(例:httpd.conf)を使用して、ディレクトリごとに簡単にこれを行うこともできます。

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
</Directory>

制限を完全に削除することもできます

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>
21
Tom Haigh

アクセスする必要があるパス(/var/www/vhosts/domain.tld/zend)をopen_basedirディレクティブに追加します(ウィンドウでパス区切り文字「:」または「;」を使用して複数のパスを指定できます)

open_basedirの値はプレフィックスであることに注意してください。つまり、/ var/www/vhosts/domain.tld/zendの下にあるものはすべてアクセス可能です。

2
user27987

Parallels Plesk Panel(1and1など)では、PHPパネル設定でそれを行うことができます:

enter image description here

ここに:

enter image description here

1
Igor Parra