如何保护phpMyAdmin的如何保护phpMyAdmin的(How to secure phpMy

2019-05-12 18:03发布

我注意到,这里有奇特的请求到我的网站试图找到phpMyAdmin的,像

/phpmyadmin/
/pma/

等等

现在我已经通过apt安装在Ubuntu PMA并希望通过webaddress从/ 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

Answer 1:

最大的威胁是,攻击者可以利用漏洞等; 目录遍历,或使用SQL注入来调用load_file()来读取配置文件中的纯文本的用户名/密码,然后登录使用phpMyAdmin或通过TCP端口3306作为pentester我已经使用这个攻击模式来破坏系统。

下面是锁定的phpmyadmin一个伟大的方式:

  • 不允许远程root登录! 相反的phpmyadmin可以被配置为使用“cookie认证”来限制哪些用户可以访问系统。 如果你需要一些root权限,创建一个可以添加/删除/创建,但不具有自定义帐户grantfile_priv
  • 删除file_priv从每一个帐户权限。 file_priv是在MySQL中最危险的特权之一,因为它允许攻击者读取文件或上传了一个后门。
  • 白名单的IP地址谁有权访问phpMyAdmin界面。 下面是一个例子的.htaccess reulset:
 Order deny,allow Deny from all allow from 199.166.210.1 
  • 没有一个可预见的文件位置,如: http://127.0.0.1/phpmyadmin 。 漏洞扫描器Nessus的一样/日高/的Acunetix / w3af将扫描此。

  • 防火墙关闭TCP端口3306,以便它可以不被攻击者访问。

  • 使用HTTPS,否则数据和密码可被泄露给攻击者。 如果你不想掏钱了$ 30一个证书,然后使用自签名。 你会接受它一次,即使是由于改为MITM会通知您。


Answer 2:

我的一个担忧与phpMyAdmin是在默认情况下,所有的MySQL用户可以访问数据库。 如果数据库的超级用户口令被泄露,有人可以在数据库造成严重破坏。 我想找到一种方法,以避免通过限制其MySQL的用户可以登录到phpMyAdmin。

我已经使用在phpMyAdmin AllowDeny配置是非常有用的发现。 http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29

AllowDeny允许您配置类似的方式将Apache访问phpMyAdmin。 如果设置了“订单”,以明确的,它只会授予访问权限“规则”部分定义的用户。 在规则部分,您限制谁可以访问使用phpMyAdmin的MySQL用户。

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

现在你已经限制访问用户名为PMA-用户在MySQL中,你可以授予有限的权限给该用户。

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


Answer 3:

在为用户名phpMyAdmin的访问权限较新版本+ IP的地址可以phpMyAdmin的的config.inc.php文件里进行设置。 这是限制访问(通过硬编码URL和IP地址到Apache的httpd.conf)的更好和更可靠的方法。

下面是如何切换到白名单的所有用户(此列表外的任何人将被允许访问),以及如何限制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 -    
    );

来源: 如何安装和安全phpMyAdmin的本地主机上的Windows

这给你比Apache的网址权限更细粒度的访问限制或.htaccess文件可以提供,在MySQL用户名的水平。

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



Answer 4:

最有可能的,在某个地方你的网络服务器会是这样一个Alias指令;

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

在我wampserver /本地主机的设置,它是在C:/wamp/alias/phpmyadmin.conf。

只需更改别名指令,你应该是好去。



Answer 5:

另一种解决方案是使用配置文件,无需任何设置。 你可能有第一次,包括你的MySQL root登录/密码,所以它可以安装所有的东西,但随后将其删除。

$ CFG [ '服务器'] [$ i]于[ 'AUTH_TYPE'] = '饼干';

$ CFG [ '服务器'] [$ i]于[ '主机'] = '本地主机';

$ CFG [ '服务器'] [$ i]于[ 'connect_type'] = 'TCP';

$ CFG [ '服务器'] [$ i]于[ '压缩'] = FALSE;

$ CFG [ '服务器'] [$ I] [ '延伸'] = 'MySQL的';

离开这样说,这没有任何的Apache / lighhtpd别名只会给你介绍一个登录屏幕。

您可以登录同根,但建议创建其他用户,并只允许本地访问根。 还记得即使短,但具有资本和特殊字符的数量来使用字符串密码。 例如!34sy2rmbr! 又名“易记2”

-编辑:一个好的密码现在是一个天其实是一样的东西的话是毫无语法意义,但你能记住,因为他们搞笑 。 或者使用KeePass的生成强随机量的很容易接触到他们



Answer 6:

