为什么拥有弱的mysql用户密码会很糟糕?


23

向我提出了一种论调:“您不需要强壮的mysql用户密码,因为要使用它,他们已经可以访问您的服务器了。” 我们正在谈论的是4位数的密码,这是实时商业网站上的标准英语词典单词。

在不影响我自己的知识和经验的情况下,我想向他们展示一些来自不感兴趣的第三者的回复。任何人都喜欢在这个钟声上鸣叫吗?编程/实际答案将不胜感激。


7
听起来像是这些root:root登录之一。

3
四位数密码?喜欢1337吗?
Gumbo 2010年

Answers:


39

提出这个论点的人似乎都在说:“一旦有人将脚踩进门,您最好也给他们完全的访问权限”。按照这种逻辑,防火墙消除了内部网络上所有密码的需求。

强大的密码是限制网络入侵所造成损害的第一步。没有理由仅仅因为网络的一小部分遭到破坏而屈服于失败。


13
“深度防御”是当今的座右铭。
Scott Pack 2010年

3
只需注意,一旦他们访问了您的文件系统,便可以访问您的密码存储在其中的PHP文件或配置文件,除非您为此设置了一些额外的安全性,这通常在共享主机上很难或不可能。
Lotus Notes 2010年

2
@Lotus假设PHP和MySQL服务器是同一台机器。
meagar 2010年

2
@Lotus注意:无论如何,您都不应在应用程序中使用root用户。设计良好的应用程序仅允许必要的访问。在大多数情况下,这包括对数据的访问,但并不总是对所有数据的访问,在某些情况下,它甚至可能是只读的。
bradlis7 2010年

1
@Lotus注释:许多共享主机都使用suPHP,该suPHP提供chmod-ing 660敏感的PHP文件。
webbiedave 2010年

14

确实可以追溯到“ 深入防御 ” 的想法,因此至少一个强密码可以使它们的运行速度变慢,以便您可以发现并阻止它们。我喜欢这样一个类比:为一个封闭式社区使用一把钥匙,而不是每所房子的门上都有一把钥匙。


我正在等待有人想出钥匙/门类比:|
meagar 2010年

但是,您房子中每扇门的另一把钥匙都可能落水了。您在哪里划界线?

4
@丹:但是在安全的设施中,您会希望每扇门都有不同的钥匙,对吗?在单户住宅中,没有-您希望所有的锁都使用相同的钥匙。但是在一个共享房屋中(例如与室友一起),这取决于家庭观念:要么是开锁的门(也许所有门都使用相同的钥匙),要么是每个室友使用不同的钥匙。
wallyk 2010年

5
锁和其他安全装置主要用于业余小偷,或仅用于阻止专业人员。另一个威慑力是在房子周围提供充足的照明,并避免常规的例行日程安排使您一整天在哪里和做什么都很明显。如果您长时间不在,切勿与陌生人聊天以谈论假期计划,并提醒当地警察。始终尝试使其看起来好像有人在家。另外,要……等等,又是什么问题?
Stephen Watkins 2010年

6

这很大程度上取决于您的MySQL服务器的设置方式。如果它仅接受本地(127.0.0.1)ip以外的请求,则确实使其更加安全。

在允许远程IP的情况下,这变得更大了。

除此之外,在入侵时具有强大的安全性总是很好的-最好让他们尽可能少地走开。


6

会计中的零用钱箱有锁吗?如果是这样,为什么?建筑物没有人身安全吗?


5

您不需要强壮的mysql用户密码,因为要使用它,他们已经可以访问您的服务器

这是不正确的,因为mysql也可以在跨网络的客户端-服务器环境中使用,并且默认情况下,您唯一需要做的就是通过用户/密码访问数据库(关闭,打开3306端口,并公开显示服务器) )。


5

确实可以是另一种方式:如果他们可以访问mysql,则他们可以访问服务器操作系统本身。

  1. MySQL LOAD_FILE和SELECT ... INTO OUTFILE查询使mysql用户可以在基础文件系统上读写文件。mysql用户也可以访问的任何文件(您的MySQL是否以root用户身份运行?)。如果在linux / UNIX下,只需查询SELECT LOAD_FILE('/ etc / passwd')并看到它们咧嘴笑。如果mysqld以root身份运行,则可以尝试SELECT LOAD_FILE('/ etc / shadow')并观看sysadmin的声音。
  2. 在Linux下,很多时候mysql用户“ root”与服务器的“ mysql”用户(运行mysqld的用户)具有相同的密码。然后,如果此密码是微不足道的(或可通过medusa / hydra等自动工具找到),则只需SSH / telnet直接连接到数据库服务器即可。

4

如果有人获得了对您服务器的root访问权限,那么他们将不需要任何MySQL密码。但是,如果他们只能以非root用户和非Web用户身份在您的服务器上执行应用程序,那么强大的MySQL密码仍然可以保存您的数据。但是,是的,大多数黑客都来自网络,这意味着黑客可以访问您的网络帐户,因此可以从PHP文件中提取数据库密码。

所有这些都假设您的MySQL服务器不接受来自localhost以外的任何地方的连接。如果确实如此,则您需要强大的PW。


