为什么通过SSH进行root登录如此糟糕,以至于每个人都建议禁用它?


83

互联网上的每个人都建议禁用通过SSH的 root登录,因为这是一种不好的做法,并且会给系统造成安全漏洞,但是没有人解释为什么会这样做。

启用root登录(尤其是禁用密码登录)有何危险?

从安全的角度来看,如果允许密码认证,那么X符号用户名和Y符号密码或根用户名和X + Y符号密码有什么区别?


2
在大多数系统中拥有root用户本身是不好的事情,更不用说为该用户启用SSH登录了!
苏曼(Suman)2013年

1
对于ehealth-aussie.blogspot.com/2012/01/…,需要通过ssh进行根登录。一切都是妥协。
emory

2
嗯...我们应该把这个问题移到安全性上吗?由于该主题更倾向于安全性,因此* nix系统更是如此。
Braiam

出于行政原因,需要禁用root用户。在商用服务器上,您始终希望按人控制访问。根永远都不是一个人。即使你允许某些用户拥有root权限,你应该迫使他们通过自己的用户登录,然后su -sudo -i使他们的实际登录可以记录。这使得撤消对个人的所有访问变得更加简单,因此,即使他们拥有root密码,也无法对其进行任何操作。
菲利普·库林

Answers:


62

为什么通过SSH进行root攻击很糟糕

有很多僵尸程序试图通过SSH登录到您的计算机。这些机器人的工作方式如下。

他们执行类似的操作ssh root@$IP,然后尝试使用标准密码,例如“ root”或“ password123”。他们会尽其所能,直到找到正确的密码。在全球可访问的服务器上,您可以在日志文件中看到很多日志条目。我可以提高到每分钟20个或更多。

当攻击者有运气(或足够的时间)并找到密码时,他们将具有root用户访问权限,这意味着您很麻烦。

但是,当您禁止root用户通过SSH登录时,僵尸程序需要首先猜测用户名,然后再猜测匹配的密码。因此,可以说合理的密码列表中有N条目,而合理的用户列表中的M条目很大。该机器人具有一组N*M要测试的条目,因此与仅具有一组size的根情况相比,它使该机器人更加困难N

有人会说,这M并不是安全性的真正收获,我同意这只是对安全性的一小部分改进。但是,我更认为这是因为这些小挂锁本身并不安全,但它们阻碍了许多人的便捷使用。当然,这仅在您的计算机没有其他标准用户名(例如tor或apache)时才有效。

不允许使用root的更好原因是root对计算机的损害比标准用户可能造成的损害大得多。因此,如果运气不好,他们找到了您的密码,那么整个系统就会丢失,而使用标准用户帐户,您只能操作该用户的文件(这仍然非常糟糕)。

在评论中提到,普通用户可以使用该权限sudo,如果可以猜到该用户的密码,系统也将完全丢失。

总而言之,我想说攻击者获得哪个用户密码都没有关系。当他们猜出一个密码时,您将不再信任该系统。攻击者可以利用该用户的权限通过执行命令sudo,攻击者还可以利用系统中的漏洞并获得root特权。如果攻击者可以访问您的系统,那么您将不再信任它。

这里要记住的是,系统中允许通过SSH登录的每个用户都是另一个弱点。通过禁用root,可以消除一个明显的弱点。

为什么通过SSH的密码不正确

禁用密码的原因非常简单。

  • 用户选择了错误的密码!

尝试输入密码的整个想法仅在密码可猜测时才起作用。因此,当用户使用密码“ pw123”时,您的系统将变得不安全。人们选择的密码的另一个问题是,他们的密码永远不会真正是随机的,因为那样很难记住。

同样,用户倾向于重用他们的密码,用它登录Facebook或他们的Gmail帐户以及您的服务器。因此,当黑客获得该用户的Facebook帐户密码时,他就可以进入您的服务器。用户很容易通过网络钓鱼将其丢失,否则Facebook服务器可能会被黑客入侵。

