• home > OS > Linux > Devops >

    selinux限制下载远程图片与访问网络,get_headers与curl都false

    Author:zhoulujun Date:

    从php5 6 升级到centos8+php7+nginx后,编辑器里面贴如远程图片无法下载到本地,排查发现是php无法下载远程图片,,get_headers与curl都返回fals e,php根本无法访问远程网络。selinux限制httpd对外访问的权限,所以只需设置setsebool -P httpd_c

    上次折腾结果:服务器升级至centos8 网站配置-php与mysql从5.6升级到php7与msyql8,发现网站服务一切正常,但是,发现UEditor编辑器,复制进去的远程图片,无法远程下载到本地。最先开始以为是UEditor配置问题。然后查了下配置,都是好的。经过一番排查后,发现,php根本无法远程下载图片,因为php根本无法访问远程网络

    测试脚本如下

    <?php
    $imgUrl = 'https://images2018.cnblogs.com/blog/1016915/201807/1016915-20180717131701944-1722861802.png';
    $is_ok = http_request_json($imgUrl);
    $heads = get_headers($imgUrl, 1);
    echo var_dump($is_ok);
    echo json_encode($heads);
    
    function http_request_json($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https的URL需要用到
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//https的URL需要用到
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $result[1] = curl_exec($ch);
        $result[0]= curl_getinfo($ch,CURLINFO_HTTP_CODE);
        curl_close($ch);
        return $result;
    }

    最下开始有点懵逼。然后看下selinux,关闭selinux,一切正常

    • setenforce 1 就为false  

    • setenforce  0 就为true。一切正常。

    selinux 如何放开这个权限呢

    检查网络访问的配置

    getsebool -a | grep httpd_can_network_connect

    如结果如下

    httpd_can_network_connect --> off

    则执行如下命令打开:

    • 临时开启selinux网络访问权限:临时配置,重启后失效

      setsebool httpd_can_network_connect=1

    • 长期开启selinux网络访问权限:写入配置文件的命令,重启后保留

      setsebool -P httpd_can_network_connect 1

    selinux限制httpd对外访问的权限,这个是有必要的,至于会带来哪些安全风险,本人也不是非常清楚,主要是脚本注入后,变肉鸡?不过也先不管了,望大神给我分析下。拜谢!

    所以只需设置

    setsebool -P httpd_can_network_connect=1,

    然后,去查看selinux的权限列表,getsebool -a |grep httpd



    centos8 网站服务器 selinux设置

    网上搜索,一般都是说关闭selinux,但是,个人不建议关闭

    设置selinux给web目录读权限

     chcon -v -R --type=httpd_sys_content_t /data/www/

    设置selinux给web目录写权限

    chcon -R -t httpd_sys_rw_content_t /data/www/

    具体参看《centos8 nginx server root指向自定义目录如(/data/www),访问报403 404,所有文件用户组为root 权限为755



    转载本站文章《selinux限制下载远程图片与访问网络,get_headers与curl都false》,
    请注明出处:https://www.zhoulujun.cn/html/OS/Linux/LinuxDevops/8323.html