PHP open_basedir的四种设置方式

PHP open_basedir的四种设置方式

PHP open_basedir的四种设置方式

open_basedir是php.ini中的一个配置选项,它可将用户访问文件的活动范围限制在指定的区域,
假设open_basedir=/home/wwwroot/home/web1/:/tmp/,那么通过web1访问服务器的用户就无法获取服务器上除了/home/wwwroot/home/web1/和/tmp/这两个目录以外的文件。
注意用open_basedir指定的限制实际上是前缀,而不是目录名。
举例来说: 若"open_basedir = /dir/user", 那么目录 "/dir/user" 和 "/dir/user1"都是可以访问的。所以如果要将访问限制在仅为指定的目录,请用斜线结束路径名。那么open_basedir设置方式有几种呢,下面我们来详细介绍一下。

一、apache或nginx设置

如果是apache+php,在apache vhost文件中增加

php_admin_value open_basedir "/home/www/www.example.com/:/tmp/:/proc/"

整体效果如下

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/www/www.example.com
ServerName www.example.com
php_admin_value open_basedir "/home/www/www.example.com/:/tmp/:/proc/"
<Directory "/home/www/www.example.com">
allow from all Options + Indexes
</Directory>
</VirtualHost>

如果是nginx+php-fpm,就在配置文件下设置

fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";

添加后效果如下

location ~ \.php$ {
        fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/:/proc/";
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
}

通常nginx的站点配置文件里用了include fastcgi.conf;,这样的,把这行加在fastcgi.conf里就OK了。
如果某个站点需要单独设置额外的目录,把上面的代码写在include fastcgi.conf;这行下面就OK了,会把fastcgi.conf中的设置覆盖掉。
这种方式的设置需要重启nginx后生效。

二、修改php.ini

修改php.ini,增加

[HOST=www.example.com]
open_basedir=/home/www/www.example.com/:/tmp/:/proc/
[PATH=/home/www/www.example.com]
open_basedir=/home/www/www.example.com/:/tmp/:/proc/

这种方式的设置需要重启php-fpm后生效。

三、.user.ini

在网站根目录下创建.user.ini并写入:

open_basedir=/home/www/www.example.com/:/tmp/:/proc/

这种方式不需要重启nginx或php-fpm服务。安全起见应当取消掉.user.ini文件的写权限。 

四、ini_set

还有一种通过ini_set

ini_set('open_basedir', /home/www/www.example.com/:/tmp/:/proc/ ');

{{collectdata}}

网友评论0