但是,当您使用证书登录时,用户不会选择其密码。证书基于从1024位到4096位(〜128-512个字符的密码)的非常长的随机字符串。此外,该证书仅用于登录您的服务器,并且不与任何外部服务一起使用。

链接

http://bsdly.blogspot.de/2013/10/the-hail-mary-cloud-and-lessons-learned.html

本文来自评论,我想给它一个更突出的位置,因为它对尝试通过SSH登录的僵尸网络,它的工作方式,日志文件的外观和怎样制止他们。它是由彼得·汉斯汀(Peter Hansteen)撰写的。


10
好总结。但是ssh私钥也可能被盗。
Faheem Mitha 2013年

16
@Faheem Mitha是的,但被盗却与猜测不同,机器人会这样做。此外,您的私钥仅在您(或硬盘)上,而不在Stack Exchange或Google等第三方手中。
拉斐尔·阿伦斯

2
+1。这个答案实际上可以归结为简单N*M > N。由于大多数* nix主机都有root用户,因此,如果允许root用户直接从远程主机登录,则测试矩阵的大小就是尝试输入的密码数;禁止直接root登录,可能的组合数量乘以您要测试的用户名数量(并且仍然不能保证您将测试有效的用户名!)。
CVn

3
@MichaelKjörling我要补充一点,获取用户名并不难,因为通常用户名不是秘密,我可能会问任何人到达那里。但这有助于抵御Bot和简单尝试。
拉斐尔·阿伦斯

2
@所有人,如果用户名包含X符号,密码Y,则可以尝试# of X length words*种# of Y length words可能的组合。如果用户名是固定的(例如root),但密码的长度是X + Y符号,则# of X+Y length words可能有密码。和# of X+Y length words=# of X length words * # of Y length words
skarap

10

这些可能是为什么不允许直接root登录的一些原因。

  • 蛮力尝试。直接root登录可能会在成功实施暴力攻击后造成更多损失。
  • “无密码” SSH密钥上的配置错误(发生人为错误)可能会使您的计算机暴露于互联网

但这只是冰山一角。您需要配置其他限制和配置,例如:

  • 更改默认端口(22)
  • 强大的密码和密码
  • 禁用基于主机的身份验证
  • 创建允许的用户列表
  • 配置空闲超时
  • 强制SSHv2协议
  • 禁用空密码
  • 使用fail2ban作为衡量暴力的手段
  • 记录一切
  • 配置SSH密钥,并仅信任.ssh / authorized_keys上的公共密钥

5
“直接root登录可能会在成功实施暴力攻击后造成更多损失。” 如果与默认sudo设置相比,则不是。真正的杀手is是当您没有任何可用于任何给定主机的有效用户名的多重效果。
CVn

@MichaelKjörling-是的,确保混乱的sudo可能和PermitRoot一样


1
实际上,更改端口本身在许多情况下都是有害的。而且,无非就是安全。
0xC0000022L15年

+1代表fail2ban,因为暴力攻击不仅与SSH有关,而且与计算机上的其他任何事物有关。出于实际目的,您无需获取任何root或系统权限即可“接管”计算机(访问私有数据,用作文件转储,用于网络钓鱼等)。
Eric Grange

8

没错,root用户名和X + Y符号密码在密码上至少与X符号用户名+ Y符号密码一样安全。实际上,它甚至更安全,因为人们的名字很容易被猜到(机器人可能只是尝试使用john,mike,bill等……和顺便说一句:这就是他们中许多人所做的,而不是尝试使用root)。而且,如果这是有针对性的攻击,那么您尤其不走运,因为如果有人想破坏公司的服务器,那么找出sysadmin的名字(昵称)就不是问题。

并且,一旦攻击者有权访问sysadmin用于ssh登录的帐户(然后使用susudo执行其任务),他就可以使用该程序感染该用户的会话,该程序将在sysadmin键入下一个命令时发送攻击者的根密码。时间。

从安全角度来看,这是(或应该)视为不良做法的任何类型的root登录。“普通”用户登录-> su / sudo链添加了审计跟踪。用简单的英语来说:这使得找出谁做了什么成为可能。

