Php

如何在 nginx vhost 中添加 open_basedir 路徑

  • November 13, 2019

在 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。但是,由於以下錯誤,我無法訪問該站點:

$$ error $$31440#0:*1 FastCGI 在標準錯誤中發送:“PHP 警告:include_once():open_basedir 限制生效。文件(/usr/share/phppgadmin/libraries/lib.inc.php)不在允許的路徑中: **(/home/user/web/)**在第 10 行的 /usr/share/phppgadmin/info.php

此處未列出第二條路徑的原因可能是什麼?我還需要將 open_basedir 添加到虛擬主機嗎?我只使用了 /sites-available 中的預設文件。

編輯總是想重新啟動fpm …

service php5-fpm restart

對於您的特定情況,您應該考慮只添加/usr/share到 default open_basedir,因為其中的任何內容都旨在被世界閱讀。

另外,open_basedir除非您已鎖定 , 和類似的 PHP 函式,否則很容易繞過shell_execexec因此system不要考慮使用它是安全的(我知道,它很爛)。

如果您想知道如何輕鬆繞過它,您可以system('php -n ascript.php');. 這-n將導致沒有 PHP.ini 被讀取,因此 noopen_basedir將被應用。

引用自:https://serverfault.com/questions/431200