如果您运行的是Linux服务器:

  • 通过使用SSH,你可以禁止用户名/密码登录电子和只接受在authorized_keys文件的公钥
  • 使用腻子连接到您的服务器,并打开一个远程终端
  • 转发X11和本地主机带来的firefox / iceweasel到桌面(在Windows,你需要安装的Xming软件)
  • 现在你确保你的phpMyAdmin的throught SSH

该系统是相当安全/得心应手 - 通常以阻止默认 - 所有端口homeservers。 你只需要转发SSH端口(不使用编号为22)。

如果你喜欢Microsoft终端服务器,你甚至可以设置一个SSH隧道到您的计算机安全地连接到你的Web服务器throught它。

随着SSH隧道 ,你甚至可以把您的远程服务器到本地端口的端口3306,并使用本地phpMyAdmin的或MySQL工作台连接。

据我所知,这个选项是矫枉过正,但作为您的私人密钥的访问安全。



Answer 7:

最简单的方法是编辑的web服务器,最有可能的一个Apache2的安装,配置和给phpmyadmin的一个不同的名称。

第二种方法将是限制的IP地址从何处phpmyadmin的可被访问(例如,仅本地LAN或本地主机)。



Answer 8:

确保phpMyAdmin的最好的办法是所有这4个组合:

1. Change phpMyAdmin URL
2. Restrict access to localhost only.
3. Connect through SSH and tunnel connection to a local port on your computer
4. Setup SSL to already encrypted SSH connection. (x2 security)

这里是如何做到这一切有:Ubuntu的16.4 + Apache的安装2 Windows电脑+腻子连接和隧道SSH连接到本地端口:

# Secure Web Serving of phpMyAdmin (change URL of phpMyAdmin):

    sudo nano /etc/apache2/conf-available/phpmyadmin.conf
            /etc/phpmyadmin/apache.conf
        Change: phpmyadmin URL by this line:
            Alias /newphpmyadminname /usr/share/phpmyadmin
        Add: AllowOverride All
            <Directory /usr/share/phpmyadmin>
                Options FollowSymLinks
                DirectoryIndex index.php
                AllowOverride Limit
                ...
        sudo systemctl restart apache2
        sudo nano /usr/share/phpmyadmin/.htaccess
            deny from all
            allow from 127.0.0.1

        alias phpmyadmin="sudo nano /usr/share/phpmyadmin/.htaccess"
        alias myip="echo ${SSH_CONNECTION%% *}"

# Secure Web Access to phpMyAdmin:

        Make sure pma.yourdomain.com is added to Let's Encrypt SSL configuration:
            https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

        PuTTY => Source Port (local): <local_free_port> - Destination: 127.0.0.1:443 (OR localhost:443) - Local, Auto - Add

        C:\Windows\System32\drivers\etc
            Notepad - Run As Administrator - open: hosts
                127.0.0.1 pma.yourdomain.com

        https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/ (HTTPS OK, SSL VPN OK)
        https://localhost:<local_free_port>/newphpmyadminname/ (HTTPS ERROR, SSL VPN OK)

        # Check to make sure you are on SSH Tunnel
            1. Windows - CMD:
                ping pma.yourdomain.com
                ping www.yourdomain.com

                # See PuTTY ports:
                netstat -ano |find /i "listening"

            2. Test live:
                https://pma.yourdomain.com:<local_free_port>/newphpmyadminname/

如果你能做到这一切成功,

you now have your own url path for phpmyadmin,
you denied all access to phpmyadmin except localhost,
you connected to your server with SSH,
you tunneled that connection to a port locally,
you connected to phpmyadmin as if you are on your server,
you have additional SSL conenction (HTTPS) to phpmyadmin in case something leaks or breaks.


Answer 9:

您可以使用下面的命令:

$ grep "phpmyadmin" $path_to_access.log | grep -Po "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | sort | uniq | xargs -I% sudo iptables -A INPUT -s % -j DROP 

说明:

确保您的IP不会通过iptables的下降管道前上市!

这将首先找到$ path_to_access.log是有phpMyAdmin在他们的所有行,

然后从行开始用grep出来的IP地址,

然后排序和独特的他们,

然后添加一个规则,把它们在iptables中

同样,刚刚在编辑echo %在年底,而不是iptables命令,以确保您的IP是不是在那里。 不要无意中禁止与服务器的访问!

限制

您可能需要,如果你在Mac或不使用grep -P任何系统更改命令的grep的一部分。 我不知道如果所有系统与xargs的开始,这样可能需要太安装。 如果你做了很多的bash这是超级有用呢。



文章来源: How to secure phpMyAdmin