当前位置: 首页>>技术教程>>正文


如何保护phpMyAdmin

, , , ,

问题描述

我注意到我的网站上有奇怪的请求,试图找到phpmyadmin,例如

/phpmyadmin/
/pma/

等等

现在,我已经通过apt在Ubuntu上安装了PMA,并希望通过不同于/phpmyadmin /的网址访问它。我该怎么做才能改变它?

谢谢


更新资料

对于Ubuntu 9.10和Apache2,相应的设置位于文件/etc/apache2/conf.d/phpmyadmin.conf中,该文件是指向/etc/phpmyadmin/apache.conf的链接。该文件包含

Alias /phpmyadmin /usr/share/phpmyadmin

如果希望避免不必要的活动,则应将第一个/phpmyadmin更改为其他内容,例如:

Alias /secret /usr/share/phpmyadmin

最佳方法

最大的威胁是攻击者可能利用诸如以下的漏洞:目录遍历,或使用SQL Injection调用load_file()读取配置文件中的纯文本用户名/密码,然后使用phpmyadmin或通过tcp端口3306登录。作为一个pentester,我使用了这种攻击模式来破坏系统。

这是锁定phpmyadmin的好方法:

  • 禁止远程root登录!相反,可以将phpmyadmin配置为使用“Cookie Auth”来限制哪些用户可以访问系统。如果您需要一些root特权,请创建一个可以添加/删除/创建但没有grantfile_priv的自定义帐户。

  • 从每个帐户中删除file_priv权限。 file_priv是MySQL中最危险的特权之一,因为它允许攻击者读取文件或上传后门。

  • 有权访问phpmyadmin界面的白名单IP地址。这是一个.htaccess重新设置示例:

Order deny,allow Deny from all allow from 199.166.210.1 
  • 没有可预测的文件位置,例如:http://127.0.0.1/phpmyadmin。 Nessus /Nikto /Acunetix /w3af等漏洞扫描程序将对此进行扫描。

  • 关闭tcp端口3306的防火墙,以使攻击者无法访问它。

  • 使用HTTPS,否则数据和密码可能会泄露给攻击者。如果您不想花30美元购买证书,请使用self-signed。您将接受一次,即使由于MITM而更改它,也会收到通知。

次佳方法

我对phpMyAdmin的关注之一是,默认情况下,所有MySQL用户都可以访问该数据库。如果数据库的root密码遭到破坏,则有人会破坏数据库。我想找到一种方法,通过限制哪个MySQL用户可以登录phpMyAdmin来避免这种情况。

我发现在PhpMyAdmin中使用AllowDeny配置非常有用。 http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

AllowDeny允许您以与Apache类似的方式配置对phpMyAdmin的访问。如果将’order’设置为显式,它将仅向’rules’部分中定义的用户授予访问权限。在规则部分,您限制可以使用phpMyAdmin访问的MySql用户。

$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit'
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('pma-user from all')

现在,您具有对MySQL中名为pma-user的用户的有限访问权限,可以为该用户授予受限特权。

grant select on db_name.some_table to 'pma-user'@'app-server'

第三种方法

在新版本的phpMyAdmin中,可以在phpMyAdmin的config.inc.php文件中设置对user-names + ip-addresses的访问权限。这是一种限制访问的更好,更强大的方法(通过hard-coding URL和IP地址进入Apache的httpd.conf)。

这是一个完整的示例,说明如何将所有用户切换到white-listing(不允许该列表之外的任何人访问),以及如何将用户root限制为仅本地系统和网络。

$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'deny % from all', // deny everyone by default, then -

    'allow % from 127.0.0.1', // allow all local users
    'allow % from ::1',

    //'allow % from SERVER_ADDRESS', // allow all from server IP

    // allow user:root access from these locations (local network)
    'allow root from localhost',
    'allow root from 127.0.0.1',
    'allow root from 10.0.0.0/8',
    'allow root from 172.16.0.0/12',
    'allow root from 192.168.0.0/16',

    'allow root from ::1',

    // add more usernames and their IP (or IP ranges) here -    
    );

资料来源:How to Install and Secure phpMyAdmin on localhost for Windows

在MySQL用户名级别,这给您的fine-grained访问限制远远超过Apache的URL权限或.htaccess文件可以提供的访问限制。

确保您登录的用户的MySQL Host:字段设置为127.0.0.1::1,因为phpMyAdmin和MySQL在同一系统上。

第四种方法

最有可能的是,您的Web服务器上的某个地方将是这样的Alias指令;

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"

在我的wampserver /localhost设置中,它位于c:/wamp/alias/phpmyadmin.conf中。

只需更改alias指令,就可以了。

第五种方法

另一种解决方案是使用配置文件而不进行任何设置。第一次,您可能必须包含mysql root登录名/密码,以便它可以安装所有内容,然后将其删除。

$cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;

$cfg[‘Servers’][$i][‘host’] = ‘localhost’;

$cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;

$cfg[‘Servers’][$i][‘compress’] = false;

$cfg[‘Servers’][$i][‘extension’] = ‘mysql’;

像这样,不带任何apache /lighhtpd别名,只会向您显示登录屏幕。

您可以使用root用户登录,但建议创建其他用户,并且仅允许root用户进行本地访问。还请记住使用字符串密码,即使该密码很短但要有大写字母和特殊字符的数量。例如!34sy2rmbr!又称“容易记住2”

-编辑:现在好密码实际上就像是make no grammatical sense but you can remember because they funny这样的单词。或者使用keepass生成强大的随机数,并轻松访问它们

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8711.html,未经允许,请勿转载。