私が設定した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
特定の状況では、デフォルトの_/usr/share
_に_open_basedir
_を追加することを検討する必要があります。そこにあるものは、とにかく世界中で読み取られるように設計されているためです。
さらに、_open_basedir
_は、_Shell_exec
_、exec
、system
などのPHP関数をロックダウンしない限り、簡単に回避できます。それを使用するためにセキュリティで保護することを検討してください(私は知っています、それは最低です)。
どうすれば簡単に回避できるのか疑問に思っている場合は、system('php -n ascript.php');
を使用できます。 _-n
_を指定しても、PHP.iniは読み込まれないため、_open_basedir
_は適用されません。
参考までに、複数の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;