4

在这里似乎被忽略的事情是,您是否信任受信任网络上的用户?

坦率地说,我没有,因为我知道我刚开始从事IT工作时的情况。我会在我无权访问的地方戳戳记,坦率地说,一个弱的MySQL密码会让我很高兴,因为我会碰运气,进去之后,可能会遭受重创(偶然地,当然)。

如果有人使用社会工程学进入您受信任的网络怎么办?那你怎么办 如果它们位于防火墙后面的计算机上,那么您的坚如磐石的防火墙安全性将被破坏,它们将直接进入计算机。

强大的密码非常容易执行,并且有许多密码管理工具可以使密码安全性变得容易,因此,没有任何不这样做的借口。


问题是,您不应该在MySQL中允许远程连接,或者如果需要,则将localhost/ 指定127.0.0.1为主机。这样,没有人可以访问外部数据库(甚至是同一网络中的数据库)。
Chazy Chaz

2

嗯 如果您的服务器是IP锁定的,并且您的用户只能在不关心该信息的一组表上使用SELECT,那么这并不是什么大问题。

另一方面,我通过敲打键盘一分钟来设置MySQL密码,然后将产生的乱码复制粘贴到受保护的文件中,每当我需要登录时便在代码中引用该文件。这就是它的工作方式。

为什么这么简单?如果将密码附加到有限的本地帐户(应全部密码),那么为什么要输入密码?如果不是,则应输入密码,密码的强度与要保护的数据的值有关。


2

mySQLs帐户/访问信息存储在与实际数据库不同的文件中。因此,您可以简单地将其他文件拖放到其位置。使用mySQL,如果他们拥有对文件系统相关部分的写访问权限,游戏就结束了。


2

因为需求改变了...

因此,今天仅限于仅接受与本地计算机的MySQL连接的服务器可能会在明天开放,以便可以使用外部工具来管理数据库。进行此设置的人员可能不知道使用的密码非常弱。

如果您的用户由于不得不记住一个好的,强的(例如,长而随机的)密码而感到不便,请考虑将其设置为非常强,然后将其存储在.my.cnf-比使用他们必须键入的弱密码更加方便。当然,这也涉及安全性,但是您将不得不将密码存储在某个位置,例如访问密码的应用程序,因此您已经在保护密码的副本了。

但也请阅读@meagar所说的内容。


1

他们已经可以访问的前提是不正确的。但是,如果他们确实具有访问权限,并且拥有非特权帐户,他们仍然可以轻松地破解mysql密码。

另外,如果服务器是实时生产服务器,则您正在向互联网上宣传自己。这意味着在某个时候,有人对该端口(包括端口和用户帐户)的服务器(包括mysql)进行蛮力攻击。

如果您关心数据,则基本步骤是为数据库使用与root用户不同的root密码。其他人指出,您还应该对用户和程序具有最低权限。

在相当便宜的计算机上,只需几分钟即可破解4个字符的密码。

我可能只是在重复别人所说的话,但是给经理人的弹药越多越好。


1

之前,许多现实生活中的原因都已被发布,因此我将添加“哲学”一个。使用强密码并采取预防措施来加强安全性是一种工作理念。一种思维方式。

现在使用弱密码,因为您使用的是mysql,它仅在127.0.0.1上运行,并且只有root用户可以访问它,这表明您不愿意考虑。如果有一天您需要授予对mysql的网络访问权限,会发生什么情况。您会记得涵盖您剩下的所有安全整体吗?

一个好的管理员会把最糟糕的情况放在首位。


1

这取决于用户拥有什么权限,您应该始终将其锁定在多个级别上。同样,它取决于您存储在数据库中的数据。还要假设,MySQL中存在一个漏洞,该漏洞使他们可以接管整个数据库,但他们只需要登录任何用户帐户即可。如果您的密码很安全,则此漏洞将变为静音。但这确实取决于您的具体情况。


如果MySQL服务器受到威胁,则用户名和密码将无用。数据库文件未加密。应用程序的MySQL用户应将localhost / 127.0.0.1作为主机,以便不能远程使用它们或禁用远程连接。
Chazy Chaz

1

在mysql中模拟其他人非常容易。给定没有密码(安全性最弱)的用户ID,请使用mysql -u userid。如果有密码,则要困难一些,但是密码较弱则很容易。如果root没有密码,我可以以身份访问root mysql -u root。然后,我可以执行根目录可以在数据库内执行的任何操作。

在安全性中使用主机规范也是一个好主意,尤其是在可以进行远程访问或可以进行远程访问的情况下。

文件中的密码可以并且应该通过权限来保护。通过root用户或密码文件的所有者进行访问是微不足道的。如果可能,应使用磁盘上密码的加密。这使得访问起来稍微困难一些,但仍然很脆弱。


0

好吧,如果您不是自己托管MySQL数据库,而是在托管服务上并且有人可以访问您服务器的IP地址,则用户名和密码是您的最后一道防线。拥有安全的用户名/密码总是好的。


h!如果有人可以访问服务器,那么他们可以从PHP文件中读取用户名/密码...请更新或删除此答案。
Chazy Chaz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.