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

所以我一直在阅读使用susudo之间的区别,并且每个人似乎都认为sudo方法比允许访问root帐户本身更安全。 他们说使用root帐户只需一个命令即可破坏整个系统。 我明白了。 但是,在系统上创建的初始用户也可以使用sudo访问所有命令。 我可以通过运行su -l找到它。 如果是这种情况,那么我可以简单地运行sudo 来破坏我的系统。 那么这种方法如何更好或更安全,然后允许我直接访问超级用户帐户? 我可以运行所有相同的命令……

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

人们还说,如果系统遭到入侵并由外国人进入,那么在root帐户下会让他们对我的系统做出可怕的事情。 但在我看来,如果他们已经可以访问我的帐户,并且知道我的密码,他们可以通过使用sudo并输入我的密码来做同样可怕的事情,因为他们甚至不需要知道超级用户的密码。 我没有到这里来的是什么?

就个人而言,我不一定认为它更安全,并且(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,恕我直言

想象一下,你有20分钟做一些复杂的事情。 你有点宿醉,你必须赶去。 你说,“让我们用su”。 “这会节省一些时间”是你的理由。

你不小心打字

 rm -rf /* 

代替

 rm -rf ./* 

你的系统现在正在自行封锁,你有10分钟直到你的截止日期。

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

这就是“安全”在这里意味着什么。 最大限度地降低用户(所有用户,而不仅仅是初学者)犯下致命错误的风险。

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

安全方面也有一些sudo更好的东西。 正如@Panther所说 – 日志记录,限制,root密码是SPOF等。)

我想为其他答案添加一些历史视角。 不幸的是,除了我自己对Usenet讨论和杂志文章的记忆之外,我没有任何消息来源。

前段时间,在20世纪90年代,即使没有太多的计算机知识,发行版也使得在自己的硬件上安装Linux变得更容易.1因此,Linux开始吸引越来越多的人,令人惊讶的是之前没有被系统管理员用过一些UN * X方言。 相反,许多人习惯于(单用户)系统,如Windows 95/98。 他们了解到大多数Linux系统管理任务使得必须在这个奇怪的“根”帐户下工作。

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

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

  • 你不能直接登录root帐号.²:-)
  • 安装过程不会要求您提供(附加)root密码,只需要一个(您的用户)密码。
  • sudo缓存您的凭据,因此对于多个管理命令,您只需输入一次密码(与su相反)。 这减少了以root权限打开shell或新终端的冲动。
  • 并且它可以更容易地在线和文档中告诉用户他们必须以管理员身份输入哪些命令,哪些命令不能.3

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

几十年来,已经可以通过ssh禁用root登录。 Ubuntu禁用root帐户并让人们sudo所有东西的方式只不过是一个噱头。 只是“sudo -s”,你有一个root shell。 通过ssh禁用root登录并将其保留在那里。

根据配置, sudo 不一定有效。 当然,如果sudoers配置显示“user ALL =(ALL)ALL”, sudo将不提供额外的保护。 但是,您可以指定需要经常运行的特权命令列表,例如安装新软件包,并省略诸如rm类的危险命令。

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

sudo允许你只允许某些命令不是sudo超过su的唯一好处。

在大多数商店,它甚至不是最重要的好处。

使用sudo,您知道谁执行了特定命令。

现在也许这对你没关系。 例如,您可能是计算机的唯一用户。 如果是这样,那么sudo可能不比su好。

但是很多主机都有多个管理员。

sudo然后变得非常有用,因为如果有人做错了,sudo会让你知道是谁做的。

这使您可以了解错误发生的原因,并教育人们防止错误重复发生,或者在必要时从某人那里删除工具。

作为奖励,当人们知道他们的行为被记录下来时,他们通常会更加小心。

苏多并不完美。

如果两个人同时做“sudo sh”,那么很难将命令归结为一个或另一个。

恶意管理员总是可以删除或编辑日志 – 尽管干净利落并不总是像人们想象的那么容易,特别是如果你有集中式日志记录。

由于原始问题中确定的所有原因,sudo不一定会阻止愚蠢或恶意行为。

但它确实为您提供了更好的防止再次发生的机会。