[英]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.