Php 尝试连接Mysql安装mediawiki时权限被拒绝

Php 尝试连接Mysql安装mediawiki时权限被拒绝,php,mysql,mediawiki,Php,Mysql,Mediawiki,整个下午我都有一个问题,我被它困扰着,所以,让我们来解释一下 我正在运行MariaDB,它是FedoraLinux发行版mysql的一个flavuor。 我试图在我的本地机器上安装一个php cms,它需要数据库后端,所以我创建了数据库(这不是第一次,所以我应该知道我在做什么),比如说它叫myDb ok?然后我创建了用户,比如说myDbUser@localhost好啊然后,我们将数据库上的权限授予用户(将所有权限授予特定用户)。然后,我从db的命令行测试了用户和授予的权限,一切正常,我可以登录并

整个下午我都有一个问题,我被它困扰着,所以,让我们来解释一下

我正在运行MariaDB,它是FedoraLinux发行版mysql的一个flavuor。 我试图在我的本地机器上安装一个php cms,它需要数据库后端,所以我创建了数据库(这不是第一次,所以我应该知道我在做什么),比如说它叫myDb ok?然后我创建了用户,比如说myDbUser@localhost好啊然后,我们将数据库上的权限授予用户(将所有权限授予特定用户)。然后,我从db的命令行测试了用户和授予的权限,一切正常,我可以登录并查看db

然后我运行cms的安装脚本,好吗

Database type:  MySQL (or compatible)
Database host: localhost
Database name: myDb
Database username: myDbUser
Database password: passowrd
来自命令行的相同数据。但结果是:

DB connection error: Permission denied (localhost).
Check the host, username and password and try again. 
鉴于用户名和密码在命令行中工作正常,我假设这是“主机”的问题

所以我花了整整一个晚上试图弄明白它到底出了什么问题,我唯一想到的(我知道它不多)就是这个命令的输出:

netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:2393            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN   
我尝试了所有这些IP,但都没有成功。我总是犯同样的错误,所以有什么想法,暗示,线索,甚至是一个片段吗?谢谢

编辑:进一步的研究表明,这个问题不是数据库问题,而是CMS问题。这是因为我可以使用给定的用户和密码从命令行连接到db

EDIT2:其他研究表明,问题可能是我正在从我机器的根用户登录数据库,但Web服务器正在从其他用户访问数据库。我仍然不知道如何解决这个问题

EDIT3:以下是apache服务器的日志文件:

/var/www/html/Wiki/includes/limit.sh: line 61: ulimit: cpu time: cannot modify limit: Permission denied
/var/www/html/Wiki/includes/limit.sh: line 90: ulimit: file size: cannot modify limit: Permission denied
以前有人遇到过类似的问题,能帮忙吗?我有两个链接:
但它们似乎对我帮助不大,因为我不明白为什么这个脚本不能运行这些命令。

如果您不熟悉MySQL权限的工作方式,只需给MediaWiki安装程序根密码,它就会为自己创建具有正确权限的用户。

您可以尝试授予类似“youUser”@“%”的权限,使用“%”而不是本地主机。
这应该行得通。

好吧,结果表明,这根本不是MySql或PHP的问题。相反,这是一个安全问题,服务器没有访问mysql通道的权限。我必须使用这些命令来修复它:

              # grep httpd /var/log/audit/audit.log | audit2allow
              # semodule -i mypol.pp
我真的很难找到这个解决方案,我不得不用journalctl(一个我以前不知道的命令)查找系统消息。这是一个很大的皮塔,但我最终发现了


因此,如果有人会有类似的问题,至少答案是存在的

实际上,你需要的是

setsebool -P httpd_can_network_connect_db 1
我总是,每一个!仅有一个的时间在设置新主机时遇到一个或多个selinux问题。每次我用谷歌搜索这个问题,通常是几个小时,然后我运行sealert-a并自己处理它

所以,你必须了解一点如何阅读

sealert -a /var/log/audit/audit.log
这表明你应用了grep解决方案。你需要进一步阅读。您的输出如下所示(请注意问题、第一行粘贴的内容以及建议的解决方案,如果您选择了其中一个,那么他们会非常自信):

