我注意到我的网站有一些奇怪的请求试图找到phpmyadmin,比如
/phpmyadmin/
/pma/
等
现在我已经通过apt在Ubuntu上安装了PMA,并希望通过与/ phpmyadmin /不同的webaddress访问它。我该怎么做才能改变它?
由于
更新
对于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
答案 0 :(得分:81)
最大的威胁是攻击者可以利用诸如此类的漏洞;目录遍历,或使用SQL注入来调用load_file()
来读取配置文件中的纯文本用户名/密码,然后使用phpmyadmin或通过tcp端口3306进行登录。作为测试者,我使用此攻击模式来破坏系统
这是一个锁定phpmyadmin的好方法:
grant
或file_priv
的自定义帐户。 file_priv
权限。 file_priv
是MySQL中最危险的权限之一,因为它允许攻击者读取文件或上传后门。 Order deny,allow Deny from all allow from 199.166.210.1
没有可预测的文件位置,例如:http://127.0.0.1/phpmyadmin
。像Nessus / Nikto / Acunetix / w3af这样的漏洞扫描程序会扫描这个。
防火墙关闭tcp端口3306,以便攻击者无法访问它。
答案 1 :(得分:12)
我对phpMyAdmin的一个担忧是,默认情况下,所有MySQL用户都可以访问数据库。如果DB的root密码被泄露,有人可能会破坏数据库的破坏。我想通过限制哪个MySQL用户可以登录phpMyAdmin来找到避免这种情况的方法。
我发现在PhpMyAdmin中使用AllowDeny配置非常有用。 http://wiki.phpmyadmin.net/pma/Config#AllowDeny_.28rules.29
AllowDeny允许您以类似于Apache的方式配置对phpMyAdmin的访问。如果将“订单”设置为显式,则仅授予对“规则”部分中定义的用户的访问权限。在规则中,您限制可以访问的MySql用户使用phpMyAdmin。
$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'
答案 2 :(得分:6)
在较新版本的phpMyAdmin中,可以在phpMyAdmin的config.inc.php文件中设置用户名+ ip-addresses的访问权限。这是一种更好,更强大的限制访问的方法(通过硬编码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 -
);
来源:How to Install and Secure phpMyAdmin on localhost for Windows
这为您提供了比Apache的URL权限或.htaccess文件可以在MySQL用户名级别提供的更细粒度的访问限制。
确保您登录的用户将其MySQL Host:
字段设置为127.0.0.1
或::1
,因为phpMyAdmin和MySQL位于同一系统上。
答案 3 :(得分:4)
最有可能的是,您的网络服务器上的某个地方将是这样的Alias指令;
Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.1.3.1/"
在我的wampserver / localhost设置中,它位于c:/wamp/alias/phpmyadmin.conf。
只需更改别名指令就可以了。
答案 4 :(得分:4)
另一种解决方案是使用配置文件而不进行任何设置。第一次你可能需要包含你的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”
-EDIT:一天好的密码实际上就像make no grammatical sense but you can remember because they funny这样的单词。或者使用keepass生成强大的randoms并且可以轻松访问它们
答案 5 :(得分:2)
如果您正在运行Linux服务器:
对于家庭服务器来说,这个系统非常安全/方便 - 通常所有端口都被默认阻止 - 。您只需转发SSH端口(不要使用数字22)。
如果您喜欢Microsoft终端服务器,您甚至可以为您的计算机设置SSH隧道,并通过它安全地连接到您的Web服务器。
使用 ssh tunneling ,您甚至可以将远程服务器的3306端口转发到本地端口,并使用本地phpMyAdmin或MySQL Workbench进行连接。
我知道这个选项太过分了,但与访问私钥一样安全。
答案 6 :(得分:1)
最简单的方法是编辑Web服务器,很可能是Apache2安装,配置并给phpmyadmin一个不同的名称。
第二种方法是限制可以访问phpmyadmin的IP地址(例如,只有本地局域网或本地域名)。
答案 7 :(得分:1)
保护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计算机+ PuTTY连接并将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.
答案 8 :(得分:0)
您可以使用以下命令:
$ 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
<强>解释强>
确保在通过iptables drop !!管道之前未列出您的IP
这将首先找到$ path_to_access.log中包含phpmyadmin的所有行,
然后从行的开头grep out ip address
然后对它们进行排序和独特,
然后添加规则以在iptables中删除它们
同样,只需在echo %
末尾编辑而不是iptables命令,以确保您的IP不在那里。不要无意中禁止您访问服务器!
<强>限制强>
如果你在mac或任何没有grep -P的系统上,你可能需要更改命令的grep部分。我不确定所有系统是否都以xargs开头,因此可能也需要安装。无论如何,如果你做了很多重击,它是非常有用的。