被禁止:您没有权限访问此服务器上的/phpmyadmin。

70

你好,我在我的CentOS机器上安装了phpMyAdmin,但当我尝试通过浏览器访问phpmyadmin时,出现以下错误:

Forbidden
You don't have permission to access `phpmyadmin` on this server.

我的phpmyadmin.conf文件内容如下:

# phpMyAdmin - Web based MySQL browser written in php
# 
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin


<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

<Directory /usr/share/phpMyAdmin/setup/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       Require ip 127.0.0.1
       Require ip ::1
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

# These directories do not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#
<Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

<Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
</Directory>

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>

请帮我解决这个问题。非常感谢您的帮助。

谢谢!


1
但是我在谈论的是Lamp而不是Wamp,供您参考。 - Megha Sharma
3
目前你只允许本地主机访问 usr/share/phpmyadmin ,我建议为了安全起见,最好只添加IP地址白名单。 - Elliot Fehr
1
可能是phpMyAdmin + CentOS 6.0 - Forbidden的重复问题。 - Rikesh
你在 httpd.conf 文件中添加了吗?你重启了 Apache 服务器吗? - Rikesh
我已将所有的127.0.0.1出现的地方替换为我的IP。不,我并没有将其添加到httpd.conf文件中。如何做到这一点?你能描述一下解决这个问题的步骤吗? - Megha Sharma
显示剩余3条评论
13个回答

121

对于我的CentOS 7服务器,以上的配置都不起作用。经过几个小时的搜索,以下是我使用的方法:

编辑文件phpMyAdmin.conf

sudo nano /etc/httpd/conf.d/phpMyAdmin.conf

将现有的<Directory> ... </Directory>节点替换为以下内容:

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny>
       #Require ip 127.0.0.1
       #Require ip ::1
       Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

2
对于Cent OS 7来说,它是完美的。 - Varun Naharia
9
这不是正确答案!你不想使用“Require all granted”,因为这会允许任何主机访问phpMyAdmin。使用“Require ip 127.0.0.1”的意图是只允许本地主机访问,这是安全的。 - Alvin Bunk
1
我知道大家认为这样是不安全的,我也能理解,但在这种情况下应该采取什么正确的做法呢?很多人使用动态IP地址,它们并不固定。我会暂时更改配置,然后再改回来,这样只有在必要时才会开放,但这似乎不是最佳解决方案。 - potNPan
1
答案甚至不清楚。将其替换在顶部...我们要替换什么? - Olu Adeyemo
嗨。考虑到这个答案的安全影响,我认为最好您解释一下这个替换实际上会产生什么改变,以及这些改变会产生什么影响。 - mwfearnley
显示剩余2条评论

60

我在CENTOS7上进行了全新安装,尝试了上述方法(编辑phpMyAdmin.conf并添加Require all granted),但仍然无法正常工作。这是解决方案:安装mod_php模块:

$ sudo yum install php

然后重新启动httpd:

$ sudo systemctl restart httpd

然后,看哪!


在我看来,Ubuntu 处理这个安装要好得多...但是嘿,这就是生活。 - FreeSoftwareServers
1
对我来说是正确的答案。我的机器上没有安装php或httpd。先安装了phpmyadmin,然后安装了httpd,最后安装了php,现在它可以工作了! - Erwan
1
不错的方向。首先必须确保已安装了PHP。 - user2720864
3
PHPMyAdmin没有将PHP作为其依赖项之一,这有点荒谬。 - Timothy Pulliam
1
我安装了mod_php:yum -y install mod_php 并重启了Apache。它正常工作。 - Ngoc Nam
这对我有用,我正在使用Centos 7 - Santosh Garole

44

您需要按照以下步骤进行:

找到读取以下内容的行

Require ip 127.0.0.1

使用您的工作站IP地址替换:

Require ip 10.1.3.53

再次找到以下行:

Allow from 127.0.0.1

替换为以下内容:

Allow from 10.1.3.53

在整个文件中找到deny from all并将其注释掉。

保存并关闭文件。重启Apache httpd服务器

# service httpd restart

编辑:由于这是被选中的答案并且获得了最佳可见性……请确保已安装PHP,否则您将得到相同的Forbidden错误。


我已经这样做并且运行良好,但我需要允许多个IP地址,我该怎么做?或者更好的是,如何允许公共访问? - rafaelphp
您可以像这样指定IP范围:Require ip 192.168,不要在<RequireAny>块内包含Allow from。文档链接在此:link - jott19
3
这是正确的答案。如果有人想知道,该文件位于此处 - /etc/httpd/conf.d/phpMyAdmin.conf - Testing123
谢谢您发布实际的安全答案! - Petro
1
既然你的回答被选中了,能否在最后加上“还应该安装PHP”?否则会出现相同的“Forbidden”错误,这并不直观。 - adrianTNT
显示剩余2条评论

