29

我听说任何知道我的 MySQL 用户名和密码的人都可以访问它,即使它只收听localhost

假设我的信息如下:

USER: root
PASS: 123456
Host: LOCALHOST (only)

那里的任何人(本地)怎么可能访问它?

4

4 回答 4

52

如果您将远程主机的访问限制为您的用户名和密码,那么某人将无法从外部访问数据库。

您还可以将防火墙配置为仅允许从 localhost 机器到 3306(MySQL 默认端口)的流量。

更新

要设置您的用户,以便他们只能通过 LOCALHOST 访问,请使用:

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';

此外,将您的 MySQL 服务器绑定到本地地址。您可以通过编辑以下[mysqld]部分来做到这一点my.cnf

[mysqld]
bind-address = 127.0.0.1
于 2012-11-03T11:18:56.160 回答
5

这是我偶然发现的一个较老的问题,但如果 Darkeden 运行了 phpMyAdmin 或类似的运行,任何人都可以使用有效的 MySQL 凭据登录。

如果它被泄露,那么除了限制连接外,还要更改所有密码。

于 2015-01-10T03:30:33.470 回答
4

您可以在防火墙或 MySQL 本身中阻止对 MySQL 的直接访问,但最有可能被黑客入侵的方式是通过不安全的 Web 应用程序 - 在这种情况下,攻击者很可能能够读取您的数据库登录名并从服务器。

因此,请确保您的应用程序安全 - 保持一切更新,不允许文件上传,如果您有多个帐户,请使用 suPHP 等。

如果您限制您的 mysql 应用程序,请按照以下步骤操作:

1.您可以只阻止端口 3306。如果站点在同一台服务器上,那么它仍然可以使用 localhost 作为主机名访问数据库。

2.只需将“bind-address = 127.0.0.1”添加到他们的 my.cnf 文件的“[mysqld]”部分,以限制仅访问本地主机。

大多数人使用这种类型的限制。

于 2012-11-03T11:41:14.627 回答
3

我没有看到回答他(调整后的)问题的答案 - 他已将其锁定到 localhost 并且攻击者仍在进入。

如果您确实将其限制为本地主机(使用 netstat -an | egrep 3306 检查它正在侦听 127.0.0.1 而不是 0.0.0.0), 那么访问它的唯一方法是从该本地主机发起连接。

初步采取的步骤:

  1. 可能从头开始重建替换系统并在公开访问之前对其进行加固(具有可重复的配方,例如使用 ansible 会有所帮助,因为您可能需要经过几次迭代才能了解他是如何进入的)与信誉良好的安全扫描程序一起检查您的内容明显的漏洞是,
  2. 从安全专家那里获得帮助(取决于您是否想花费 $ 或时间和挫折来修复)
  3. 应用安全补丁,
  4. 删除不需要的服务,
  5. 将数据库访问限制为仅对需要它的程序的访问,
  6. 重做所有密码,
  7. 检查已安装的根工具包和其他病毒,
  8. 如果在您自己的办公室,请保护您的服务器并培训员工处理社会工程,
  9. 使用一个服务来监控和过滤通过的请求并拒绝直接访问(例如,使用 cloudflare 作为一个廉价的起点)
  10. 检查用于访问服务器的所有机器上的键盘记录器(物理和软件以及其他病毒),
  11. 检查在访问服务器时记录击键的物理方式(例如 atm 中使用的网络摄像头样式),更奇特的包括声音(https://en.wikipedia.org/wiki/Acoustic_cryptanalysis),使用附近的 wifi 接入点打字(例如https://www.schneier.com/blog/archives/2016/08/keystroke_recog.html
  12. 添加审计跟踪并监控数据库活动以了解他是如何通过的,但至少您需要先进行所有明显的保护,否则他只会从一个安全漏洞跳到另一个安全漏洞

他也可以通过使用:

  1. 通过您正在运行的某个程序(例如 Web 服务器)进行访问,该程序可从外部访问,并且有一个安全漏洞,允许他通过其现有的数据库连接运行任意 sql 命令 - 请参阅https://www.w3schools.com/sql/sql_injection .asp

  2. 欺骗他可以从外部访问的某些程序,以代理他到 localhost:3306 的连接(例如,通过机器上配置错误的网络防火墙)

  3. 欺骗某些程序运行本地程序(bash.mysql 等),然后从那里获得对数据库的访问权限 - 缓冲区溢出和其他特制数据是运行任意代码的常见问题

  4. 中间人攻击具有合法访问权限的连接

  5. 自动或手动处理来自外部的数据的程序中的错误,例如电子邮件,使用脚本处理处理 postscript/pdf/任何文档 - 即使查看文本文件也可能很危险 - 请参阅https://www.proteansec.com/linux /blast-past-executing-code-terminal-emulators-via-escape-sequences/

  6. 社会工程是一种让人们为您提供访问权限的方法

  7. 设法将硬件设备连接到可以访问的计算机上(有多少人会拿起一个躺在工作停车场的“记忆棒”并检查它而不是“可编程键盘”,并且所有计算机都信任键盘!)

  8. 然后还有更多我不知道的所有其他类型的方法,但是所涉及的方法共享...

请记住,您需要有实际的安全性,我认为 xkcd 说得恰到好处:https ://xkcd.com/538/

于 2017-10-03T18:27:02.793 回答