LNMP架构二十六(php-fpm的open_basedir )

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/85058236

二十六、php-fpm的open_basedir 

      将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
      当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时,该文件的位置将被检查。
       当文件在指定的目录树之外时 PHP 将拒绝打开它
       所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。

      因为如果服务器管理多个网站,在php.ini里定义多个open_basedir就不合适了,所以要么在虚拟主机配置文件里面定义,要么在php-fpm配置文件里面定义,我们可以针对不同的池子(pool)定义对应的open_basedir。

  • 配置open_basedir

    针对[www]的pool进行配置
    [root@localhost ~]# vi  /usr/local/php-fpm/etc/php-fpm.d/www.conf
    ......
    php_admin_value[open_basedir]=/data/www/test.com:/tmp/            #这里设置了两个目录
    ......
    //添加上面一行配置

    重启php-fpm:
    [root@localhost ~]# /etc/init.d/php-fpm reload
    Reload service php-fpm done

  • 测试

    [root@localhost ~]# curl -x127.0.0.1:80 test.com/1.txt
    test open_basedir

注意: 若open_basedir定义错误,就会导致无法访问,形成404状态码,输出curl直接连会提示“No input file specified.”

  • 定义错误日志

    display_errors = Off 正常情况下,在线上这个是off的,别人不能通过浏览器看到你的错误信息,而是把你的错误信息记录到服务器的某一个文件里

    [root@localhost ~]# vi /usr/local/php-fpm/etc/php.ini
    ......
    display_errors=Off //搜索display_errors 看是否为off,不是的话改为off。

    ;error_log = syslog
    error_log = /usr/local/php-fpm/var/log/php_error.log //搜索error_log,在下面添加一行,定义错误日志路径。

    搜索error_reporting
    注释掉自带的error_reporting
    ;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    error_reporting = E_ALL //定义错误日志的级别。
    ......
    保存退出

    手动创建错误日志文件:
    [root@localhost ~]# touch /usr/local/php-fpm/var/log/php_error.log
    [root@localhost ~]# chmod 777 /usr/local/php-fpm/var/log/php_error.log
     

  • 测试

    为了方便测试,故意将/usr/local/php-fpm/etc/php-fpm.d/www.conf 中的open_basedir路径写错,来方便测试

    [root@localhost ~]# curl -x127.0.0.1:80 test.com/sleep.php -I
    HTTP/1.1 404 Not Found
    Server: nginx/1.8.0
    Date: Tue, 09 Jan 2018 16:57:28 GMT
    Content-Type: text/html; charset=UTF-8
    Connection: keep-alive
    X-Powered-By: PHP/7.1.6

    查看错误日志:
    [root@localhost ~]# cat /usr/local/php-fpm/var/log/php_errors.log 
    [09-Jan-2018 16:57:28 UTC] PHP Warning: Unknown: open_basedir restriction in effect. File(/data/wwwroot/test.com/sleep.php) is not within the allowed path(s): (/data/wwwroot/wwtest.com:/tmp/) in Unknown on line 0
    [09-Jan-2018 16:57:28 UTC] PHP Warning: Unknown: failed to open stream: Operation not permitted in Unknown on line 0
    //错误提示访问有限制

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/85058236
今日推荐