SELinux正在阻止/usr/sbin/httpd访问tcp_套接字上的name_connect。
*****插件catchall_布尔值(47.5置信度)表明*******************
如果希望允许HTTPD脚本和模块使用TCP连接到网络。
然后,您必须通过启用“httpd\u can\u network\u connect”布尔值来告诉SELinux这一点。
做
setsebool-P httpd_can_网络_连接1
*****插件catchall_布尔值(47.5置信度)表明*******************
如果希望允许HTTPD脚本和模块通过网络连接到数据库。
然后,您必须通过启用“httpd\u can\u network\u connect\u db”布尔值来告诉SELinux这一点。
做
setsebool-P httpd\u can\u网络\u连接\u db 1
*****插件catchall(6.38置信度)表明***************************
如果您认为默认情况下应该允许httpd在tcp_套接字上进行name_connect访问。
然后,您应该将其报告为bug。
您可以生成本地策略模块以允许此访问。
做
通过执行以下操作暂时允许此访问:
#grep httpd/var/log/audit/audit.log | audit2allow-M mypol
#semodule-i mypol.pp
其他信息:
源上下文未定义\u u:system\u r:httpd\u t:s0
目标上下文系统\u u:object\r:mysqld\u端口\u t:s0
目标对象[tcp_套接字]
源httpd
源路径/usr/sbin/httpd
端口3306
主办
源RPM包httpd-2.2.15-54.el6.centos.x86_64
目标RPM包
策略RPM selinux-Policy-3.7.19-292.el6.noarch
Selinux已启用True
策略类型目标
强制执行模式强制执行
主机名publicsrv
平台Linux publicsrv 2.6.32-642.el6.x86#u 64#1 SMP Tue
2016年05月10日17:27:01 UTC x86_64 x86_64
警报计数26
首次见到2016年10月1日星期六09:14:01下午EEST
最后一次见面时间:2016年10月1日星期六星期一下午11:23:12
本地ID 064b82b4-2e50-42ea-9a07-11468D0A62A66
原始审核消息
type=AVC msg=audit(1475353392.72:578):AVC:denied{name\u connect}for pid=5858 comm=“httpd”dest=3306 scontext=unconfined\u:system\r:httpd\u t:s0 tcontext=system\u:object\r:mysqld\u port\u t:s0 tclass=tcp\u套接字
type=SYSCALL msg=audit(1475353392.72:578):arch=x86_64 SYSCALL=connect success=no exit=EACCES a0=e a1=7f0cd22a6008a2=10 a3=40项=0 ppid=5852 pid=5858 auid=0 uid=48 gid=48 euid=48 suid=48 egid=48 sgid=48 fsgid=48 tty=(无)ses=1 comm=httpd exe=/usr/sbin/httpd subc=uncin
SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket .

*****  Plugin catchall_boolean (47.5 confidence) suggests  *******************

If you want to allow HTTPD scripts and modules to connect to the network using TCP.
Then you must tell SELinux about this by enabling the 'httpd_can_network_connect'boolean.
Do
setsebool -P httpd_can_network_connect 1

*****  Plugin catchall_boolean (47.5 confidence) suggests  *******************

If you want to allow HTTPD scripts and modules to connect to databases over the network.
Then you must tell SELinux about this by enabling the 'httpd_can_network_connect_db'boolean.
Do
setsebool -P httpd_can_network_connect_db 1

*****  Plugin catchall (6.38 confidence) suggests  ***************************

If you believe that httpd should be allowed name_connect access on the  tcp_socket by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp


Additional Information:
Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                system_u:object_r:mysqld_port_t:s0
Target Objects                 [ tcp_socket ]
Source                        httpd
Source Path                   /usr/sbin/httpd
Port                          3306
Host                          <Unknown>
Source RPM Packages           httpd-2.2.15-54.el6.centos.x86_64
Target RPM Packages
Policy RPM                    selinux-policy-3.7.19-292.el6.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     publicsrv
Platform                      Linux publicsrv 2.6.32-642.el6.x86_64 #1 SMP Tue
                              May 10 17:27:01 UTC 2016 x86_64 x86_64
Alert Count                   26
First Seen                    Sat 01 Oct 2016 09:14:01 PM EEST
Last Seen                     Sat 01 Oct 2016 11:23:12 PM EEST
Local ID                      064b82b4-2e50-42ea-9a07-11468d0a62a6

Raw Audit Messages
type=AVC msg=audit(1475353392.72:578): avc:  denied  { name_connect } for  pid=5858 comm="httpd" dest=3306 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket


type=SYSCALL msg=audit(1475353392.72:578): arch=x86_64 syscall=connect success=no exit=EACCES a0=e a1=7f0cd22a6008 a2=10 a3=40 items=0 ppid=5852 pid=5858 auid=0 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm=httpd exe=/usr/sbin/httpd subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Hash: httpd,httpd_t,mysqld_port_t,tcp_socket,name_connect

audit2allow

#============= httpd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     httpd_can_network_connect, httpd_can_network_connect_db
allow httpd_t mysqld_port_t:tcp_socket name_connect;

audit2allow -R

#============= httpd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     httpd_can_network_connect, httpd_can_network_connect_db
allow httpd_t mysqld_port_t:tcp_socket name_connect;