如果用户被授予所有命令的访问权限,那么 sudo 为何比直接使用 su 更安全?

如果用户被授予所有命令的访问权限,那么 sudo 为何比直接使用 su 更安全?

因此,我一直在研究使用su和之间的区别sudo,似乎每个人都同意这种sudo方法比允许访问 root 帐户本身更安全。他们说使用 root 帐户,只需一个命令就可以破坏整个系统。我理解这一点。但是在系统上创建的初始用户也可以使用 sudo 访问所有命令。我可以通过运行来发现这一点su -l。如果是这种情况,那么我只需运行就可以sudo <game-ending command>破坏我的系统。那么这种方法比允许我直接访问超级用户帐户更好或更安全吗?我可以运行所有相同的命令……

是不是因为sudo在命令行上使用时我明确地告诉计算机我认为我知道我在做什么?他们是否认为除非他们明确地这么说,否则人们会忘记他们处于超级用户帐户下?

人们还说,如果系统被外国入侵并进入,那么使用 root 帐户就可以对我的系统进行可怕的操作。但在我看来,如果他们已经可以访问我的帐户,并且知道我的密码,那么他们就可以通过使用 sudo 并输入我的密码来执行这些可怕的操作,因为他们甚至不需要知道超级用户的密码。我在这里没有明白什么?

答案1

我个人认为它不一定更安全,而且 (sudo) 的大部分好处都体现在多用户系统上。在单用户系统上,它可能没什么用。

其好处如下(无特定顺序):

  • sudo 具有卓越的日志记录功能。sudo 记录每个命令。
  • sudo 允许更细粒度的控制。可以配置 sudo 以授予某些命令(但不是所有命令)的 root 访问权限。
  • sudo 使用登录密码。这样就不必提供 root 密码(就像使用 su 一样),并且与上面关于更细粒度的控制/访问 root 的观点相关。
  • 在 Ubuntu 中,默认情况下,root 帐户是锁定的。这可以阻止破解者登录(例如通过 ssh 进行远程登录),他们必须猜测用户名和密码。如果 root 帐户没有被锁定,就像 su 的情况一样,那么他们只需要破解 root 的密码。
  • sudo -i可能是将 root 的环境变量与用户隔离的最佳方法。这种方法时常出现,但比较深奥。请参阅https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • 有些人感觉在以 root 身份运行每个命令之前都必须键入 sudo 或 sudo 超时可以让他们停下来更清晰地思考,并减少他们的错误或运行错误的命令。如果这样做对您有帮助,那也将是一种好处。

可能还有其他好处,但在我看来,这些是主要的好处。

也可以看看 -https://help.ubuntu.com/community/RootSudo

尝试回答您的一些其他想法:

  • 只要你知道密码,su 或 sudo 都无法阻止你运行恶意代码。两者都不是更安全或更好。
  • 黑客可以通过多种方法获得 shell 访问权限。当你在安全通知中看到“运行任意代码”时 -https://usn.ubuntu.com/usn/- 这意味着破解者可以运行 /bin/bash 或任何其他代码。因此,破解者可以通过各种漏洞获得 shell 访问权限,而无需知道您的登录名或密码。sudo 或 su 对此都无济于事。
  • 如果黑客拥有 shell 访问权限,他们无需 root 访问权限即可造成大量破坏。例如,勒索软件会加密您的所有个人数据。
  • 如果攻击者通过 su 或 sudo 获得了 root 权限的账户的 shell 访问权限,攻击者可以通过多种方法获得 root 权限,这超出了本文的讨论范围。在这方面,sudo 和 su 也都各有优劣。

因此,尽管您已经发现 sudo 存在问题或缺陷,但 su 具有完全相同的漏洞,并且 su 在这些方面并不优于 sudo,恕我直言

答案2

想象一下,您有 20 分钟的时间来做一件复杂的事情。您有点宿醉,必须赶紧做。您说:“我们用 su 吧。”您的理由是“这样可以节省一些时间”。

你不小心输入了

rm -rf /*

代替

rm -rf ./*

您的系统现在正在崩溃,距离截止日期还有 10 分钟。

如果您明确选择何时需要 root,则可以最大限度地减少发生这种情况的可能性。可能不需要 root,rm -r ./*那么为什么要使用它呢?为什么要冒这个险?

这就是“安全”在这里的含义。将用户(所有用户,而不仅仅是初学者)犯下致命错误的风险降至最低。

当然,这是一个极端的例子,不应该允许在生产环境中发生(我保证它在生产环境中发生过)。

安全方面,sudo 在某些方面也更胜一筹。@Panther 说- 日志记录、限制、root 密码是 SPOF 等)

答案3

我想为其他答案添加一些历史视角。不幸的是,除了我自己对 Usenet 讨论和杂志文章的记忆外,我没有其他现成的资料。

20 世纪 90 年代,发行版让在自己的硬件上安装 Linux 变得更加容易,即使没有太多计算机知识。¹ 因此,Linux 开始吸引越来越多的人,令人惊讶的是,这些人之前并没有接受过 UN*X 方言的系统管理员培训。相反,许多人习惯于 Windows 95/98 等(单用户)系统。他们了解到,大多数 Linux 系统管理任务都需要在那个奇怪的“root”帐户下进行。

因此,有些用户只是以并使用该帐户进行所有日常工作。为什么他们必须输入su一遍又一遍地输入密码,或者只为一些管理命令登录到新的 tty?但是使用当然,将所有命令都放在一起并不是一个好主意,因为你可能会在错误的地方使用一些不经意的命令来对系统造成更大的伤害。这甚至导致一些发行版(是 SuSE 吗?)修改了桌面背景向用户显示一个大警告,提示您该帐户只能用于管理任务。

因此,Ubuntu 的方式sudo具有一些优势(除了那些已经由 Panther 列出)。

  • 您无法直接登录帐户。² :-)
  • 安装过程不会要求您输入(额外的)root密码,您只需要一个(您的用户的)密码。
  • sudo缓存您的凭据,因此对于连续的多个管理命令,您只需输入一次密码(与 不同su)。这减少了使用以下命令打开 shell 或新终端的冲动特权。
  • 并且可以更轻松地在线和在文档中告诉用户哪些命令必须以管理员身份输入,哪些命令不需要输入。³

¹ 对于那些不敢自己动手的人,还有安装派对。²
但你sudo -i使用或之类的命令sudo su - root在以普通用户身份登录后获取 root shell。³
但你当然知道你不应该简单地从互联网上复制粘贴命令, 正确的?

答案4

根据配置,sudo <game ending command>不一定有效。当然,如果sudoers配置为“用户 ALL=(ALL) ALL”,sudo则不会提供额外保护。但是,您可以指定需要经常运行的特权命令列表,例如安装新软件包,并省略危险命令,例如rm

这样,如果您以 身份登录,则可以运行所有命令root,但由于您只是偶尔需要这样做,因此运行的风险<game ending command>将大大降低。

相关内容