web-dev-qa-db-ja.com

nginx vhostでopen_basedirパスを追加する方法

私が設定したphp.iniで

open_basedir = /home/user/web/

ここで、/ usr/share/phppgadminからのファイルを含める必要があるサブドメインでphppgadminを実行したいと思います。
それで、このホストのnginx-configに次の行を追加しました:

fastcgi_param PHP_VALUE open_basedir="/home/user/web/:/usr/share/phppgadmin/";

そしてnginxを再起動しました。ただし、次のエラーのため、サイトにアクセスできません。

[エラー] 31440#0:* 1 FastCGIがstderrに送信されました: "PHP警告:include_once():open_basedir制限が有効です。ファイル(/usr/share/phppgadmin/libraries/lib.inc.php)が許可されたパス内にありません(s):(/ home/user/web /) /usr/share/phppgadmin/info.phpの10行目

2番目のパスがここにリストされていない理由は何ですか? open_basedirを仮想ホストに追加するには、他に何が必要ですか?/sites-availableのデフォルトファイルのみを使用しました。

編集常にfpmの再起動を考えてください...

service php5-fpm restart
3
32bitfloat

特定の状況では、デフォルトの_/usr/share_に_open_basedir_を追加することを検討する必要があります。そこにあるものは、とにかく世界中で読み取られるように設計されているためです。

さらに、_open_basedir_は、_Shell_exec_、execsystemなどのPHP関数をロックダウンしない限り、簡単に回避できます。それを使用するためにセキュリティで保護することを検討してください(私は知っています、それは最低です)。

どうすれば簡単に回避できるのか疑問に思っている場合は、system('php -n ascript.php');を使用できます。 _-n_を指定しても、PHP.iniは読み込まれないため、_open_basedir_は適用されません。

5
Jay

参考までに、複数のvhostにnginx構成を設定している場合(つまり、/etc/nginx/sites-enabled/example.com)次に、fastcgi_param PHP_VALUE open_basedir= そこ:

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_param PHP_VALUE open_basedir="/var/www/:/new/path";
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
3
Gregory Martin

open_basedirを介してfastcgi_paramを構成すると、サーバーに複数のサイトがある場合に いくつかの問題 が発生する可能性があります。

他のオプションは 。user.ini を使用することです。

0
RFC 7676