互联网上的每个人都建议通过以下方式禁用 root 登录SSH因为这是一种不好的做法,也是系统中的一个安全漏洞,但没有人解释为什么会这样。
启用 root 登录(尤其是禁用密码登录)有何危险?
如果允许密码身份验证,从安全角度来看,X 符号用户名和 Y 符号密码或 root 用户名和 X+Y 符号密码之间有什么区别?
答案1
为什么通过 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 个字符的密码)。此外,此证书仅用于登录您的服务器,不用于任何外部服务。
监控 root 访问
评论来自@菲利普·库林这应该是一个答案:
禁用 root 是出于管理原因。在商业服务器上,您总是希望控制人员的访问。 root 从来就不是一个人。即使您允许某些用户具有 root 访问权限,您也应该强制他们通过自己的用户登录,然后使用 su - 或 sudo -i 以便记录他们的实际登录。这使得撤销对个人的所有访问权限变得更加简单,因此即使他们拥有 root 密码,他们也无法用它做任何事情。 ——菲利普·库林
我还要补充一点,它允许团队强制执行最小特权原则,使用正确的 sudo 配置(但编写一个听起来更容易)。这使得团队能够更好地不加批判地进行分配,而不会泄露城堡的钥匙。
链接
http://bsdly.blogspot.de/2013/10/the-hail-mary-cloud-and-lessons-learned.html
这篇文章来自评论,我想给它一个更突出的位置,因为它更深入地探讨了尝试通过 SSH 登录的僵尸网络的问题、它们是如何做到的、日志文件的样子以及人们可以采取什么措施来阻止他们。它的作者是彼得·汉斯汀。
答案2
这些可能是不允许直接 root 登录的一些原因。
- 暴力尝试。直接 root 登录可能会对成功的暴力攻击造成更大的损害。
- “无密码”SSH 密钥配置错误(发生人为错误)可能会将您的计算机暴露在互联网上
但这只是冰山一角。您需要配置其他限制和配置,例如:
- 更改默认端口(22)
- 强密码和密码短语
- 禁用基于主机的身份验证
- 创建允许的用户列表
- 配置空闲超时
- 强制 SSHv2 协议
- 禁用空密码
- 使用fail2ban作为对抗暴力破解的措施
- 记录一切
- 配置 SSH 密钥,并仅信任 .ssh/authorized_keys 中的公钥
答案3
你是对的,root 用户名和 X+Y 符号密码在加密上至少与 X 符号用户名 + Y 符号密码一样安全。事实上,它甚至更安全,因为人们的名字很容易猜到(机器人可能只是尝试约翰,迈克,比尔等......顺便说一句:这就是他们中的许多人所做的而不是尝试root)。如果是有针对性的攻击,你就特别不走运,因为如果有人想要破坏公司的服务器,找出系统管理员的名称(昵称)就不成问题了。
一旦攻击者能够访问系统管理员用于 ssh 登录的帐户(然后使用su
或sudo
执行其任务),他就可以使用一个程序感染该用户的会话,当系统管理员键入下一个命令时,该程序将向攻击者发送根密码时间。
它是任何从安全角度来看,这是(或应该)被视为不良做法的 root 登录类型。 “普通”用户登录 -> su/sudo 链添加了审计跟踪。用简单的英语来说:它可以找出谁做了什么。
一种特殊情况可能是只有一个人具有 root 访问权限。在这种情况下,使用额外的“普通”用户不会增加太多价值(至少我永远看不到该价值)。但无论如何 - 你应该在系统上有一个简单的用户(用于非管理任务,运行 wget 等;-))。
答案4
只要您采取安全预防措施,这并不完全是坏事。例如,您可以安装 CSF(配置服务器防火墙)并将其设置为允许的失败尝试次数,因此,如果有人尝试(假设失败尝试超过 5 次),那么他们将被自动阻止。所以最佳答案者的整个第一部分根本不会有问题。这种情况在我身上发生过很多次,幸运的是所有的介绍人都被永久屏蔽了。我想对于服务器来说,如果你是唯一管理服务器的人,那么这不是一个大问题,但是当然,如果有很多系统管理员,或者如果你在一个组织中工作,那么显然不要使用根。同样对于台式电脑,我想使用另一个帐户更好,因为存在安全风险,因为您使用了很多软件,但在服务器中,您不会随机使用您不信任的软件,您要确保使它们尽可能低。所以结论是,不,如果您知道如何正确管理服务器,那并没有什么害处。