root 登录或 sudo 用户进行服务器管理?

ale*_*.bg 20 security linux ssh root sudo

我试图理解直接使用 root 进行 ssh 或在维护服务器的情况下创建辅助 sudo 用户之间的技术参数/安全影响。为了澄清这一点,我们讨论的是单个管理员拥有的服务器。对于在机器上工作的多人来说,很明显,为每个实际人员拥有唯一的用户和细粒度的权限可以带来审计跟踪的好处。

我的想法是,如果这是一个桌面站,那么这是有道理的,建议使用非root用户进行日常工作,但在服务器上,您通常登录来维护它,并且99%的时间您的所有活动都需要root权限。

那么,创建一个“代理”用户(无论如何都要 sudo 到 root,而不是直接提供对 root 的 ssh 访问权限)是否有任何安全优势呢?

我能想到的唯一好处是通过模糊性实现安全性,即机器人通常会尝试探测“root”用户。但从我的角度来看,如果 sudoers 的用户受到威胁,就等同于 root 用户受到威胁,所以游戏就结束了。

此外,大多数远程管理框架、NAS 系统、虚拟机管理程序都鼓励使用 root 用户进行 Web 登录。

Tyl*_*erW 16

需要考虑的一件事是:如果使用 SSH 密钥进行远程身份验证,如果私钥被泄露会发生什么?

如果 root:root 访问权限受到威胁。希望您没有使用该密钥在多台计算机上进行根访问。

如果用户:该用户已受到威胁。然而,攻击者可能无法运行 sudo,因为用户的密码没有被泄露。然而。(假设使用sudo需要密码)

情况仍然很糟糕,但可能会更好。(如果您对 SSH 密钥使用密码短语也会更好一些)

  • 好吧,那个私钥应该_仍然_有一个密码。 (2认同)
  • @alex.b.bg 你的意思是作为一个拥有泄露密钥的非 root 用户?用户需要输入当前密码才能更改用户密码。要以其他方式强制进行更改,需要管理员访问权限,例如 su 或 sudo...这又需要密码。 (2认同)

voi*_*oid 12

其他用户已经提到了非常好的观点。我想回顾一下我认为最重要的那些......

...为什么要使用 sudo

  • 如果您用于 root 登录的 ssh 密钥被泄露,您几乎没有机会正确摆脱这种情况。
  • 使用 sudo 的命令会被记录下来,这不仅在有多个管理员时应用安全,而且在某些攻击者进入您的系统时也适用。
  • 您有非常精细的选项来调整每个用户的权限,是通过/etc/ssh/sshd_config还是通过SUDOers文件。(不要使用其他编辑器visudo!)
  • 即使您的默认 ssh 登录受到威胁:像 sudo 这样的额外层确实会使 root 权限更难访问。(我总是Defaults targetpw在我的台式机和服务器上使用 - 。因此,必须知道两个不同的密码才能成为 root)

添加到最后一点:我个人对服务器上的每项任务使用单独的用户(我是唯一的管理员):例如,一个用户用于备份。它可以访问要备份的文件,并可以通过 ssh 单独访问异地服务器。我有一个用于监控的用户,该用户对日志文件和监控 API 的访问非常有限。仅举几个例子...

但对我个人而言,最重要的一点是我们都是人类。你会犯错误。必须在每个命令之前键入sudo,这可能会改变系统的行为,至少会增加一个障碍,使您过度思考您的命令。

所以我强烈建议:使用 sudo 而不是 root 用户


从技术角度来看:使用root用户有两种常见的方式。可以直接通过 ssh 以 root 身份登录,也可以通过 ssh 登录并键入sudo suor su -(...) 作为第一个命令。这两种方式都不会让我感到舒服。

ssh root 登录

  • 与是否打开 root 登录无关:使用 ssh 密钥文件是唯一安全的方法。不要使用没有密钥文件的密码。(这是一个指南
  • 添加防火墙规则和 sshd 规则,例如LoginGraceTimeMaxAuthTries来限制 BruteForce 攻击。
  • 保留以 root 身份登录的选项会增加安全漏洞。即使它不太可能利用这个缺陷。(我更喜欢PermitRootLogin
  • 从技术上讲,如果您遵循最佳实践来保护 root 登录,那么这并不比日常 ssh 更安全

  • 在我看来,以 root 身份登录的唯一问题是您不必sudo在每个命令之前键入,这使您更容易出错


Kra*_*out 9

对于所有用途,我强烈建议您不要使用root;如果可能的话甚至禁用它。我经常在 Linux/UNIX 服务器上禁用 root。无法屏蔽 root 用户,其操作不会被记录。至少,会记录 sudo 命令,这在管理员处理不当的情况下非常有用。您还可以细化用户的权限,仅授予某些权限。当然,禁用 root 后,就不可能使用 root 进行 ssh 日志记录。

根据经验,只有在需要单用户启动或紧急启动时才会错过root;服务器无法正常启动的罕见情况。但如果是这种情况,您可以启用它,更改其密码并继续恢复。
另一种情况是使用 sftp(或 ftp,当然应该避免使用,除非仅在内部网络中)复制文件,您需要直接复制到仅具有 root 权限的目录或从目录复制。在这种情况下,您可以使用 ACL 向其他用户授予权限并继续。

  • 我要求一个场景,其中我是给定机器的唯一管理员 - 我是否缺少这两种方法的技术/安全优势(例如,即使“代理”用户也受到损害,它也无法做到这一点)与直接受到损害的根用户相比,造成的损害如此之大。对于多个管理员/用户来说,审计跟踪参数是一个很好的参数。我实际上会编辑问题以将其添加到问题的上下文中。 (3认同)

Sti*_*mer 6

在服务器上,您通常需要登录来维护它,并且 99% 的情况下您的所有活动都需要 root 权限。

我想对此提出异议。有许多例行任务只是查找任何用户都可以看到的信息。“top”,“ps”,“df”,查看日志等。

养成只以 root 身份运行需要 root 的命令的习惯。并三次检查这些命令以确保您没有拼写任何错误。

如果你以 root 身份运行所有东西,你就会变得马虎。每个人都会遇到这种情况。
当马虎时,你就会犯错误。每个人都会遇到这种情况。

不要养成这种习惯。

(我也同意其他几个人所说的,今天成为唯一的管理员并不意味着明天你将成为唯一的管理员)


小智 5

安全顾问在这里。

所有应用程序、系统、解决方案、操作系统以及您能想到的任何其他系统的最佳实践是仅使用 root 帐户进行设置,然后将其禁用。

无论如何,创建一个具有管理员权限的个人用户帐户以进行日常管理,但根帐户,无论它是什么,都应在设置完成后禁用。

混淆帐户仍然不是一个坏主意,即不要将您的管理帐户命名为 admin,但其实际价值非常低。大多数“黑客”发生在数周和数月内,而不是像媒体/电影/电视节目那样呈现的几秒钟和几分钟,任何人都将拥有“黑客”技能,您还将拥有检查 Windows 管理员 SID 等内容的技能(对于内置 Windows 管理员来说,它始终是 S-1-5-32-544)。