8

允许所有人访问:

#Require ip 127.0.0.1
#Require ip ::1
Require all granted

@DaemonOfTheWest,这是做什么的? - jds
2
如果有人找出了有效的用户名/密码组合,他们就可以访问您的数据库 - 这将非常糟糕 - 尤其是如果您忘记运行/usr/bin/mysql_secure_installation。 - webaholik
如果您的设置需要,请执行此操作。例如,为多个需要通过互联网或内部网络访问phpmyadmin的用户安装它...并通过其他方式保护您的安装。看到有人说“永远不要这样做”真是令人震惊。他们似乎不知道phpmyadmin的开发目的。 - unity100

5

编辑文件:sudo nano /etc/httpd/conf.d/phpMyAdmin.conf,并将以下内容替换为您的内容:

<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
     # Apache 2.4
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
   </IfModule>
</Directory>

重启Apache: service httpd restart

(phpMyAdmin v4.0.10.8)


尝试了您的解决方案,但出现了“未找到”的错误。服务器上未找到所请求的URL /phpMyAdmin。 - Ashish Karpe
然后添加:Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin.....现在出现:Forbidden您没有权限访问此服务器上的/phpMyAdmin。 - Ashish Karpe
很抱歉它对你没用。这是一个2.5年前的答案。但是为了尝试调试,请确保/usr/share/phpMyAdmin/存在或更改配置中的路径。 - emotality
ls -lthr /usr/share/phpMyAdmin/ 总计 924K -rw-r--r-- 1 root root 1.2K Mar 29 2017 webapp.php -rw-r--r-- 1 root root 3.5K Mar 29 2017 view_operations.php -rw-r--r-- 1 root root 7.0K Mar 29 2017 view_create.php - Ashish Karpe

4

首先编辑文件/etc/httpd/conf.d/phpMyAdmin.conf,并在目录设置中添加附加行:

<Directory /usr/share/phpMyAdmin/>
order deny,allow
deny from all
allow from 127.0.0.1
allow from 192.168.1.0/15
</Directory>

如果您想允许所有人访问,则只需将其更改为:
<Directory /usr/share/phpMyAdmin/>
order allow,deny
allow from all
</Directory>

在文件的所有部分中允许。

重新启动(service httpd restart)即可生效。

经过两天的严格研究,我在这里找到了答案(请点击此处),这对我非常有效。


我尝试做这件事,但不起作用,无法访问phpmyadmin,仍然显示禁止页面。 - rafaelphp
将两行中的“allow from”更改为“必需IP”,删除顺序和拒绝的两行,然后它就可以工作了。 - Hung Tran

3
得票率最高的答案的问题在于它没有解释解决方案的推理。
对于 Require ip 127.0.0.1 这行,您应该添加计划从浏览器访问phpMyAdmin的主机的IP地址。例如 Require ip 192.168.0.100 。 Require ip 127.0.0.1 允许本地主机访问phpMyAdmin。
更改后请重新启动apache(httpd)。我建议在本地主机上进行测试,或者使用诸如curl之类的命令行工具来验证http GET是否有效,并且没有其他配置问题。

2

在Centos 7上安装php时,ModSecurity包已经默认安装并启用,这会阻止对phpMyAdmin的访问。在phpMyAdmin.conf文件末尾,您应该找到以下内容:

Original Answer: 最初的回答:

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc.  This may break your mod_security implementation.
#
#<IfModule mod_security.c>
#    <Directory /usr/share/phpMyAdmin/>
#        SecRuleInheritance Off
#    </Directory>
#</IfModule>

"最初的回答"可以解决这个问题。通过添加

语句,您可以得到答案。

    SecRuleEngine Off

在块“目录/ usr/share/phpMyAdmin/”中,您可以解决对phpmyadmin的“拒绝访问”,但这可能会创建安全问题。最初的回答:在“/usr/share/phpMyAdmin/”目录下,您可以解决phpmyadmin的“访问被拒绝”错误,但这可能会引起安全问题。

2

查找您的IP地址,并将127.0.0.1替换为您从上面链接获取的工作站IP地址。

. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .
Require ip your_workstation_IP_address
. . .
Allow from your_workstation_IP_address
. . .

在最后,不要忘记重新启动服务器。
sudo systemctl restart httpd.service

1
您可以直接打开phpmyadmin.conf文件,将"deny from all"改为"allow from all"即可。 这对我很有效,希望对您也有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接