【问题标题】:Permission denied when I use mysql_connet through nginx but command line runs normally当我通过 nginx 使用 mysql_connet 但命令行运行正常时权限被拒绝
【发布时间】:2015-06-09 02:49:55
【问题描述】:

我的环境:

CentOS 6.6

带有 mod_security、naxsi、ngx_pagespeed 模块的 Nginx 1.7.10

PHP 5.6.5

Mariadb 10.0.16

SeLinux 关闭

setenforce 0

我的测试代码:

<?php
/*
** Connect to database:
*/

// connect to the database
$con = mysql_connect('localhost','root','my pass')
       or die('Could not connect to the server! ' . mysql_error());

var_dump($con);
exit;

就是这样。

当我使用 firefox 运行这个脚本时

结果是“无法连接到服务器!权限被拒绝”

nginx error.log 是

2015/02/18 23:26:33 [error] 1532#0: *68 FastCGI sent in stderr: "PHP message: PHP Warning: mysql_connect(): Permission denied in /var/www/nginx/aa. php on line 9”同时从上游读取响应标头,客户端:客户端 ip,服务器:localhost,请求:“GET /test-sql-injection.php HTTP/1.1”,上游:“fastcgi://unix:/var/运行/php-fpm.sock:",主机:"服务器ip"

但是当我使用命令行来运行这个脚本时

php aa.php

结果是

resource(5) of type (mysql link)

连接maria db成功...

mysql.sock 文件权限为

在 /tmp 中

lrwxrwxrwx. 1 mysql  mysql    25 2015-02-18 21:20 mysql.sock -> /var/lib/mysql/mysql.sock

在 /var/lib/mysql 中

srwxrwxrwx.  1 mysql mysql        0 2015-02-18 23:03 mysql.sock

所有命令都以 root 身份运行

当我使用另一个用户运行 php 命令时

仍然收到 Permission denied 错误消息!

哪个文件的权限不对?

======

/var/lib/mysql 目录权限为 700

所以它会导致权限被拒绝的问题......

【问题讨论】:

    标签: php mysql nginx centos mariadb


    【解决方案1】:

    php-cgi 和 php-cli 没有使用同一个 php.ini 文件。 比较两个文件,也许你有区别

    【讨论】:

    • php -i | grep php.ini => /etc/php5.6.5/php.ini 和
    • 您是否查看过 /var/log/mysql.log(或 mariadb 的等效文件)?
    【解决方案2】:

    检查套接字文件的完整路径。
    套接字路径中的每个目录都必须具有网络服务器用户的执行权限。
    例如/var/ 或 /var/lib/ 或 /var/lib/mysql/ 在必须具有 chmod 711 时可以具有 chmod 700。

    请注意,设置更宽松的 chmod 可能会导致安全问题。我建议您将mysql.sock 移动到默认可访问的目录中,例如 /tmp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多