一种特殊情况可能是只有一个人具有root访问权限的情况。在那种情况下,使用额外的“普通”用户不会增加太多价值(至少我从未看到过该价值)。但是无论如何-无论如何,您应该在系统上拥有一个简单的用户(用于非管理任务,运行wget等;-))。


4

启用root登录(尤其是禁用密码登录)有何危险?

攻击者(僵尸程序/僵尸网络/黑客)仅需要猜测密码即可对您的系统进行完全控制(如果您可以访问Internet)。同样,出于相同的原因,所有系统帐户(www-data,proxy等)都不能通过SSH登录。

如果您禁用了密码登录(例如,使用公共密钥),请考虑到谁掌握了私有密钥都可以完全控制您的系统。请参阅下面为什么与用户一起使用公共密钥更好。

从安全的角度来看,如果允许密码认证,那么X符号用户名和Y符号密码或根用户名和X + Y符号密码有什么区别?

额外的用户名可以增加一层安全性,因为:a)攻击者应该知道密码对,用户名和密码;b)万一攻击者破坏了您的系统,它将无法立即访问特权帐户,从而为攻击者增加了一些细微差别。

在这种情况下,公钥也是一个加号,因为:

  1. 攻击者需要您的公钥
  2. 攻击者需要密码(或身份验证方法)才能获得更高的特权

1
我使用的密码很少少于20个随机字母数字字符(设置[A-Za-z0-9]加上一些特殊字符)。20个这样的字符(所以40个字符集中的长度为20个)为您提供10 ^ 32个组合的顺序。128位熵约为10 ^ 38。考虑到所有因素,这并没有太大的区别,而且SSH服务器可以自由地实现它喜欢的任何类型的速率限制,因此,这并不意味着您在进行脱机蛮力攻击。如果您可以忍受与128位密钥一样难以记住的密码,那么密码并没有什么错。
CVn

@michael shh ...不给范围,现在黑客知道他们应该使用长度为20个字符的彩虹表...?
Braiam

6
@Braiam Rainbow表仅在攻击者可以访问散列进行脱机搜索时才有用。在这种情况下,攻击者只有服务器响应可以进行验证,这很可能仅限于这么多尝试,而且速度慢得多。
彼得

@Peter ups,我把字典和哈希都弄乱了,但是无论如何,OP都问他为什么不应该使用弱密码或空密码,女巫是可笑的,因此我来了一个荒唐的情况,为什么他不应该这样做。抱歉,我没有这样解释,被认为是FUD。
Braiam

2
如果您想尝试使用一些1.8 * 10 ^ 35密码(并且仅用于40个字符集中的18-22个随机字符,并且您不知道该字符集中的哪个字符[A-Za-z0- 9](我使用),我几乎说过玩得开心。大约相当于117.1位的熵(2 ^ 117.1〜1.78 * 10 ^ 35),就像@Peter指出的那样,您很可能需要执行在线攻击。存储所有这些密码(不求助于压缩)大约需要3.6 * 10 ^ 36字节或3 * 10 ^ 24 TiB(如果这个数字错了几个数量级,谁在乎呢?)。关键字随机
CVn

1

只要您采取安全预防措施,这并不是完全不好。例如,您可以安装CSF(配置服务器防火墙)并设置允许的失败尝试次数,因此,如果有人尝试了5次以上的失败尝试,那么它们将被自动阻止。因此,最佳回答者的整个第一部分根本不会成为问题。这件事在我身上发生过很多次,幸运的是所有介绍者都被永久封锁了。我想对于服务器来说,如果您是唯一管理服务器的人,这不是什么大问题,但是,当然,如果有很多系统管理员,或者您在组织中工作,那么显然不要使用根。同样对于台式机,我猜使用另一个帐户会更好,因为存在安全风险,因为您使用了大量软件,但是在服务器中,您不会 不要购买您不信任的随机软件,请确保将其尽可能降低。因此,结论是:不,如果您知道如何正确管理服务器,那并不是真的有害。

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.