创建非root用户的目的

Jon*_*bek 6 permissions root sudo

有人告诉我,创建一个具有 sudo 权限的新用户并禁用 root 用户是常见的做法。这降低了哪些风险?

Rav*_*ina 14

禁用 root 并创建能够使用的非 root 用户的一个安全优势sudo是保护您的服务器免受试图猜测您的“root”密码的蛮力攻击。

正如 Rinzwind 所说,您认为哪个更安全?

  • Root账号+难猜密码
  • 自定义用户名 + 难以猜测的密码

另一个更重要的优势是,当您只有一个 root 用户时,您正在运行的所有内容都以“root”的力量运行,root 有权执行所有操作,因此运行错误的命令或犯一个简单的错误都有可能破坏你的服务器。

只需创建一个非 root 用户:

  • 你没有给出你的root密码!
  • 您可以定义谁可以做什么!
  • 你可以审计谁做了什么!
  • 您正在最大限度地减少使用 root 访问权限运行错误或危险命令的可能性。

还要记住,如果有人可以物理访问服务器,他或她几乎可以对服务器做任何他/她想做的事情,除非该服务器上的所有内容都已加密。

  • +1,但我想补充一点,对 sudoer 帐户的用户名和密码进行成功的暴力攻击与暴力破解 root 的密码具有相同的效果,因此用户名未知这一事实没有安全优势。事实上,如果攻击者能够检索用户名列表,依赖用户名作为“密码”的一部分会降低安全性。与其选择一个难以猜测的用户名,不如将其附加到密码并将用户命名为“abc”更安全。 (3认同)
  • 每个使用 Linux 足够长的人都曾有过不小心输入的命令,如果他们当时是“root”,就会完全破坏他们的系统。我最近想删除当前目录中的所有内容,并且不小心输入了 `rm -rf 。/*` 而不是 `rm -rf ./*`。 (3认同)
  • 魔鬼的拥护者:在服务器上,你不应该有密码,只有 SSH 密钥......而且像`fail2ban` 蛮力攻击将需要很长时间 所以这使得通过缺乏隐私保护免受事故的安全,但是很多事情您确实需要 root 权限(那些没有编写脚本的权限...),因此您仍然有很多发生事故的机会。备份,备份和备份。如果服务器受到威胁,请准备好从头开始重新创建服务器。 (2认同)

Eri*_*and 5

除了@Ravexina 的回答中提到的有效问题之外,我认为值得注意的是:

通过 SSH 连接到您的服务器并不是恶意行为者执行操作的唯一方式

事实上,对 SSH 的成功暴力攻击可能是黑客进入您的服务器的最不可能的方式。当输入无效密码时,SSH 会休眠 3 秒,因此暴力破解强远程 SSH 密码实际上是不可能的。*

更有可能的是,他们可以找到远程代码执行漏洞并以这种方式“进入”。如果 他们这样做时,您希望他们获得尽可能少的许可。你真的不希望他们这样root

看,当您运行一个程序时,例如 Apache、PHP 或 PHP/Python/NodeJS 脚本,甚至您的 Web 浏览器:该“进程”也必须以用户身份运行。例如:如果您将 PHP 脚本运行为root,那么该 PHP 进程可以做任何root可以做的事情。

举例来说,恶意行为者能够执行“远程代码执行”攻击:他们能够在您的服务器上运行代码。如果 PHP 运行该恶意代码,并且 PHP 运行为root,则意味着黑客的代码也运行为root。但是,如果 PHP 作为权限较低的用户运行(即:)webapp,则可以显着减轻它可能造成的损害。当您运行控制台脚本时,这也适用,而不仅仅是 PHP:每种语言都可能存在此问题。

这里棘手的是:RCE 漏洞甚至可能不是编写的代码:它可能深埋在您的代码调用的某些 3rd 方库/模块中:计算日期、与数据库交互、渲染 HTML 等...换句话说:您可能甚至不知道它的存在。当您更新依赖项/库时,它可能会默默地添加到您的代码库中。正如我们在EventStream hack中看到的,获得上游库存储库的控制权并使用它将恶意代码推送到毫无戒心的下游应用程序非常容易。如果该恶意代码以 root 身份运行,它就可以控制您的整个服务器,甚至掩盖其踪迹,让您永远不知道它发生的地方。

因此,虽然为所有事情设置单独的用户可能无法完全阻止攻击,但如果确实发生,它将显着减轻远程代码执行攻击可能造成的损害。

* 显然,如果您的密码是abc123这样的,则不适用,因为这可能是黑客在暴力破解时首先尝试的密码之一。