簡體   English   中英

嘗試連接到Mysql安裝MediaWiki時權限被拒絕

[英]Permission denied when trying to connect to Mysql installing mediawiki

我整個下午都有一個問題,我對此非常棘手,所以讓我們解釋一下。

我正在運行MariaDB,它是Fedora Linux Distibution的mysql版本。 我正在嘗試在本地計算機上安裝需要數據庫后端的php cms,所以我創建了數據庫(這不是第一次,所以我應該知道我在做什么),假設它稱為myDb好? 然后,我創建了用戶,假設myDbUser @ localhost好嗎? 然后,已將db的特權授予用戶(GRANT ALL是特定的)。 然后,我從數據庫的命令行測試了用戶和授予的特權,一切正常,我可以登錄並且可以看到數據庫。

然后我運行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問題。 那是因為我可以使用給定的用戶名和密碼從命令行連接到數據庫。

編輯2:其他研究表明,該問題可能是權限問題。 我從我的機器的根用戶登錄db,但是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

任何人以前都遇到過類似的問題,可以提供幫助嗎? 我有這兩個鏈接: 1 2,但是它們似乎並沒有幫助我更多,因為我不明白為什么該腳本無法運行那些命令。

如果您不熟悉MySQL權限的工作原理,只需為MediaWiki安裝程序提供root密碼,它就會為自己創建具有正確權限的用戶。

您可以嘗試使用'%'而不是localhost來授予諸如'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 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM