我正在尝试将我的服务器 phpmyadmin 配置为仅从本地主机访问,而不是从远程访问。以下是服务器上的配置
/etc/phpmyadmin/apache.conf
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Options FollowSymLinks
DirectoryIndex index.php
</Directory>
所以,当我从远程访问 phpmyadmin 时,我收到 403 禁止,这很好,但是当我从本地主机(即使用远程桌面的服务器)访问 phpmyadmin 时,我仍然收到 403,而我认为这应该允许从本地主机访问 phpmyadmin 。我在这里缺少什么吗?
谢谢你
我的猜测是您使用的是 Apache 2.4.x。访问控制的语法在 2.2 和 2.4 之间发生了变化。您使用的
Order
和 Deny
语法适用于 Apache 2.2,但不适用于 2.4。在 2.4 中,它会是这样的:
<Directory /usr/share/phpmyadmin>
Require ip 127.0.0.1
Options FollowSymLinks
DirectoryIndex index.php
</Directory>
你们每个人都犯了一个大错误。
PhpMyAdmin 不是服务器,它只是一个以 PHP 脚本编写并由某个 HTTP 服务器(在本例中为 Apache)提供服务的客户端。
您想要的(编辑)和其他人建议做的是尝试禁用 HTTP 服务器的
phpmyadmin
vhost 的访问,但仍然可以从终端的 使用任何其他客户端登录到基地mysql
命令,用于 GUI 客户端,例如 MySQL Workbench 或 IDE 内置的数据库客户端。逻辑在哪里?当然,您可以同时使用这两种技术(HTTP 安全和 MySQL 安全),但是如果没有第二种技术,您的数据库仍然不安全。
PhpMyAdmin 只是一个客户端! 它甚至有自己的访问控制机制,但如果有人使用任何其他客户端(如上所述),你的努力将绝对毫无价值)。
解决方案:localhost
访问权限的专用 MySQL 帐户(我可以睡觉了,在撰写本文时,它是/曾经是
%
,这意味着全局),然后 MySQL 将控制所有传入连接检查它们是来自本地计算机还是来自世界各地。只是不要忘记删除具有全局访问权限的帐户(
%
)并在所有更改后刷新权限。另外,我总是建议创建一个用户,并拥有一个专用数据库的所有权限(ofc,除了
root
)。这样,即使您只是管理多个数据库的管理员,也可以最大限度地减少其他数据库意外更改的风险。 (专业提示,好的密码管理器将成为您友好的幽灵守护者)。我建议用谷歌搜索它并获得有关该主题的整体知识,因为它对于数据库安全非常重要,但是如果您从找到的第一个答案中实现简单的解决方案,那么这也足够了。对 MySQL 使用
localhost
限制,最好在防火墙端设置阻止
3306
端口,是使用本地安装的 PhpMyAdminscript 100% 安全地访问数据的完美解决方案(如果可能的话)。 下面引用
GRANT ALL PRIVILEGES ON *.* TO db_user @'localhost' IDENTIFIED BY 'db_passwd';
GRANT ALL PRIVILEGES ON *.* TO db_user @'127.0.0.1' IDENTIFIED BY 'db_passwd';
[mysqld]
bind-address = 127.0.0.1
附注您甚至不需要为此编写 SQL 命令,您可以使用... PhpMyAdmin 为每个用户更改它。
<Directory /usr/share/phpmyadmin>
Require local
#......otherthings (also, only copy the line Require local)